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

Я пытаюсь отправить эксперимент в службу машинного обучения 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 + sjC34 ="}," error ": {" code ":" UserError "," message ":" Не удалось десериализовать определение прогона "

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

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

ошибка:

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

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

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

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Правильный способ передачи аргументов в 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)
1 голос
/ 15 апреля 2019

В конце концов я отказался от 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, созданного из Dockerfile, например:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...