当前位置:   article > 正文

(三)在Docker容器中运行AI模型_ai用docker容器推理

ai用docker容器推理

目录

介绍

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

依赖关系

Dockerfile

构建和运行容器

概括


介绍

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

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

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

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

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

依赖关系

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

  1. numpy==1.19.5
  2. opencv-python==4.5.1.48
  3. tensorflow-cpu==2.4.0

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

Dockerfile

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

  1. FROM python:3.8.8-slim-buster
  2. ARG DEBIAN_FRONTEND=noninteractive
  3. RUN apt-get update \
  4. && apt-get -y install --no-install-recommends ffmpeg libsm6 libxext6 \
  5. && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
  6. ARG USERNAME=mluser
  7. ARG USERID=1000
  8. RUN useradd --system --create-home --shell /bin/bash --uid $USERID $USERNAME
  9. COPY requirements.txt /tmp/requirements.txt
  10. RUN pip3 install --no-cache-dir -r /tmp/requirements.txt \
  11. && rm /tmp/requirements.txt
  12. USER $USERNAME
  13. WORKDIR /home/$USERNAME/app

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

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

  1. COPY app /home/$USERNAME/app
  2. 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 .

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

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

Windows上:

  1. docker run -v $(pwd)/data:/home/mluser/data --rm mld03_cpu_predict
  2. --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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/634346
推荐阅读
相关标签
  

闽ICP备14008679号