Docker部署EasyOCR视频识别服务遇NNPACK硬件不兼容问题求助
我们在应用中使用EasyOCR超分析模型处理视频输入识别文本,本地GPU及CPU环境运行正常。通过Docker+Jenkins部署至客户服务器后,服务可正常启动,但视频处理时出现报错:
[W1102 18:08:49.641464899 NNPACK.cpp:61] Could not initialize NNPACK! Reason: Unsupported hardware
随后容器崩溃。从处理日志可见视频已开始处理:
Speed: 4.9ms preprocess, 434.4ms inference, 3.2ms postprocess per image at shape (1, 3, 384, 640)
Speed: 3.2ms preprocess, 401.5ms inference, 1.9ms postprocess per image at shape (1, 3, 384, 640)
已在Dockerfile中设置ENV USE_NNPACK=0尝试禁用NNPACK,但问题仍存在。以下为部署所用依赖文件及Docker配置:
requirements.txt
Flask==2.1.2 flask_cors==3.0.10 requests==2.27.1 ultralytics==8.0.134 Werkzeug==2.0.3 matplotlib>=3.2.2 numpy>=1.18.5 opencv-python-headless>=4.1.1 # Changed to headless version for server Pillow<10.0.0 # Ensures no 'ANTIALIAS' issue PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 tqdm>=4.64.0 tensorboard>=2.4.1 pandas>=1.1.4 seaborn>=0.11.0 ipython psutil thop>=0.1.1
Dockerfile
# Use an official lightweight Python image FROM python:3.10-slim # Set environment variable ENV USE_NNPACK=0 # Set up the working directory WORKDIR /app # Copy the current directory contents into the container at /app COPY . /app # Install system dependencies RUN apt-get update && \ apt-get install -y \ libgl1-mesa-glx \ libglib2.0-0 && \ rm -rf /var/lib/apt/lists/* # Install Python dependencies COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r requirements.txt && \ pip install easyocr==1.6.2 && \ pip uninstall -y opencv-python-headless opencv-python && \ pip install opencv-python # Expose the application port EXPOSE 5001 # Run the application CMD ["python", "ANPR_Test.py"]
解决方法
代码层面强制禁用NNPACK
在ANPR_Test.py的开头添加以下代码,直接从PyTorch层面禁用NNPACK,避免环境变量被依赖库覆盖:import torch torch.backends.nnpack.enabled = False torch.backends.mkldnn.enabled = False更换CPU优化的基础镜像
将原python:3.10-slim镜像替换为预配置CPU优化PyTorch的镜像,比如pytorch/pytorch:2.0.1-cpu,该镜像针对不同CPU架构做了兼容处理,减少硬件适配问题。修改Dockerfile开头:FROM pytorch/pytorch:2.0.1-cpu更换后可简化系统依赖安装步骤,因为基础镜像已包含大部分必要组件。
验证服务器CPU架构兼容性
在客户服务器的容器内执行cat /proc/cpuinfo,检查CPU是否支持SSE4.1/AVX等NNPACK所需指令集。如果是ARM架构或老旧x86 CPU,需确保所有依赖库是对应架构的编译版本。指定纯CPU版本的PyTorch依赖
在requirements.txt中添加指定CPU版本的PyTorch,避免自动引入NNPACK相关组件:torch==2.0.1+cpu torchvision==0.15.2+cpu安装时使用以下命令确保拉取纯CPU包:
pip install --no-cache-dir torch==2.0.1+cpu torchvision==0.15.2+cpu -f https://download.pytorch.org/whl/cpu
内容的提问来源于stack exchange,提问作者nil

