扩展预生成的 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 映像部署的问题。