TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。当前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。
然而,搭建深度学习框架却是一个让人恼火的事情。直到Anaconda的到来,一切都不一样了。
很显然,我的是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 |
+-----------------------------------------------------------------------------+
注意,需要先进入虚拟环境。我这里是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
该图来自于 《CUDA Toolkit and Compatible Driver Versions》, 最新版本可以从以上链接中获取。
很显然,我是Ubuntu 18.04LTS 系统,安装的是 Driver Version: 390.116
显卡驱动,应该对应CUDA 9.0
。(这里注意Linux和Windows驱动对应版本是不一样的)。
丑话说在前头,如果你要卸载并重新安装显卡驱动,这是不靠谱的,很容易造成电脑黑屏,再也无法显示桌面。
对于我来说,肯定会选择, 重新安装CUDA 。
回想是当时是怎么安装的。我电脑安装的是Anaconda3
的环境,配置深度学习环境特别简单: 一行命令 安装TensorFlow-gpu 、 PyTorch-gpu
我原来是这么安装的:
$ conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
$ conda create --name tensorflow tensorflow-gpu
--name
后面是创建的虚拟环境的名字。当时一激动,忘记指定tensorflow-gpu
的版本CUDA
了,conda
就给我整了个cuda 10.0
造成了现在的局面。(其实我当时也不知道指定版本这事)。
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
。(先别急着安装,我这里失败了,请看后文)
移除时,先退出该虚拟环境。
(tensorflow) qingdujun@ubuntu1804lts:~$ conda deactivate
qingdujun@ubuntu1804lts:~$ conda remove -n tensorflow --all
理想是美好的,安装之后,还是原来的错误。我去看了一下安装日志给我安装的竟然是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
有了前面的前车之前,我这下注意了。好在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
>>>
更详细的版本支持情况可以查看《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