概述
由于现在tensorflow的版本变化很大很多特别是从1.8开始到1.13,1.14等版本迁移的时候,要么API过时要么cuda报错。其中API过时可以很方便的查找并替换,但是很多CUDA版本问题就比较麻烦。建议一定要查看相应的深度学习框架所支持的CUDA版本。这里列出了主要的经常出现的cuda issues。
ISSUES
CPU/GPU切换
1
2
3
4
| # 0表示使用CPU,1则是GPU
config = tf.ConfigProto(device_count = {'GPU': 0})
with tf.Session(config=config) as sess:
pass
|
could not create cudnn handle:CUDNN_STATUS_INTERNAL_ERROR
我这边在查找github上找到的fixed的issue,其中如下可以解决该问题:
1
2
3
4
| config = tf.ConfigProto()
config.gpu_options.allow_growth = True
with tf.Session(config=config) as sess:
pass
|
或者显存限制设置
1
2
3
4
| config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.8
with tf.Session(config=config, ...) as sess:
pass
|
*.so动态链接库丢失问题
1
2
3
| locate lib*.so 找到其所在位置
然后在环境变量里加上:
export LD_LIBRARY_PATH=/usr/local/cuda-x.x.0/lib64:/usr/local/cuda-x.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
|
nvidia-smi has failed because it couldn’t communicate with the NVIDIA driver
这个问题应该是出现的次数和频率比较多,这个问题可能有多种问题造成,首先需要按照NVIDIA的相应的cuda的文档进行检查和安装检测,在安装的时候需要将一些基础的开发工具包和相应的kernel版本进行处理。以centos7.0为例子:
首先验证您的机器是否存在相应的显卡和linux内核版本进而选择相对应的内核架构及驱动。
1
2
3
4
5
6
7
8
9
10
| lspci | grep -i nvidia
uname -m && cat /etc/*release
sudo yum -y update
sudo yum -y groupinstall "Development Tools"
sudo yum -y install epel-release
sudo yum -y install dkms
sudo yum -y install kernel-devel-$(uname -r)
#install cuda and seting path,source path
|
重启服务器,在**/etc/default/grub**里面找到GRUB_CMDLINE_LINUX,添加如下:
1
2
3
| rd.driver.blacklist=nouveau nouveau.modeset=0
#generate config
grub2-mkconfig -o /boot/grub2/grub.cfg
|
编辑或创建 /etc/modprobe.d/blacklist.conf文件加入
更新配置
1
2
| mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut /boot/initramfs-$(uname -r).img $(uname -r)
|
重新启动服务器,如果还是报failed错误,请验证如下步骤,检查dkms的状态和是否已安装:
1
2
| dkms status
# nvidia, 418.86.00: added
|
并运行安装该模块
1
2
| dmks autoinstall
#error ,failed
|
我们需要检查是否已安装正确的linux kernel。
1
| rpm -qa | grep kernel-devel-$(uname -r) || yum -y install kernel-devel-$(uname -r)
|
最后装载模块即可
1
2
| nvidia-modprobe
echo $?
|