部署paddlecor中遇到的GPU环境集成问题(CUDA版本不一致、GPU不识别等)
- 背景
在使用百度飞桨的paddleocr过程中,安装配置gpu运行环境,代码部署后运行报错,无法检测到gpu。(实际我的环境是有八张显卡gpu的)。具体错误信息如下:
Compiled with WITH_GPU, but no GPU found in runtime.
You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default
- 解决思路
以paddleocr为例,如果是严格按照文档部署配置环境,那么基本可以归结为软件版本问题。分别可以检查cuda版本、paddleocr版本、cudnn版本、paddle serving版本等软件是否匹配。 - 可能遇到的问题及具体操作。
- nvcc和nvidia-smi查看的cuda版本不一致。
1、先使用nvcc -V查看cuda版本。
2、再使用nvidia-smi查看cuda版本。
3、出现版本不一致情况该以哪个版本为准呢,一般是以nvcc -V显示的cuda版本为准,上层程序sdk都会调用这个运行时api。查看具体lib安装路径及版本信息可以执行 cat /usr/local/cuda/version.txt,相关lib也在这个路径下查看。
4、怎么理解nvcc和nvidia-smi不一致的问题。
nvcc属于CUDA的编译器,将程序编译成可执行的二进制文件,nvidia-smi全称是NVIDIA System Management Interface ,是一种命令行实用工具,旨在帮助管理和监控NVIDIA GPU设备。
CUDA有runtime api和driver叩i,两者都有对应的CUDA版本,nvcc —version显示的就是前者对应的CUDA版本,而nvidia-smi显示的是后者对应的CUDA版本。
用于支持driver api的必要文件由GPU driver installer安装,nvidia-sm就属于这一类API;而用于支持runtime api的必要文件是由CUDA Toolkit installer安装的。nvcc是与CUDA Toolkit—起安装的CUDA compiler driver tool,它只知道它自身构建时的CUDA runtime版本,并不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
CUDA Toolkit Installed^常会集成了GPU driver lnstallerz 如果你的CUDA均通过CUDA Tooklkit Installer来安装,那么runtime api和driver api的版本应该是一致的,也就是说,nvcc -version和nvidia-smi显示的版本应该一样。否则,你可能使用了单独的GPU drive门nstaller来安装GPU dirver,这样就会导致nvidia-smi和nvcc —version显示的版本不一致了。
通常,driver api的版本能向下兼容runtime api的版本,即nvidia-smi显示的版本大于nvcc -version的版本通常不会出现大问题。
5、cuda和驱动版本验证表
- 查看cudnn版本
cat /usr/local/cuda-9.2/include/cudnn.h | grep CUDNN_MAJOR -A 2
- 检查paddlepaddle-gpu版本
版本号后面跟着的post**数字按顺序代表了你的cuda以及cudnn的版本。比如环境是cuda9和cudnn7,那么应该选择以post97结尾的版本。
- 解决思路。
通过排查判断错误的原因是 cuda版本和paddlepaddle-gpu不一致,我这里是cuda版本低、paddlepaddle-gpu版本高,有几种解决方法。
1、升级cuda。
2、寻找与cuda9匹配的低版本paddlepaddle-gpu。
3、使用nvidia-docker环境。
参考:https://blog.csdn.net/qq_43585377/article/details/114387345
https://www.jianshu.com/p/eb5335708f2a
https://blog.csdn.net/XP1990/article/details/120728487