(三)在Docker容器中运行AI模型

目录

介绍

为什么要使用单独的推理容器?

依赖关系

Dockerfile

构建和运行容器

概括


介绍

Docker等容器技术显着简化了软件的依赖管理和可移植性。在本系列文章中,我们探讨了Docker在机器学习(ML)场景中的使用。

本系列假设您熟悉ML、一般容器化,尤其是Docker。欢迎您下载项目代码

上一篇文章中,我们创建了一个用于实验和训练的基本容器。在本节中,我们将创建一个容器来对经过训练的模型运行预测。

为什么要使用单独的推理容器?

理论上,我们可以使用我们之前的实验容器进行生产推理。不过,推荐的方法是使镜像尽可能简单和小。这意味着摆脱推理不需要的任何组件,例如冗余包、Jupyter Notebook或构建工具(如果我们有的话)。

依赖关系

虽然我们在上一篇文章中的实验镜像包含多个ML库,但我们已经使用TensorFlow训练了我们的模型。因此,我们可以如下修剪我们的requirements.txt

numpy==1.19.5
opencv-python==4.5.1.48
tensorflow-cpu==2.4.0

此处添加NumPy仅将其固定到特定版本(可以安装不同版本作为TensorFlow依赖项)。不幸的是,Python库的更新经常会引入重大更改或错误。添加具有固定版本的显式需求——即使是间接依赖——有助于避免重新创建环境时的麻烦。

Dockerfile

我们的大部分Dockerfile与上一篇文章中的相同:

FROM python:3.8.8-slim-buster
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get -y install --no-install-recommends ffmpeg libsm6 libxext6 \
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
ARG USERNAME=mluser
ARG USERID=1000
RUN useradd --system --create-home --shell /bin/bash --uid $USERID $USERNAME

COPY requirements.txt /tmp/requirements.txt
RUN pip3 install --no-cache-dir -r /tmp/requirements.txt \
&& rm /tmp/requirements.txt
USER $USERNAME
WORKDIR /home/$USERNAME/app

因为我们仍然使用opencv-python,所以需要保留apt-get语句来安装系统组件。

最后两行是唯一与以前版本不同的行:

COPY app /home/$USERNAME/app
ENTRYPOINT ["python", "predict.py"]

首先,我们将应用程序代码复制到镜像中。复制的app文件夹包含我们在上一篇文章中训练的推理代码和模型。这样的COPY语句通常是Dockerfile中最后的语句之一,它确保在应用程序代码更改时只需要重新创建几个顶层。

接下来,我们为我们的应用程序定义ENTRYPOINT。它是将在容器启动时执行的任何命令的前缀。使用Dockerfiledocker run命令添加的任何CMD语句都将作为参数添加到ENTRYPOINT语句中。

构建和运行容器

下载我们的应用程序代码和数据后,您可以将镜像构建为mld03_cpu_predict(不要忘记末尾的点 (.)):

$ docker build --build-arg USERID=$(id -u) -t mld03_cpu_predict .

Windows上,您可以跳过该--build-arg USERID部分:

$ docker build -t mld03_cpu_predict .

镜像构建完成后,我们运行推理:

docker run -v $(pwd)/data:/home/mluser/data --rm --user $(id -u):$(id -g) mld03_cpu_predict 
--images_path /home/mluser/data/test_mnist_images/*.jpg

Windows上:

docker run -v $(pwd)/data:/home/mluser/data --rm mld03_cpu_predict 
--images_path /home/mluser/data/test_mnist_images/*.jpg

请注意,--images_path以上是包含在容器中的应用程序的参数。它附加到由Dockerfile中的ENTRYPOINT语句定义的命令。这次我们只镜像带有数据的文件夹,依赖于嵌入在镜像中的应用程序代码(和训练模型)。

预期结果如下:

使用每个文件名中包含的预期值(test_后面的数字),我们可以确认我们有限数据集的所有预测都是正确的。

概括

在本文中,我们使用Docker容器运行ML推理。在下一篇文章中​​​​​​​,我们将针对带有ARM处理器的Raspberry Pi调整此镜像。

https://www.codeproject.com/Articles/5300726/Running-AI-Models-in-Docker-Containers

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值