CUDA、cuDNN 和 tensorflow-gpu 版本的推荐配置:configure page
查看自己的 CUDA 和 cudnn 的版本:
1)直接用 nvcc --version
查看:
2)CUDA 一般安装在 /usr/local/cuda/ 路径下,该路径下有一个version.txt文档,里面记录了 CUDA 的版本信息,执行语句:
cat /usr/local/cuda/version.txt
3)cuDNN 的信息在其头文件里,执行语句:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
这里可以到看到 CUDA 版本是 9.0,cuDNN 版本是 7.0.5,官方推荐的 tensorflow 对应版本是:1.5 / 1.6 / 1.7 / 1.8 / 1.9 / 1.10 / 1.11 / 1.12
如果报错版本不对的话,可以按照下面的解决方法:
pip uninstall tensorflow-gup==1.0.1
pip install tensorflow-gpu==1.5.0
安装好以后,可以进行如下测试,如果没有报错就没问题:
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
查看日志信息若包含gpu信息,就是使用了gpu。
import tensorflow as tf
tf.test.is_gpu_available()
>>>
True
其他方法:跑计算量大的代码,通过 nvidia-smi 命令查看gpu的内存使用量。
如果安装了多个版本的 CUDA,可以在 /usr/local/
目录下看到自己安装了哪些版本:
cuda 是一个软链接,它指向我们指定的 cuda 版本(在设置环境变量时,也使用的是 cuda
,而不是 cuda-具体版本
,这主要是为了方便我们切换 cuda 版本,可以让我们不用每次都去该环境变量的值)
进入 local
文件夹下,使用 stat
命令查看当前 cuda 软链接指向的哪个 cuda 版本:
可以看到,cuda 软链接的文件类型是symbolic link,指向的目录是 /usr/local/cuda-9.0,当我们想使用 cuda-8.0 版本时,只需要删除该软链接,然后重新建立指向 cuda-8.0 版本的软链接即可(注意名称还是cuda,因为要与 bashrc 文件里设置的保持一致)
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda
需要修改的只是上面的版本号而已。
如果在测试时报错:
InternalError: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version
说明 CUDA 驱动程序版本跟 CUDA 的运行时版本不匹配。
(1)查看 CUDA driver version(驱动版本):就是NVIDIA GPU的驱动程序版本
查看命令:nvidia-smi
看以看到 Driver Version:384.111
(2)查看 CUDA runtime version(运行时版本):在 python 中安装的 cudatoolkit 和cudnn 程序包的版本
查看命令:pip list / conda list
可以看到 python 安装的 cudatoolkit 和 cudnn 程序包版本是:9.2
(3)nvidia 驱动和 cuda runtime 版本对应关系
来源:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
运行时版本 | 驱动版本 |
---|---|
CUDA 9.1 | 387.xx |
CUDA 9.0 | 384.xx |
CUDA 8.0 | 375.xx (GA2) |
CUDA 8.0 | 367.4x |
CUDA 7.5 | 352.xx |
CUDA 7.0 | 346.xx |
CUDA 6.5 | 340.xx |
CUDA 6.0 | 331.xx |
CUDA 5.5 | 319.xx |
CUDA 5.0 | 304.xx |
CUDA 4.2 | 295.41 |
CUDA 4.1 | 285.05.33 |
CUDA 4.0 | 270.41.19 |
CUDA 3.2 | 260.19.26 |
CUDA 3.1 | 256.40 |
CUDA 3.0 | 195.36.15 |
(4)解决
从驱动和运行时的版本对应关系来看,版本为 384.111 的驱动程序对应的运行时版本是9.0,也就是说目前在 python 中安装的 cudatoolkit 和 cudnn 程序包版本 9.2 是过高了。
先卸载 python 中安装的 cudatoolkit 和 cudnn 程序包:
pip/conda uninstall cudnn
pip/conda uninstall cudatoolkit
然后安装对应版本的 cudatoolkit 和 cudnn 程序包:
pip install cudatoolkit=9.0
pip install cudnn
(5)出现问题的原因
一般出现这种情况是因为在 python 中安装 tensorflow 的 gpu 版本时,pip 会检查 tensorflow 依赖的其他的包,如果依赖的包没有安装,则会先安装最新版本的依赖包,最终导致 gpu 驱动版本和 cuda 运行时版本不匹配。