- 背景
在使用百度飛槳的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