首页 > 解决方案 > 在 Azure ML 服务中装载 FileDatasets

问题描述

我遇到了 Azure 机器学习服务中的数据集模块的问题。我用一堆图像创建了一个 FileDataset 来在 TensorFlow 中训练一个模型。我将数据集安装在目标计算中,然后将安装点传递给训练脚本,如我们在 GitHub 上的示例笔记本中所述

我尝试了两种方法:将路径作为脚本参数(如 GitHub 上的建议)和命名输入传递,但它们似乎都没有正确传递安装点。任何人都知道哪个是使它工作的正确方法?(我可以让它与数据源一起工作)

作为脚本参数

script_params = {
    '--data-folder': dset.as_named_input('dogscats_train').as_mount('tmp/dataset'),
} 

src = TensorFlow(source_directory =  r'Tensorflow',
              framework_version = '1.13',
              entry_script = 'train.py',
              script_params=script_params,
              compute_target='amlcompute', 
              vm_size='Standard_NC6', 
              use_gpu = True, 
              pip_packages = ['matplotlib', 'pillow', 'numpy', 'azureml-sdk'])

挂载路径:

/mnt/batch/tasks/shared/LS_root/jobs/aa-ml-aml-workspace/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f/mounts/workspaceblobstore/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f/tmp/dataset

脚本中收到的实际路径:

/tmp/数据集

作为命名输入

src = TensorFlow(source_directory =  r'Tensorflow',
              framework_version = '1.13',
              entry_script = 'train.py',
              inputs=[dset.as_named_input('dogscats_train')],
              compute_target='amlcompute', 
              vm_size='Standard_NC6', 
              use_gpu = True, 
              pip_packages = ['matplotlib', 'pillow', 'numpy', 'azureml-sdk'])

安装路径:

/mnt/batch/tasks/shared/LS_root/jobs/aa-ml-aml-workspace/azureml/cats-vs-dogs-tensorflow_1570804147_39168dcf/mounts/workspaceblobstore

run.input_datasets['dogscats_train'].mount('tmp/dataset').mount_point 检索到的路径:

/mnt/batch/tasks/shared/LS_root/jobs/aa-ml-aml-workspace/azureml/cats-vs-dogs-tensorflow_1570804147_39168dcf/mounts/workspaceblobstore/azureml/cats-vs-dogs-tensorflow_1570804147_39168dcf/tmp/dataset

标签: azuretensorflowazure-machine-learning-service

解决方案


在这两种方法中,您传递给的路径as_mountmount是一个相对路径,也就是说,它没有以前导 开头/,这将导致数据集相对于当前工作目录安装,在您的情况下是/mnt/batch/tasks/shared/LS_root/jobs/aa-ml-aml-workspace/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f/mounts/workspaceblobstore/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f.

如果你想挂载到/tmp/dataset,你需要做dset.as_named_input('dogscats_train').as_mount('/tmp/dataset'),也就是说,你需要/在目标路径中显式添加 a 以使路径成为绝对路径。

我创建了一个要点来展示相对路径与绝对路径的效果。

submit.py:提交 TensorFlow 运行

so.py: 比较两个参数,第一个参数是相对路径,第二个是绝对路径。

driver_log_partial.txt: 是您在运行详细信息页面中看到的驱动程序日志的部分输出。

现在关于您传递给的名称as_named_input。然后将该名称作为环境变量提供,其值与脚本参数的值相同,该值是数据集安装到的路径。该名称也可用作run.input_datasets值也是数据集安装到的路径的键。换句话说,访问挂载路径的方式有三种,你可以选择一种最适合你的代码的方式。


推荐阅读