在ARM设备上的Docker容器中运行AI模型

开课吧小一2021-04-30 21:11

点赞
有用
分享分享

诸如Docker之类的容器技术极大地简化了依赖性管理和软件的可移植性。在本系列文章中,我们探讨了Docker在机器学习(ML)场景中的用法。

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

在本教程中,我们将创建一个容器来处理使用Raspberry Pi在ARM处理器上进行的推理。

在ARM设备上的Docker容器中运行AI模型

在Raspberry Pi上设置Docker

有了对Raspberry Pi的官方支持,Docker的安装非常简单。

我们已经在具有4GB RAM的Raspberry Pi 4/400,Raspberry Pi OS(32位)和Ubuntu Server 20.04.2 LTS(64位)上成功进行了测试。

您可以在Docker官方网站上找到任何受支持的操作系统的详细安装说明。

进行安装的最简单方法是使用便捷脚本。但是,不建议在生产环境中使用它。幸运的是,“手动”安装也不太复杂。

对于64位Ubuntu服务器操作系统,它看起来像这样:

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

对于不同的操作系统版本,粗体ubuntu和arm64需要进行相应的更新。

要以非root用户身份访问Docker命令,您还应该在执行后注销并重新登录:

$ sudo usermod -aG docker <your-user-name>

适用于ARM的Dockerfile

尽管我们在之前的文章中使用的基本Python映像可用于ARM处理器,但它们可能不是最佳选择。对于ARM体系结构,类似于Alpine OS,许多Python库无法预先编译并打包为wheel。它们需要在安装过程中进行编译,这可能需要很长时间。

另外,我们可以依靠操作系统中包含的Python。这不是我们经常要做的事情,但是使用Docker并没有什么害处。我们只需要每个容器一个Python环境。我们使用的Python版本将失去一些灵活性,但是从许多已编译的系统级Python库中进行选择的能力将为我们节省大量时间并减少生成的图像大小。

这就是为什么我们将debian:buster-slim图像作为基础的原因。它带有Python 3.7,足以满足我们的所有目的,因为它满足了我们将要运行的所有库和AI / ML代码的要求

经过几次尝试并添加了缺少的系统库,我们最终得到了以下Dockerfile来处理我们的推断:

FROM debian:buster-slim
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get -y install --no-install-recommends build-essential libhdf5-dev pkg-config protobuf-compiler cython3 \
&& apt-get -y install --no-install-recommends python3 python3-dev python3-pip python3-wheel python3-opencv \
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
RUN pip3 install --no-cache-dir setuptools==54.0.0
RUN pip3 install --no-cache-dir https://github.com/bitsy-ai/tensorflow-arm-bin/releases/download/v2.4.0/tensorflow-2.4.0-cp37-none-linux_aarch64.whl
ARG USERNAME=mluser
ARG USERID=1000
RUN useradd --system --create-home --shell /bin/bash --uid $USERID $USERNAME
USER $USERNAME
WORKDIR /home/$USERNAME/app
COPY app /home/$USERNAME/app
ENTRYPOINT ["python3", "predict.py"]

请注意,这次我们在本apt-get节中安装python3-opencv系统库,而不是使用pip。但是,我们无法以相同的方式安装NumPy,因为操作系统版本不符合TensorFlow要求。不幸的是,这意味着我们需要编译NumPy以及其他一些TensorFlow依赖项。

不过,主要包不需要编译,因为我们在GitHub上发布的Raspberry Pi使用了转轮。如果您更喜欢使用32位Raspberry PI OS,则需要相应地更新Dockerfile中的TensorFlow链接。

建筑形象和运行容器

之后下载项目代码(与训练的模型和样本数据),我们可以建立我们的形象:

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

此操作可能需要30分钟以上才能完成(至少在Raspberry Pi 4/400上)。不能以任何方式快速实现,但是如果许多库都需要编译,则可能要花几倍的时间。

在ARM设备上的Docker容器中运行AI模型

最后,我们可以在“边缘”上运行我们的预测:

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

与上一篇文章类似,当应用程序和模型存储在容器中时,我们仅映射数据文件夹。

预期结果如下:

在ARM设备上的Docker容器中运行AI模型

概括

我们已经在Raspberry Pi上成功构建并运行了TensorFlow预测。我们依靠预编译的系统Python库牺牲了一些灵活性。但是,减少图像生成时间和最终尺寸是值得的。

以上就是小编为大家整理的“在ARM设备上的Docker容器中运行AI模型”一文,更多信息尽在AI人工智能教程频道。

相关推荐:

免费领完整的AI学习路径资料,带你轻松入门!

AI资料难找吗?AI免费论文资料,等你领取!

福利来袭!人工智能核心课程优惠名额等你来领

有用
分享