首页 > 解决方案 > 如何在树莓派上构建 FastAI docker 镜像?

问题描述

我有一个 Raspberry Pi,它可以在本地有效地运行一个简单的 FastAI 视觉模型,没有任何问题。但是,当我尝试将它 Dockerize 并将其作为代理后面的容器提供时,我的问题就来了。我似乎无法构建一个可以工作的 Docker 映像。

每当我运行 docker-compose 时,我都会在日志中收到一个错误

Traceback (most recent call last):
  File "server.py", line 2, in <module>
    import fastai.vision as fastai

  File "/usr/local/lib/python3.7/site-packages/fastai/vision/__init__.py", line 1, in <module>
    from .. import basics

  File "/usr/local/lib/python3.7/site-packages/fastai/basics.py", line 1, in <module>
    from .basic_train import *

  File "/usr/local/lib/python3.7/site-packages/fastai/basic_train.py", line 2, in <module>
    from .torch_core import *

  File "/usr/local/lib/python3.7/site-packages/fastai/torch_core.py", line 2, in <module>
    from .imports.torch import *

  File "/usr/local/lib/python3.7/site-packages/fastai/imports/__init__.py", line 2, in <module>
    from .torch import *

  File "/usr/local/lib/python3.7/site-packages/fastai/imports/torch.py", line 1, in <module>
    import torch, torch.nn.functional as F

  File "/usr/local/lib/python3.7/site-packages/torch/__init__.py", line 190, in <module>
    from torch._C import *

ImportError: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.28' not found (required by /usr/local/lib/python3.7/site-packages/torch/lib/libtorch_python.so)

这是我正在使用的当前 dockerfile。

FROM python:3.7.10-stretch

WORKDIR /app

ADD . .

RUN useradd fastai-user

RUN apt update

RUN apt upgrade -y

RUN cp libstdc++.so.6 /usr/lib/arm-linux-gnueabihf/libstdc++.so.6

RUN apt install -y libopenblas-dev libblas-dev m4 cmake cython python3-dev python3-yaml python3-setuptools python3-wheel

RUN apt install -y libatlas3-base

RUN pip install numpy

RUN pip install Pillow==8.1.2

RUN pip install -r requirements-pi-freeze.txt

RUN pip install torch-*.whl

RUN pip install torchvision*.whl

RUN pip install fastai==1.0.57 --no-deps

我已经尝试添加 RUN apt install gcc6.0 等,但我也无法让它工作,我最终在/usr/lib/arm-linux-gnueabihf/libstdc++.so.6未找到错误下遇到相同的导入错误。所以我在 dockerfile 文件夹中手动添加了该文件(以及 torch-1.7.0a0-cp37-cp37m-linux_armv7l.whl 和 torchvision-0.8.0a0+45f960c-cp37-cp37m-linux_armv7l.whl)。

这里也是 requirements-pi-freeze.txt 文件。

beautifulsoup4==4.9.3
Bottleneck==1.3.2
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
cycler==0.10.0
dataclasses==0.6
fastprogress==1.0.0
Flask==1.1.1
Flask-Cors==3.0.10
future==0.18.2
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.3
kiwisolver==1.3.1
MarkupSafe==1.1.1
matplotlib==3.3.4
numexpr==2.7.3
nvidia-ml-py3==7.352.0
packaging==20.9
pandas==1.2.3
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2021.1
PyYAML==5.4.1
requests==2.25.1
scipy==1.6.1
spacy==2.0.18
six==1.15.0
soupsieve==2.2.1
typing-extensions==3.7.4.3
urllib3==1.26.4
Werkzeug==1.0.1

标签: pythondockerraspberry-piarmfast-ai

解决方案


我能够通过完全重建 docker 图像来解决这个问题,arm32v7/python:3.7.10-buster图像略大于 3.7.10-stretch,但是任何空间节省都完全被从头开始为 pytorch 重建 c++ 库的大小所掩盖(最终图像大小伤口大约 6.5 GB。这可能可以优化。)

这是我从头开始构建 fastai flask python 服务器的最终 dockerfile。

FROM arm32v7/python:3.7.10-buster

WORKDIR /app

ADD . .

RUN useradd fastai-user

RUN apt update

RUN apt upgrade -y

RUN apt install -y sudo git

ENV LIBTORCH_VARIANT=armv7l-cxx11-abi-shared-without-deps

RUN ./pytorch-rpi/build_libtorch.sh

RUN pip install numpy

RUN pip install Pillow==8.1.2

RUN pip install --upgrade pip setuptools wheel

RUN apt install -y gfortran

RUN pip install scipy==1.6.1

RUN pip install -r requirements-pi-freeze.txt

RUN pip install torch-*.whl

RUN pip install torchvision*.whl

RUN pip install fastai==1.0.57 --no-deps

CMD ["python", "server.py"]


推荐阅读