Как передать параметры в сценарий обучения в службе машинного обучения Azure?

Я пытаюсь представить эксперимент в службе машинного обучения Azure локально на виртуальной машине Azure, используя ScriptRunConfig объект в моей рабочей области ws, как в

from azureml.core import ScriptRunConfig    
from azureml.core.runconfig import RunConfiguration
from azureml.core import Experiment

experiment = Experiment(ws, name='test')
run_local = RunConfiguration()

script_params = {
    '--data-folder': './data',
    '--training-data': 'train.csv'
}

src = ScriptRunConfig(source_directory = './source_dir', 
                      script = 'train.py', 
                      run_config = run_local, 
                      arguments = script_params)

run = experiment.submit(src)

Однако это не с

ExperimentExecutionException: { "error_details": { "correlation": { "operation": "bb12f5b8bd78084b9b34f088a1d77224", "request": "iGfp+sjC34Q=" }, "error": { "code": "UserError", "message": "Не удалось десериализовать определение прогона"

Хуже того, если я настрою свою папку данных для использования хранилища данных (что, вероятно, мне понадобится)

script_params = {
    '--data-folder': ds.path('mydatastoredir').as_mount(),
    '--training-data': 'train.csv'
}

ошибка

UserErrorException: словарь со значениями не родного типа Python не поддерживается в runconfigs.
{'--data-folder': $ AZUREML_DATAREFERENCE_d93269a580ec4ecf97be428cd2fe79, '--training-data': 'train.csv'}

Я не совсем понимаю, как я должен пройти script_params параметры к моему train.py ( документация ScriptRunConfig не включает много подробностей об этом, к сожалению).

Кто-нибудь знает, как правильно создавать src в этих двух случаях?

2 ответа

Правильный способ передачи аргументов в ScriptRunConfig и RunConfig - это список строк в соответствии с https://docs.microsoft.com/nb-no/python/api/azureml-core/azureml.core.runconfiguration?view=azure-ml-py.

Модифицированный и рабочий код будет выглядеть следующим образом.

from azureml.core import ScriptRunConfig    
from azureml.core.runconfig import RunConfiguration
from azureml.core import Experiment

experiment = Experiment(ws, name='test')
run_local = RunConfiguration()

script_params = [
    '--data-folder',
    './data',
    '--training-data',
    'train.csv'
]

src = ScriptRunConfig(source_directory = './source_dir', 
                      script = 'train.py', 
                      run_config = run_local, 
                      arguments = script_params)

run = experiment.submit(src)

В конце концов я забросил ScriptRunConfig и использовал Estimator следующим образом пройти script_params (после предоставления цели вычисления):

estimator = Estimator(source_directory='./mysourcedir',
                      script_params=script_params,
                      compute_target='cluster',
                      entry_script='train.py',
                      conda_packages = ["pandas"],
                      pip_packages = ["git+https://github.com/..."], 
                      use_docker=True,
                      custom_docker_image='<mydockeraccount>/<mydockerimage>')

Это также позволило мне установить мой pip_packages зависимость, поставив на https://hub.docker.com/ custom_docker_image Образ Docker, созданный из Dockerfile, например:

FROM continuumio/miniconda
RUN apt-get update
RUN apt-get install git gcc g++ -y

(это сработало!)

Другие вопросы по тегам