如何从 Azure ML 管道脚本步骤注册模型

Posted

技术标签:

【中文标题】如何从 Azure ML 管道脚本步骤注册模型【英文标题】:How to register model from the Azure ML Pipeline Script step 【发布时间】:2020-03-14 22:39:49 【问题描述】:

我在 AzureML 中运行 pipeline.submit(),它有一个 PythonScriptStep。 在这一步中,我从 tensorflow-hub 下载了一个模型,重新训练它并将其保存为 .zip,最后,我想在 Azure ML 中注册它。 但由于在脚本内部我没有工作区,Model.register() 并非如此。 所以我尝试使用Run.register_model() 方法如下:

os.replace(os.path.join('.', archive_name + '.zip'), 
           os.path.join('.', 'outputs', archive_name + '.zip'))

print(os.listdir('./outputs'))
print('========================')

run_context = Run.get_context()
finetuning_model = run_context.register_model(model_name='finetuning_similarity_model',
                                              model_path=os.path.join(archive_name+'.zip'),
                                              tags=,
                                              description="Finetuning Similarity model")

然后我得到一个错误:

错误响应 “错误”: "message": "在上传到运行的文件集中找不到提供的 model_path retrained.zip:

尽管我在./outputs 目录中有重新训练的.zip,我们可以从日志中看到:

['retrained.zip']
========================

我猜我做错了什么?

【问题讨论】:

【参考方案1】:

我能够通过在尝试注册模型之前将模型显式上传到运行历史记录中来解决相同的问题 (ModelPathNotFoundException):

run.upload_file("outputs/my_model.pickle", "outputs/my_model.pickle")

这让我感到惊讶,因为在许多官方示例中并没有提到这一点,并且根据upload_file()documentation:

运行自动捕获指定输出目录中的文件,大多数运行类型默认为“./outputs”。仅当需要上传其他文件或未指定输出目录时才使用upload_file。

【讨论】:

在我的例子中,模型路径是作为上一步的 PipelineData 传递的。所以我不得不使用 PipelineData 路径作为 run.upload_file() 中的“path_or_stream”参数。然后我在输出/目录中定义了另一个路径作为“名称”参数。这会将模型上传到当前运行上下文。然后我使用这个路径作为run.register_model() 中的“model_path”参数。花了一段时间才弄清楚这个...:| 这对我有用。令人惊讶的是,如果我将 csv 文件转储到输出文件夹中,它会立即可用于注册为数据集,但令人惊讶的是,它对于模型注册的工作方式不同。需要调用显式的upload_file。而且 upload_file 文档中的 NOTE 非常具有误导性。【参考方案2】:

这里似乎缺少部分路径:

model_path=os.path.join(archive_name+'.zip')

路径是否应该包括输出子文件夹,像这样?

model_path=os.path.join("./outputs",archive_name+'.zip')

【讨论】:

非常感谢!这可行,但很奇怪,因为在 Docs 中模型路径应该是相对于 /outputs 目录的:model_path 从输出目录到模型的相对云路径。未指定 (None) 时,model_name 用作路径。 看来文件有误。根据thisgithub评论“我们澄清了model_path参数的描述。它不是相对于示例中常用的outputs/目录,而是相对于run文件结构的根目录。如有疑问,请使用run .get_files() 查看运行创建的文件(带路径)。” 正确,文档正在更新为:'模型的相对云路径,例如,“输出/模型名称”。未指定 (None) 时,model_name 用作路径。'

以上是关于如何从 Azure ML 管道脚本步骤注册模型的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure ML Studio 中,评分模型不会从 R 模型返回预测值

如何在 Azure CI 管道中手动添加“脚本”?

从 DatabricksStep 注册 Azure ML 模型

如何在 Azure 机器学习服务管道中使用密钥

如何从 Azure DevOps 中的部署后批准/部署后门调用 Powershell 脚本

从脚本返回对象变量 - Azure YAML 管道