Docker容器中使用PaddleOCR加载cuDNN失败的问题求助
问题:Docker容器中PaddleOCR加载cuDNN失败
运行PaddleOCR时出现以下错误:
RuntimeError: (PreconditionNotMet) Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion. [Hint: cudnn_dso_handle should not be null.] (at /paddle/paddle/phi/backends/dynload/cudnn.cc:64)
环境配置
- Docker基础镜像:
python:3.10-slim - PaddleOCR版本:2.8.1
- PaddlePaddle-GPU版本:2.6.1
- 宿主机系统:Ubuntu 22.04.2
Dockerfile内容
FROM python:3.10-slim ENV HOME /app WORKDIR /app COPY . /app RUN apt-get update && apt-get install -y \ build-essential \ cmake \ poppler-utils \ ffmpeg \ libsm6 \ libxext6 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /app/.cache/paddle && chmod -R 777 /app # Setting environment variables ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH RUN pip install --no-cache-dir -r requirements.txt EXPOSE 7860 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
已尝试操作
- 在Dockerfile中添加
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH环境变量
疑问
- 还需采取哪些步骤确保cuDNN在Docker容器中正确安装并可访问?
- 是否有推荐的支持GPU的PaddleOCR专用Docker镜像?
- 是否存在其他配置问题导致该错误?
解答
1. 确保cuDNN在容器中正确安装并可访问的步骤
- 更换带CUDA/cuDNN的基础镜像:
python:3.10-slim是纯CPU镜像,未预装CUDA和cuDNN,需替换为NVIDIA官方提供的CUDA镜像,例如nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04,这类镜像已内置匹配版本的CUDA和cuDNN。 - 安装对应版本的Python:如果选用的CUDA镜像默认没有Python 3.10,可在Dockerfile中添加
apt-get install -y python3.10 python3-pip并配置软链接。 - 验证CUDA/cuDNN可用性:在Dockerfile中加入以下命令,构建时确认依赖存在:
RUN nvidia-smi # 验证CUDA驱动和GPU可见性 RUN cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR # 验证cuDNN版本 - 匹配PaddlePaddle与CUDA版本:PaddlePaddle-GPU 2.6.1对应CUDA 11.7/11.8,确保容器内CUDA版本与Paddle版本兼容,安装时可指定CUDA版本:
pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html - 确认LD_LIBRARY_PATH配置:若使用NVIDIA官方镜像,
LD_LIBRARY_PATH通常已默认配置,可在Dockerfile中追加:ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
2. 推荐的支持GPU的PaddleOCR专用镜像
- Paddle官方GPU镜像:直接使用PaddlePaddle官方预编译的GPU镜像,在此基础上安装PaddleOCR:
FROM paddlepaddle/paddle:2.6.1-gpu-cuda11.7-cudnn8 RUN pip install paddleocr==2.8.1 - PaddleOCR官方镜像:Paddle提供了预装好PaddleOCR的GPU镜像,无需额外配置:
这类镜像已整合CUDA、cuDNN、PaddlePaddle及PaddleOCR,直接启动即可使用GPU加速。FROM paddlepaddle/paddleocr:2.8.1-gpu
3. 其他可能的配置问题
- 宿主机NVIDIA Docker Runtime未配置:宿主机需安装
nvidia-docker2,确保Docker能识别GPU。可通过以下命令验证:docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi - 启动容器未指定GPU权限:启动容器时必须添加
--gpus all参数,否则容器无法访问宿主机GPU:docker run --gpus all -p 7860:7860 your-image-name - PaddlePaddle安装错误:若手动安装时未指定CUDA版本,可能默认安装了CPU版本,需彻底卸载后重新安装对应GPU版本:
pip uninstall -y paddlepaddle paddlepaddle-gpu pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
内容的提问来源于stack exchange,提问作者Rauhan Ahmed
相关产品推荐
相关产品推荐

