深度学习paddle框架bug记录——驱动与内核不匹配

深度学习paddle框架bug记录

**

报错解决记录:Compiled with WITH_GPU, but no GPU found in runtime. 或者 (External) CUDA error(100), no CUDA-capable device is detected.

**



前言

在将paddleocr项目布置到centos服务器上训练时,出现报错。查询相关博客后,怀疑可能是内核更新,导致原来的驱动版本不适用。记录以下过程。


一、报错如下

在linux系统centos下运行paddlepaddle。出现以下报错:
nvcc -V
能够查询到cuda版本为11.6。
根据官网下载paddlepaddle-gpu.post116。

Compiled with WITH_GPU, but no GPU found in runtime.
/app/ocrapp/env/ocr_env/lib/python3.10/site-packages/paddle/fluid/framework.py:549: UserWarning: You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default.
  warnings.warn(
当前设备为:gpu:0
Traceback (most recent call last):
  File "/app/ocrapp/PaddleOCR/tools/train.py", line 225, in <module>
    config, device, logger, vdl_writer = program.preprocess(is_train=True)
  File "/app/ocrapp/PaddleOCR/tools/program.py", line 683, in preprocess
    device = paddle.set_device(device)
  File "/app/ocrapp/env/ocr_env/lib/python3.10/site-packages/paddle/device/__init__.py", line 266, in set_device
    place = _convert_to_place(device)
  File "/app/ocrapp/env/ocr_env/lib/python3.10/site-packages/paddle/device/__init__.py", line 213, in _convert_to_place
    place = core.CUDAPlace(device_id)
OSError: (External) CUDA error(100), no CUDA-capable device is detected. 
  [Hint: 'cudaErrorNoDevice'. This indicates that no CUDA-capable devices were detected by the installed CUDA driver. ] (at ../paddle/phi/backends/gpu/cuda/cuda_info.cc:67)

同时使用nvidia-smi查询,驱动情况出现报错。

二、解决方法

1.可能是驱动没有更新

linux内核更新后,驱动版本不适配。
参考链接:Centos7下遇到Unable to load the ‘nvidia-drm‘ kernel module

1.1下载RTX3060对应的驱动

官网Official Drivers | NVIDIA
在这里插入图片描述
在这里插入图片描述
复制链接,使用wget下载.run文件。

1.2、centos命令行下使用以下命令,删除错误的devel

yum remove kernel-devel
yum remove $(rpm -qa | grep kernel | grep -v $(uname -r))

1.3、安装匹配的kernel-devel

yum install -y "kernel-devel-uname-r == $(uname -r)" 
yum install gcc g++ -y 
ls /usr/src/kernels/

1.4、查询kernels的路径和版本信息

在这里插入图片描述

1.5.赋予权限并运行

查看下载的驱动
在这里插入图片描述
赋予权限

chmod +x NVIDIA-Linux-x86_64-535.113.01.run

安装驱动

./NVIDIA-Linux-x86_64-535.113.01.run  -no-x-check -no-nouveau-check --kernel-source-path=/usr/src/kernels/3.10.0-1160.88.1.el7.x86_64

根据自己的驱动修改为对应的版本。

三、结果

安装成功之后,使用nvidia-smi,查看驱动信息如下:
在这里插入图片描述
使用单卡运行,将设备改为

import os
os.environ[“CUDA_VISIBLE_DEVICES”]=‘1’

再次运行训练程序。
标题报错消失,出现新的报错:

(PreconditionNotMet) Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion.
[Hint: cudnn_dso_handle should not be null.] (at …/paddle/phi/backends/dynload/cudnn.cc:64)

是cudnn找不到导致。

四、cudnn安装

1.检查cudnn

ls /usr/local/cuda-11.6/lib64/libcudnn*

没有相关文件夹,说明没有安装cudnn.

2.下载cudnn

cudnn下载地址
在这里插入图片描述
选择cudnn8.5.0适配cuda11系列。
下载tar包
下载总是失败,所以下载到windows上,再通过rz上传到服务器上。

3.安装

安装可以参考:官网文档
cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz
如何解压:
tar.xz结尾的压缩文件,需要解压的话,有两种方式:
// 可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。

$ xz -d ***.tar.xz
$ tar -xvf ***.tar

或者直接使用如下命令来解压

$ tar -xvf cudnn-linux-$arch-8.x.x.x_cudaX.Y-archive.tar.xz

将cudnn中的文件复制到cuda所在的文件里面:

$ sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.6/include 
$ sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.6/lib64 
$ sudo chmod a+r /usr/local/cuda-11.6/include/cudnn*.h /usr/local/cuda-11.6/lib64/libcudnn*

重新载入配置:

source ~/.bash_profile

验证:

cat /usr/local/cuda-11.6/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

出现以下,说明cudnn安装完毕。

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0

#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#endif /* CUDNN_VERSION_H */

测试下:

使用 python3 进入 python 解释器,输入

import paddle

,再输入

paddle.utils.run_check()

如果出现

PaddlePaddle is installed successfully!

,说明您已成功安装。

五、参考文章

1.Centos7下遇到Unable to load the ‘nvidia-drm‘ kernel module
2.运行paddle-gpu相关项目报错
3.Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion
4.【记录】在WSL2上安装cuDNN和TensorRT
5.Ubuntu 22.04+cuda11.3+cudnn8.5配置 保姆级教程


总结

本文主要解决驱动版本与内核不匹配导致问题,通过重新安装内核与Nvidia驱动。由于系统内装有多个cuda版本,该项目使用的cuda-11.6检测过程中发现cudnn未安装,补充对应的版本。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值