Status: CUDA driver version is insufficient for CUDA runtime version

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。当前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

然而,搭建深度学习框架却是一个让人恼火的事情。直到Anaconda的到来,一切都不一样了。

1 查看系统当前显卡驱动版本

很显然,我的是Driver Version: 390.116

qingdujun@ubuntu1804lts:~$ nvidia-smi
Sat Apr 13 19:42:34 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 390.116                   |
|-------------------------------+----------------------+----------------------+
| 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 GTX 106...  Off  | 00000000:01:00.0  On |                  N/A |
|  2%   45C    P8     5W / 120W |    315MiB /  6075MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1107      G   /usr/lib/xorg/Xorg                            16MiB |
|    0      1240      G   /usr/bin/gnome-shell                          64MiB |
|    0      4486      G   /usr/lib/xorg/Xorg                            95MiB |
|    0      4617      G   /usr/bin/gnome-shell                          90MiB |
|    0      4659      G   /opt/teamviewer/tv_bin/TeamViewer              6MiB |
|    0     21030      G   ...uest-channel-token=11311962176077755626    38MiB |
+-----------------------------------------------------------------------------+

2 查看当前tensorflow安装的CUDA版本

注意,需要先进入虚拟环境。我这里是cuda10.0

qingdujun@ubuntu1804lts:~$ conda activate tensorflow
(tensorflow) qingdujun@ubuntu1804lts:~$ conda list | grep "cuda*"
WARNING: The conda.compat module is deprecated and will be removed in a future release.
cudatoolkit               10.0.130                      0  
cudnn                     7.3.1                cuda10.0_0  

3 NVIDIA官网给的版本对应关系

该图来自于 《CUDA Toolkit and Compatible Driver Versions》, 最新版本可以从以上链接中获取。
Status: CUDA driver version is insufficient for CUDA runtime version_第1张图片

很显然,我是Ubuntu 18.04LTS 系统,安装的是 Driver Version: 390.116显卡驱动,应该对应CUDA 9.0。(这里注意Linux和Windows驱动对应版本是不一样的)。

4 一些当时安装时的操作

丑话说在前头,如果你要卸载并重新安装显卡驱动,这是不靠谱的,很容易造成电脑黑屏,再也无法显示桌面。

对于我来说,肯定会选择, 重新安装CUDA

回想是当时是怎么安装的。我电脑安装的是Anaconda3的环境,配置深度学习环境特别简单: 一行命令 安装TensorFlow-gpu 、 PyTorch-gpu

我原来是这么安装的:

PyTorch

$ conda install pytorch torchvision cudatoolkit=9.0 -c pytorch

Tensorflow

$ conda create --name tensorflow tensorflow-gpu

--name后面是创建的虚拟环境的名字。当时一激动,忘记指定tensorflow-gpu的版本CUDA了,conda就给我整了个cuda 10.0造成了现在的局面。(其实我当时也不知道指定版本这事)。

5 解决办法

CUDA需要电脑计算能力为3.5以上的显卡才被支持。你可以在这里《NVIDIA CUDA GPUs》 看到你的显卡计算能力。

在《TensorFlow GPU Support》 页面,我们可以看到,对于 Linux系统 (非macOS/Windows) ,

CUDA 10.0 需要 410.x 或更高版本,对应TensorFlow 1.13.0 及更高版本。

版本 Python 版本 编译器 编译工具 cuDNN CUDA
tensorflow_gpu-1.13.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.11.0 7 9

补充:完整表格参看文后的附录。

很显然,我的显卡驱动为390.116,NVIDIA官网说该驱动应该使用CUDA9.0,那么,我应该安装tensorflow_gpu-1.12.0。(先别急着安装,我这里失败了,请看后文)

移除原来的conda虚拟环境

移除时,先退出该虚拟环境。

(tensorflow) qingdujun@ubuntu1804lts:~$ conda deactivate
qingdujun@ubuntu1804lts:~$ conda remove -n tensorflow --all

安装TensorFlow1.12.0 (失败了)

理想是美好的,安装之后,还是原来的错误。我去看了一下安装日志给我安装的竟然是cuda9.2_0(我要的是9.0),好吧,TensorFlow官网只是说明了大版本号9,并没有说明小版本号9.x,sad。

qingdujun@ubuntu1804lts:~$ conda create --name tf_gpu tensorflow-gpu=1.12.0

qingdujun@ubuntu1804lts:~$ conda activate tf_gpu
(tf_gpu) qingdujun@ubuntu1804lts:~$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Traceback (most recent call last):
  File "", line 1, in <module>
  File "/home/qingdujun/Applications/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1551, in __init__
    super(Session, self).__init__(target, graph, config=config)
  File "/home/qingdujun/Applications/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 676, in __init__
    self._session = tf_session.TF_NewSessionRef(self._graph._c_graph, opts)
tensorflow.python.framework.errors_impl.InternalError: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version

安装TensorFlow1.9.0 (成功了)

有了前面的前车之前,我这下注意了。好在conda在安装的时候会有一个问候界面:“小伙,我将给你安装下列这些包,[y/n]?” ,我瞧仔细了,TensorFlow1.12.0~1.10.0安装的都是CUDA9.2。

直到TensorFlow=1.9.0,这时候使用的才是CUDA9.0版本(具体是cudnn-7.3.1-cuda9.0_0)。

成功!

qingdujun@ubuntu1804lts:~$ conda create --name tf_gpu tensorflow-gpu=1.9.0
qingdujun@ubuntu1804lts:~$ conda activate tf_gpu
(tf_gpu) qingdujun@ubuntu1804lts:~$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
2019-04-13 21:16:31.687412: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-04-13 21:16:31.780957: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:897] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-04-13 21:16:31.781315: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1392] Found device 0 with properties: 
name: GeForce GTX 1060 6GB major: 6 minor: 1 memoryClockRate(GHz): 1.7085
pciBusID: 0000:01:00.0
totalMemory: 5.93GiB freeMemory: 5.55GiB
2019-04-13 21:16:31.781329: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1471] Adding visible gpu devices: 0
2019-04-13 21:16:31.963979: I tensorflow/core/common_runtime/gpu/gpu_device.cc:952] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-04-13 21:16:31.964011: I tensorflow/core/common_runtime/gpu/gpu_device.cc:958]      0 
2019-04-13 21:16:31.964017: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   N 
2019-04-13 21:16:31.964169: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5325 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1
2019-04-13 21:16:32.008277: I tensorflow/core/common_runtime/direct_session.cc:288] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1

>>> 

6 附录

更详细的版本支持情况可以查看《Linux/macOS TensorFlow CUDA支持情况》了解最新情况,以下为对 Linux系统(非macOS/Windows) 的简单罗列,

版本 Python 版本 编译器 编译工具 cuDNN CUDA
tensorflow_gpu-1.13.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.11.0 7 9
tensorflow_gpu-1.8.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.10.0 7 9
tensorflow_gpu-1.7.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.6.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.5.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.8.0 7 9
tensorflow_gpu-1.4.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.5.4 6 8
tensorflow_gpu-1.3.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.4.5 6 8
tensorflow_gpu-1.2.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7、3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8

补充:如果你是Windows系统请戳这里《Windows TensorFlow CUDA支持情况》,请自行获取。

References:

[1] TensorFlow GPU Installation Made Easy: Use conda instead of pip [Updated]
[2] PyTorch get started
[3] TensorFlow in Anaconda

你可能感兴趣的:(Status: CUDA driver version is insufficient for CUDA runtime version)