如何将参数传递给Azure机器学习服务中的训练脚本?

时间:2019-04-06 22:05:03

标签: python azure azure-machine-learning-service

我正在尝试使用工作区ws中的ScriptRunConfig对象在Azure VM上在本地VM上的Azure机器学习服务 中提交实验,如

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:{       “错误详情”: {           “相关性”:{               “ operation”:“ bb12f5b8bd78084b9b34f088a1d77224”,               “ request”:“ iGfp + sjC34Q =”           },           “错误”:{               “ code”:“ UserError”,               “ message”:“无法反序列化运行定义”

更糟糕的是,如果我将数据文件夹设置为使用数据存储(可能需要)

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

错误是

  

UserErrorException:具有非本地python类型值的字典是   runco​​nfigs不支持。
  {'-数据文件夹':   $ AZUREML_DATAREFERENCE_d93269a580ec4ecf97be428cd2fe79,   '--training-data':'train.csv'}

我不太了解如何将script_params参数传递给train.py(不幸的是,the documentation of ScriptRunConfig并未包含很多细节)。

在这两种情况下,有人知道如何正确创建src吗?

2 个答案:

答案 0 :(得分:1)

最后,我放弃了namespace A::B::C::D::E { struct X { int y; }; } namespace B { using namespace A::B::C::D::E; void foo() { X aa; B::X bb; aa.y = 0; } struct X { int z; }; void bar() { X aa; B::X bb; aa.y = 0; } } int main() { return 0; } 并按如下方式使用ScriptRunConfig来传递Estimator(在提供了计算目标之后):

script_params

这还使我可以通过将https://hub.docker.com/上的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>') Docker镜像安装到pip_packages上,该镜像是从Dockerfile创建的,例如:

custom_docker_image

(有效!)

答案 1 :(得分:1)

将参数传递给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)