1. 程式人生 > >TensorFlow GPU在ubuntu 18.04上安裝的注意事項

TensorFlow GPU在ubuntu 18.04上安裝的注意事項

雖然說TensorFlow到現在已經發布好幾年了,但是在ubuntu上用帶GPU的TensorFlow,我認為一直是個災難,而且這個災難仍將持續。。。

這個話題,相當簡單了,只是配置一下環境而己,但是N多人在上面痛不欲生,我還是寫出來吧。有問題儘管給我留言。

我也用過一段時間的tensorflow了,但是今天返過來,還要寫安裝教程的原因是,今天早上手賤,一個命令:

$ sudo apt-get autoremove

然後把原來裝好的cuda9.0完全remove了,這時候再裝上去,很麻煩了。還好一番折騰,搞定。

進入正題。

自己買的筆記本是thinkpad P50的工作站,內建M2000M的顯示卡,作業系統為ubuntu,可以用做GPU加速來訓練模型。

麻煩是,Tensorflow的最近幾個版本,對應於cuda 9.0版本。但是現在nvidia的官網上,已經出cuda 10.0的版本了。但是Tensorflow的安裝,總是指定只能是cuda9.0的版本。而且ubuntu有個大的問題,和人往高處走一樣,一般是就高不就低。這是麻煩造成的根源。

首先還是想辦法,怎麼在ubuntu上以完美的姿勢裝上cuda 9.0吧。

如果您的電腦上,已經有cuda的高版本,而且顯示卡驅動也有了。那麼,直接來這一句。

sudo apt-get --purge -y remove 'cuda*'
sudo apt-get --purge -y remove 'nvidia*'

要完全清理掉啊。如果有一些殘餘,後面更難受。。。不要害怕,執行之後,重啟,ubuntu還是能夠正常的。不過沒有用到顯示卡的一些特性而已。

如果要離線安裝。我建議在 medium網站上看這篇文章。 由於國內看不了medium,儘可能想辦法看吧。但是這篇文章寫的也早。千萬只裝一個cuda,不要裝tools,,千萬不要用文章中的upgrade啊不然的話,版本會升級到9.1那樣就麻煩了。

如果完全線上安裝,我這邊寫了一個指令碼去解決這個問題

#!/bin/bash -e

#wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
#wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
#wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
#wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl2_2.1.4-1+cuda9.0_amd64.deb
#wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl-dev_2.1.4-1+cuda9.0_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
sudo dpkg -i libnccl2_2.1.4-1+cuda9.0_amd64.deb
sudo dpkg -i libnccl-dev_2.1.4-1+cuda9.0_amd64.deb
sudo apt-get update
sudo apt-get install cuda=9.0.176-1
sudo apt-get install libcudnn7-dev
sudo apt-get install libnccl-dev

這兒只是我測試過的,用nvidia的driver 390版本可以用。但是,千萬不要任意指定一個版本裝driver。。。那樣可能引起圖形介面崩潰的。

現在完全依靠這指令碼,可以把cuda配好。但是裡面還有一個版本衝突。
衝突來源於mesg在不同的包中問存在。用–force-overwrite的方法直接蓋過去,我用了之後,還沒有發現問題。

sudo dpkg -i --force-overwrite /var/cache/apt/archives/libnvidia-compute-390_390.48-0ubuntu3_amd64.deb

這樣的話。cuda就完全裝好了。
用命令去檢測

$ nvidia-smi 
Sun Sep 30 11:23:07 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.44                 Driver Version: 396.44                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro M2000M       Off  | 00000000:01:00.0  On |                  N/A |
| N/A   40C    P8    N/A /  N/A |    134MiB /  4043MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1173      G   /usr/lib/xorg/Xorg                           133MiB |
+-----------------------------------------------------------------------------+

這個結果表明nvidia的cuda的那些東西,完全裝好了。

等等。還得處理裝完之後的殘餘問題,也就是nvidia的版本,在不斷的更新。那麼,他提示更新我為9.2,或者10.0版本怎麼辦?進入安裝管理工具。然後去掉。ubuntu的nvidia庫的官方線上更新。
在這裡插入圖片描述

這樣的話。就萬事大吉了。
後面就可以裝帶gpu的tensorflow了

$ pip3 install  -U tensorflow-gpu

檢測指令碼如下:

$ cat test.py 
import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

執行結果如下:

$ python3 test.py 
2018-09-30 11:41:20.590788: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-09-30 11:41:20.674838: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2018-09-30 11:41:20.675610: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1411] Found device 0 with properties: 
name: Quadro M2000M major: 5 minor: 0 memoryClockRate(GHz): 1.137
pciBusID: 0000:01:00.0
totalMemory: 3.95GiB freeMemory: 3.76GiB
2018-09-30 11:41:20.675655: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1490] Adding visible gpu devices: 0
2018-09-30 11:41:21.270939: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-09-30 11:41:21.270966: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977]      0 
2018-09-30 11:41:21.270973: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0:   N 
2018-09-30 11:41:21.271200: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1103] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3490 MB memory) -> physical GPU (device: 0, name: Quadro M2000M, pci bus id: 0000:01:00.0, compute capability: 5.0)
b'Hello, TensorFlow!'