赞
踩
目录
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与上一篇文章中的相同:
- 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。它是将在容器启动时执行的任何命令的前缀。使用Dockerfile或docker 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。