#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 /…