扩展预生成的 Docker 映像

在某些情况下,Azure 机器学习的用于模型推理的预生成 Docker 映像扩展性解决方案可能不满足你的推理服务需求。

在这种情况下,可以使用 Dockerfile 创建新映像,并将某个预生成的映像用作起点。 通过从现有的预生成 Docker 映像进行扩展,可以使用 Azure 机器学习网络堆栈和库,而无需从头开始创建映像。

优点和缺点

使用 Dockerfile 可以在部署之前对映像进行完全自定义。 这样可以最大程度地控制要在容器中设置哪些依赖项或环境变量。

此方法的主要缺点是在部署过程中需要进行额外的映像生成,这会减缓部署过程。 如果可以使用 Python 包扩展性方法,则部署速度将更快。

先决条件

  • Azure 机器学习工作区。 有关创建工作区的教程,请参阅 Azure 机器学习入门

  • 熟悉如何创作 Dockerfile

  • 一个正常工作的 Docker 本地安装(包括 docker CLI),或者与你的 Azure 机器学习工作区关联的 Azure 容器注册表 (ACR)。

    警告

    首次使用工作区训练或部署模型时,将创建工作区的 Azure 容器注册表。 如果你创建了一个新的工作区,但没有训练或创建模型,则该工作区将不存在 Azure 容器注册表。

创建和生成 Dockerfile

下面是一个示例 Dockerfile,它使用 Azure 机器学习预生成的 Docker 映像作为基础映像:

FROM mcr.microsoft.com/azureml/<image_name>:<tag>

COPY requirements.txt /tmp/requirements.txt​

RUN pip install –r /tmp/requirements.txt​

然后,将上述 Dockerfile 放入包含所有所需文件的目录,并运行以下命令来生成映像:

docker build -f <above dockerfile> -t <image_name>:<tag> .

提示

在此 Docker 文档中可以找到有关 docker build 的更多详细信息。

如果 docker build 命令在本地不可用,请使用适用于你的 Azure 机器学习工作区的 Azure 容器注册表 ACR 在云中生成 Docker 映像。 有关详细信息,请参阅教程:使用 Azure 容器注册表生成和部署容器映像

重要

Microsoft 建议先验证你的 Dockerfile 是否可在本地工作,然后再尝试通过 Azure 容器注册表创建自定义的基础映像。

以下部分包含有关 Dockerfile 的更具体详细信息。

安装额外的包

如果需要在 Ubuntu 容器中安装任何其他 apt 包,可将这些包添加到 Dockerfile 中。 以下示例演示如何通过 Dockerfile 使用 apt-get 命令:

FROM <prebuilt docker image from MCR>

# Switch to root to install apt packages
USER root:root

RUN apt-get update && \
    apt-get install -y \
    <package-1> \
    ... 
    <package-n> && \
    apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

# Switch back to non-root user
USER dockeruser

还可以通过 Dockerfile 安装其他 pip 包。 以下示例演示如何使用 pip install

RUN pip install <library>

将模型和代码生成到映像中

如果需要将模型和代码生成到映像中,需要在 Dockerfile 中设置以下环境变量:

  • AZUREML_ENTRY_SCRIPT:代码的入口脚本。 此文件包含 init()run() 方法。
  • AZUREML_MODEL_DIR:包含模型文件的目录。 入口脚本应使用此目录作为模型的根目录。

以下示例演示如何在 Dockerfile 中设置这些环境变量:

FROM <prebuilt docker image from MCR>

# Code
COPY <local_code_directory> /var/azureml-app
ENV AZUREML_ENTRY_SCRIPT=<entryscript_file_name>

# Model
COPY <model_directory> /var/azureml-app/azureml-models
ENV AZUREML_MODEL_DIR=/var/azureml-app/azureml-models

示例 Dockerfile

以下示例演示如何安装 apt 包、设置环境变量,并将代码和模型包含为 Dockerfile 的一部分:

FROM mcr.microsoft.com/azureml/pytorch-1.6-ubuntu18.04-py37-cpu-inference:latest 

USER root:root

# Install libpng-tools and opencv
RUN apt-get update && \
    apt-get install -y \
    libpng-tools \
    python3-opencv && \
    apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

# Switch back to non-root user
USER dockeruser

# Code
COPY code /var/azureml-app
ENV AZUREML_ENTRY_SCRIPT=score.py

# Model
COPY model /var/azureml-app/azureml-models
ENV AZUREML_MODEL_DIR=/var/azureml-app/azureml-models

后续步骤

若要将 Dockerfile 与 Azure 机器学习 Python SDK 配合使用,请参阅以下文档:

若要详细了解如何部署模型,请参阅如何部署模型

若要了解如何排查预生成 Docker 映像部署的问题,请参阅如何排查预生成 Docker 映像部署的问题