python - 如何在树莓派上构建 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
解决方案
我能够通过完全重建 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"]
推荐阅读
- typescript - 带有 TypeScript 的 create-react-app 中的样式化组件 babel 插件?
- tinymce - 加载插件失败:来自 url 的 advlink
- laravel-5 - laravel 查询生成器 whereIn 获取重复数据
- drupal - Drupal 8 - 如何在提交网络表单后注销用户
- java - POST 响应 HTML 页面显示在调试器中,但不在使用 JAVAEE 的浏览器中
- intellij-idea - 在 pubspec.yaml 中导入 geoloaction 包时出错
- android - 播放 mediaFile 时权限被拒绝
- python - 在 python 3.7 中,为什么我的变量在我没有分配任何新内容的情况下被覆盖?
- mysql - 为每个用户选择一个值,即使没有 sql
- python - 使用 PyHive 和 SqlAlchemy 创建表