Ubuntu 16.04&cuda9.0&cudnn&tensorflow-gpu安裝教學

Rose-Hsu (Yun-Yu Hsu)
10 min readJan 23, 2019

--

Step:

1.安裝CUDA

2.安裝NVIDIA顯示卡驅動

3.安裝cudnn

4.安裝虛擬環境

5.安裝Tensorflow-GPU版本

6.安裝Pycharm

第1部分:安裝Cuda

tensorflow須使用:Cuda版本應為Cuda 9.0

所以這裡就是先到官網下載Cuda 9.0(分為deb和run檔兩種安裝方式,這裡是選擇deb安裝)

下載後輸入以下指令,接著依照終端的指示進行安裝

cd Downloads
sudo dpkg -i cuda-repo-ubuntu1604–9–0-local_9.0.176–1_amd64.deb
sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

再添加環境變量:

sudo gedit ~/.bashrc

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

在終端執行命令,讓配置立即生效:

source ~/.bashrc

這時,會發現系統設定值→軟體和更新→額外驅動程式

裡面的顯示器驅動變成Cuda 9.0所提供的自帶版本了(387的版本,沒截到圖)

記得先調回X.Org X服務器或是Ubuntu 16.04自帶的384.130版本這項,否則重新開機會出現無限循環的卡在登入界面

安裝後重新開機

欲確認安裝的Cuda的版本,可以輸入以下指令

cat /usr/local/cuda/version.txt

nvcc — version

第2部分:安裝NVIDIA顯示卡驅動

因為Cuda 9.0自帶的顯卡驅動版本並不是我們想要的(版本不對會造成無限循環登入),所以可以利用以下方式更改顯卡驅動

先到官網查看目前我們使用的顯卡驅動版本,我查詢到的版本為410.78

下載驅動程序| NVIDIA
下載NVIDIA產品的驅動程序,包括GeForce顯卡,nForce主板,Quadro工作站和... www.nvidia.com

到目前為止,先不要下載,可直接通過PPA來安裝

sudo add-apt-repository ppa:graphics-drivers/ppa

sudo apt update

PPA:Ubuntu的個人軟體儲存庫,全名為Personal Package Archive

PPA有點像是Ubuntu官方的apt server一樣

只是他的來源基本上就是一些官方沒收錄或是比官方還新的套件來源

這時再次開啟額外驅動程式查看,會發現多了410.66 / 390.87 / 396.54這三個驅動版本

選擇我們剛剛查詢到的那個410.66

重新開機,查詢顯卡驅動,確認已經安裝成410.66版本了

nvidia-smi

第3部分:安裝cudnn

下載 cudnn

方法一:DEB檔

sudo dpkg -i libcudnn7_7.0.5.15-1 + cuda9.0_amd64.deb

方法二:解壓縮檔

tar -zxvf cudnn-9.0-linux-x64-v7.3.1.20.tgz
cd cuda
sudo cp lib64 / lib * / usr / local / cuda / lib64 /
sudo cp include / cudnn.h / usr / local / cuda / include /

然後更新網路連結:

cd / usr / local / cuda / lib64 /
sudo rm -rf libcudnn.so libcudnn.so.7#刪除原有
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7 #new增連結

(注意這裡要和自己下載的cudnn版本對應,可以在/ usr / local / cuda / lib64下查看自己libcudnn的版本)
sudo ln -s libcudnn.so.7 libcudnn.so #new增連結

欲確認安裝的cudnn版本,可以輸入以下指令

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

第4部分:安裝虛擬環境

[法一]使用Google官方推薦的方式:Virtualenv

1.安裝PIP和Virtualenv

使用Python 3.x的版本

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv

2.創造一個虛擬的Python的開發環境:

virtualenv --system-site-packages -p python3.6 ./tensorflow

注意,〜/ tensorflow是自己選擇的位置並創建的目錄。可以自己選擇其他位置與名稱。

3.激活虛擬環境:

source ./tensorflow/bin/activate

*激活虛擬環境

source ./tensorflow/bin/activate

*關閉虛擬環境

deactivate

[法二]Anaconda

1.安裝pip和Anaconda

下載Python 3.x的版本

sudo sh Anaconda3-2019.03-Linux-x86_64.sh

安裝完後關掉終端機,再開啟新的終端機

2.創造一個虛擬的Python的開發環境:

conda create -n tensorflow python = 3.6 anaconda

3.激活虛擬環境:

source activate tensorflow

4.查看已安裝的packages:

conda list  # show packages installed within the virtual environment

*激活虛擬環境

source activate tensorflow

*關閉虛擬環境

source deactivate

第5部分:安裝Tensorflow-GPU版本與套件

1.安裝tersorflow-gpu版本:

注意請依照tensorflow與python支援的版本安裝,按此可查詢

使用Python 3.6 gpu的版本

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.10.0-cp36-cp36m-linux_x86_64.whl

2.安裝matplotlib

python -m pip install -U matplotlib

3.安裝自己須使用到的套件

pip install gym[atari]
pip install gym
pip install pygame
pip install opencv-python
pip install setproctitle

第6部分:安裝Pycharm

先在PyCharm網官下載安裝包https://www.jetbrains.com/pycharm/download/#section=linux

解壓縮並安裝

tar zxvf pycharm-community-2018.3.tar.gz

cd pycharm-community-2018.3 / bin

sh ./pycharm.sh

選第二個

依序即可安裝完成

點創建新項目

解釋器選擇剛剛安裝的Python3.5(tensorflow)版本

完成

實際測試檢測代碼:

import tensorflow as tf
import numpy as np
x = tf.placeholder("float",shape=[None,1])
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(x,W) +b
y_ = tf.placeholder("float",[None,1])
cost = tf.reduce_sum(tf.pow((y_-y),2))
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
All_x = np.empty(shape=[1,1])
All_y = np.empty(shape=[1,1])
for i in range(1000):
x_s = np.random.rand(1,1)
y_s = np.dot([[0.33]],np.random.rand(1,1)) + 0.33
feed = {x: x_s, y_: y_s}
sess.run(train_step,feed_dict=feed)
print("After %d iteration:"%i)
print("W : %f"%sess.run(W))
print("b : %f"%sess.run(b))
All_x = np.concatenate((All_x,x_s))
All_y = np.concatenate((All_y,y_s))
print(All_x)
print(All_y)

最後感謝:曾同學的工作

--

--