Как передать параметры в сценарий обучения в службе машинного обучения 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
(это сработало!)