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

#python #azure #azure-machine-learning-service

#python #azure #azure-machine-learning-service

Вопрос:

Я пытаюсь представить эксперимент в службе машинного обучения 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»: { «корреляция»: { «операция»: «bb12f5b8bd78084b9b34f088a1d77224», «запрос»: «iGfp sjC34Q=»}, «ошибка»: { «код»: «Ошибка пользователя», «сообщение»: «Не удалось десериализовать определение запуска»

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

 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 параметры в my train.py (документация ScriptRunConfig , к сожалению, не содержит много подробностей об этом).

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

Комментарии:

1. Обходным путем было бы добавить значения по умолчанию в мой ArgumentParser в my train.py , но на самом деле это не решение проблемы…

2. Можете ли вы вместо этого использовать Estimator ? Спрашиваю, потому что этот подход работает с Estimators , но не с ScriptRunConfig (и я понятия не имею, почему они не принимают аргументы одного и того же типа для обоих).

3. Привет! Спасибо за это. Итак, я сначала попробовал indeed с Estimator , но у меня есть небольшая эзотерическая зависимость, с которой мне приходится обращаться через pip install git https://github.com/... , поскольку пакет — это не то, что я могу добавить в conda_packages AFAIK. Поэтому, следуя руководству, я предположил, что «использование объектов RunConfiguration и ScriptRunConfig[…] дает вам большую гибкость и максимальный контроль» и установил эту зависимость локально на своей виртуальной машине. Поскольку это не кажется жизнеспособным маршрутом, я мог бы выбрать Estimator и пользовательский образ docker с установленной моей зависимостью, но я все равно должен попробовать это…

Ответ №1:

В конце концов я отказался от 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
  

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

Комментарии:

1.Для всех, кто читает это после 2021 года… В более поздних версиях AzureML оценщики теперь устарели, поскольку azuremlsdk == 1.19.0 learn.microsoft.com/en-us/azure/machine-learning /…

Ответ №2:

Правильный способ передачи аргументов в ScriptRunConfig и RunConfig — это список строк в соответствии с https://learn.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)
  

Комментарии:

1. Вот полный пример от Microsoft, который показывает весь процесс. learn.microsoft.com/en-us/learn/modules /…