Azure ML:在模型部署期间包括其他文件

Posted

技术标签:

【中文标题】Azure ML:在模型部署期间包括其他文件【英文标题】:Azure ML: Include additional files during model deployment 【发布时间】:2020-08-31 07:44:26 【问题描述】:

在我的 AML 管道中,我构建了一个模型并将其部署到 AciWebservice。我现在需要包含一些额外的数据,这些数据将被 score.py 使用。此数据采用 json 格式 (~1mb),并且特定于所构建的模型。为了实现这一点,我正在考虑将这个文件粘贴在 blob 存储中,并在部署期间更新 score.py 中的一些“占位符”变量,但这似乎很麻烦。

以下是我正在考虑但不确定实用性的一些选项

选项 1: 是否可以在模型部署期间包含此文件,使其成为 docker 映像的一部分?

选项 2: 我正在考虑的另一种可能性是,是否可以将这个 json 数据部分包含在模型工件中?

选项 3: 将其注册为数据集并将其拉入乐谱文件如何?

在模型部署场景中部署依赖文件的推荐方式是什么?

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点:

    将附加文件放在与模型文件相同的文件夹中,register 将整个文件夹作为模型。在这种方法中,文件与模型一起存储。

    将文件放在本地文件夹中,并将该文件夹指定为InferenceConfig 中的source_directory。在这种方法中,每次部署新端点时都会重新上传文件。

    使用 InferenceConfig 中的自定义基础映像将文件烘焙到 Docker 映像本身。

【讨论】:

【参考方案2】:

为了扩展@Roope Astala - MSFT 的答案,您可以使用第二种方法来实现它

将文件放在本地文件夹中,并在 InferenceConfig 中将该文件夹指定为 source_directory。在这种方法中,每次部署新端点时都会重新上传文件。

假设这是你的文件结构。

.
└── deployment
    ├── entry.py
    ├── env.yml
    └── files
        ├── data.txt

并且您想阅读entry.py 脚本中的files/names.txt

这就是您在entry.py 中的阅读方式:

file_path = 'deployment/files/data.txt'
  with open(file_path, 'r') as f:
    ...

这就是您设置部署配置的方式。

deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
inference_config = InferenceConfig(
    runtime='python',
    source_directory='deployment',
    entry_script='entry.py',
    conda_file='env.yml'
)

【讨论】:

如果我需要在部署后稍后编辑entry.py而不更改restendpoint怎么办。 @vishal 您可以在Model.deploy 方法中使用overwrite=True。见docs.microsoft.com/en-us/python/api/azureml-core/…

以上是关于Azure ML:在模型部署期间包括其他文件的主要内容,如果未能解决你的问题,请参考以下文章

在 azure ml 部署环境中导入自定义 python 模块

如何将 azure ml 模型的输出发送到事件中心?

Acumos机器学习平台的模型打包与共享部署

从 DatabricksStep 注册 Azure ML 模型

Azure ML Studio 环境中的 Python 自定义模型错误 0085,在本地环境中运行良好

如何绕过 ID 列而不在训练模型中使用但将其作为输出 - Azure ML