1. 程式人生 > >ubuntu16.04 LTS安裝Tensorflow-gpu(python)

ubuntu16.04 LTS安裝Tensorflow-gpu(python)

最近在學習深度強化學習,模擬環境gym下的很多元件windows下不支援,只能移步linux,在linux下安裝tensorflow-gpu經常會出現各種奇奇怪怪令人生無可戀的問題,總是耗時耗力直到絕望,好在多次安裝,跳過各種坑,網上經常難以找到稱手的教程,自己寫一個,以後用,同時獻給需要的小夥伴們。

首先目前tensorflow的gpu版支援cuda計算架構,對opencl也開始支援,但不是很好。cuda是nvidia的架構,因此AMD顯示卡的小夥伴就不要嘗試了,默默祈禱好用的opencl版本吧。

1、系統配置

本人使用N年前古董本Thinkpad W530。顯示卡為Quadro K1000M ,計算能力勉強達到3.0。考慮到Tensorflow的穩定執行,沒有使用最新的18.04 LTS,而是使用了ubuntu 16.04 LTS,畢竟這個版本官方支援到2020年,已經夠用了。(2020年本人可能已經因為年齡太大被掃地出門,在某個街道翻垃圾桶為生了)

2、軟體需求

官網給出的需求列表如下:

安裝ubuntu後,預設顯示卡驅動為社群維護的第三方開源驅動,而要使用CUDA必須安裝官方384.X版本以上驅動。雖然安裝CUDA的時候會安裝NVIDIA最新的驅動,但需要停用預設驅動,配置繁瑣,易出錯。先通過如下方式安裝一個官方驅動,安裝CUDA時會方便很多。首先,開啟終端,更新軟體源,sudo apt-get update 。在系統設定|軟體和更新|附加驅動中選擇官方驅動,點選應用更改(有時點一次不管用,需要點多次!!!),如下圖所示,安裝之時忘記截圖了,這張是後補的,不太一樣,但選專用驅動就好了。

安裝後,在系統中搜索NVIDIA,找到NVIDIA X server setting,說明官方驅動安裝成功,雙顯示卡要確定當前使用的是獨顯,如下所示。

安裝CUDA。本打算按照官網提供的方法安裝CUDA,但執行以上命令,直接報錯,如下圖。


wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb

無奈,只能自行安裝,根據CUDA安裝說明,可以新增相應軟體源,然後使用apt安裝。在終端中輸入以下命令:

sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt-get update

雖然看似只添加了CUDA9.1的源,其實可以安裝任何版本,如果不指定版本,會安裝最新的CUDA,我安裝了CUDA10,之後開始安裝,按需選擇:

sudo apt-get install cuda

要需要安裝CUDA9.0的,執行sudo apt-get install cuda9.0,安裝cuda後可以執行如下命令,測試cuda是否裝好,結果如下。

cd /usr/local/cuda-10.0/
cd ./samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery 

3、安裝tensorflow

之後的必須元件,我使用了一種比較方便的辦法。首先安裝anaconda ,tensorflow目前不支援python3.7,推薦安裝anaconda5.1版 ,如果安裝最新anaconda,需要新建python3.6的虛擬環境。安裝完成後,接著執行以下命令:

conda install tensorflow-gpu

 如果安裝過程中提示許可權問題,執行以下命令,更改所有者。

 sudo chown -R yzp:yzp ~/anaconda3

 conda會安裝所有必需元件,對於可選元件,可以根據需要自行安裝。好了,現在可以見證奇蹟了,列出的可用裝置輸出結果,可以看到GPU。

In [1]:from tensorflow.python.client import device_lib

In [2]:device_lib.list_local_devices()
Out[2]: 
[name: "/device:CPU:0"
 device_type: "CPU"
 memory_limit: 268435456
 locality {
 }
 incarnation: 7784159223744263143, name: "/device:GPU:0"
 device_type: "GPU"
 memory_limit: 1512570880
 locality {
   bus_id: 1
   links {
   }
 }
 incarnation: 8493799634924620097
 physical_device_desc: "device: 0, name: Quadro K1000M, pci bus id: 0000:01:00.0, compute capability: 3.0"]

跑一段程式碼,在終端中執行,安裝htop監測CPU狀態,執行watch監測顯示卡狀態,結果如下圖,可清楚看到,GPU和CPU在同時使用,GPU利用率很高。

sudo apt-get install htop
watch -n 10 nvidia-smi
htop