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

Я пытаюсь отправить эксперимент в службе машинного обучения Azure локально на виртуальной машине Azure с помощью _ 1_ в моей рабочей области 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 в этих двух случаях?


person Davide Fiocco    schedule 06.04.2019    source источник
comment
Обходной путь - добавить значения по умолчанию к моему ArgumentParser в моем train.py, но это не совсем решение этой проблемы ...   -  person Davide Fiocco    schedule 09.04.2019
comment
Можете ли вы использовать вместо этого Estimator? Спрашивает, потому что этот подход работает с Estimators, но не с ScriptRunConfig (и я понятия не имею, почему они не принимают аргументы одного и того же типа для обоих).   -  person Vlad Iliescu    schedule 09.04.2019
comment
Привет! Спасибо за это. Итак, я сначала действительно попробовал с Estimator, но у меня есть небольшая эзотерическая зависимость, которую я должен обрабатывать с помощью pip install git+https://github.com/..., поскольку пакет - это не то, что я могу добавить в conda_packages AFAIK. Следовательно, следуя руководству, которое я предполагал, использование объекта RunConfiguration и объекта ScriptRunConfig [...] дает вам большую гибкость и максимальный контроль и устанавливает эту зависимость локально на моей виртуальной машине. Поскольку это не кажется жизнеспособным путем, я мог бы пойти на Estimator и настраиваемый образ докера с установленной моей зависимостью, но мне все равно нужно попробовать это ...   -  person Davide Fiocco    schedule 09.04.2019


Ответы (2)


В конце концов, я отказался от 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/ a custom_docker_image Образ Docker, созданный из файла Docker, например:

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

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

person Davide Fiocco    schedule 15.04.2019
comment
Для тех, кто читает это после 2021 года ... Оценщики теперь не рекомендуются в более поздних версиях AzureML, поскольку azuremlsdk == 1.19.0 docs.microsoft.com/en-us/azure/machine-learning/ - person Davide Fiocco; 09.01.2021

Правильный способ передачи аргументов в 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)
person Ole-Henrik Borlaug    schedule 08.05.2019