GPU驱动的安装和相关cuda安装参见我的前两篇文章:
centos 7 环境下GPU环境搭建+安装tensorflow
在执行nvidia-smi的时候没有问题,显示成功并且很正常:
nvidia-smi
显示如下:
Thu Mar 13 09:45:13 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26 Driver Version: 430.26 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 208... Off | 00000000:D8:00.0 Off | N/A |
| 34% 42C P0 1W / 250W | 0MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
但是在python命令下执行,打印出来的是空值:
import tensorflow as tf
gpu_device_name = tf.test.gpu_device_name()
print(gpu_device_name)
再执行一下命令进行验证,只是打印输出了CPU相关信息:
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
然后看了一下log显示报错是failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error,一直以为是cuda版本和驱动的问题,于是安装了好多次不同版本的cuda,但是问题还是没有解决,我看stackflow上很多人都说是reboot一下,但是并没有什么效果。
于是我执行:
sudo modprobe nvidia
显示报错no module nvidia....。
查看相关驱动lsmod | grep “nvidia”
nvidia_drm 43690 0
nvidia_modeset 1112541 1 nvidia_drm
nvidia 18794229 1 nvidia_modeset
我推测可能是驱动的问题,于是找到nvidia驱动位置重新加载,如果insmod nvidia.ko失败就先rmmod然后在重新insmod。但在rmmod之前需要把依赖的模块都先rmmod之后才行,操作如下,因为nvidia驱动和其他启动没有依赖关系,所以不会对其他的造成影响,操作相对安全:
cd /usr/lib/modules/3.10.0-1062.4.1.el7.x86_64/extra文件中
0)xz -d -k nvidia-uvm.ko.xz
1)rmmod nvidia_drm.ko
2)rmmod nvidia_modeset.ko
3)rmmod nvidia_uvm.ko
4)rmmod nvidia.ko
5)insmod nvidia.ko
6)insmod nvidia-uvm.ko
7)xz -d -k nvidia-modeset.ko.xz
8)insmod nvidia-modeset.ko
9)insmod nvidia-drm.ko
然后重新安装cuda,cudnn即可:
cuda安装:
1)sudo sh cuda_10.0.130_410.48_linux
2)accept->n->y->y->y(一定记住不能装driver,在driver那项里选no)
3)vim /etc/profile
4)source /etc/profile
5)echo $PATH
cudnn安装:
1)使用版本:cudnn-10.0-linux-x64-v7.6.5.32.tgz
2)tar -zxvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
3)cd cuda/
4)sudo cp include/cudnn.h /usr/local/cuda/include
5)sudo cp lib64/libcudnn.* /usr/local/cuda/lib64
6)sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*
个人感觉网上相关reboot操作只是因为在当前状态相关模块不小心down掉了,于是重启以达到相关模块重新加载的目的。如果无法自动加载就需要相关的手动自己加载就可以。
安装完成之后,执行下面命令,打印出GPU相关信息则表示成功。
import tensorflow as tf
gpu_device_name = tf.test.gpu_device_name()
print(gpu_device_name)
同时要保证tensorflow、cuda、cudnn相关的版本一致。这个很重要。可以在官网上查到。我的版本如下。
tensorflow:tensorflow_gpu-1.15.0
cuda:10.0
cudnn:7.6