概述

由于现在tensorflow的版本变化很大很多特别是从1.8开始到1.13,1.14等版本迁移的时候,要么API过时要么cuda报错。其中API过时可以很方便的查找并替换,但是很多CUDA版本问题就比较麻烦。建议一定要查看相应的深度学习框架所支持的CUDA版本。这里列出了主要的经常出现的cuda issues。

ISSUES

1.切换使用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

2.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

3. *.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

4.nvidia-smi has failed because it couldn't communicate with the NVIDIA driver

这个问题应该是出现的次数和频率比较多,这个问题可能有多种问题造成,首先需要按照NVIDIA的相应的cuda的文档进行检查和安装检测,在安装的时候需要将一些基础的开发工具包和相应的kernel版本进行处理。以centos7.0为例子:

首先验证您的机器是否存在相应的显卡和linux内核版本进而选择相对应的内核架构及驱动。

1
2
lspci | grep -i nvidia 
uname -m && cat /etc/*release
1
2
3
4
5
6
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
blacklist nouveau

更新配置

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 $?

最后重启服务器即可。

总结

坑不断,需要一点一点花时间去填。