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

Azure ML: Include additional files during model deployment

在我的 AML 管道中,我构建了一个模型并将其部署到 AciWebservice。我现在需要包含一些将由 score.py 使用的额外数据。此数据采用 json 格式 (~1mb),特定于构建的模型。为了实现这一点,我正在考虑将此文件粘贴到 blob 存储中并在部署期间更新 score.py 中的一些 "placholder" 变量,但它看起来很老套。

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

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

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

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

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

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

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

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

  3. 在 InferenceConfig 中使用自定义基础图像将文件烘焙到 Docker 图像本身。

要扩展@Roope Astala - MSFT 的答案,这是使用第二种方法实现它的方法

Put the file in a local folder, and specify that folder as source_directory in InferenceConfig. In this approach the file is re-uploaded every time you deploy a new endpoint.

假设这是您的文件结构。

.
└── 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'
)