在之前的深度學習中,我是在MAC上跑CPU版本的tensorflow程式,當資料量變大後,tensorflow跑的非常慢,在記憶體不足情況下,又容易造成系統崩潰,這個時候我覺得不應該浪費我的限制的微星遊戲本,便想著拿來跑深度學習的程式碼。
1. 配置資訊
我的老電腦配置如下:
- CPU i5-4210M
- 16G記憶體
- GPU GTX 950M 視訊記憶體2G
- 128G SSD
- Ubuntu 18.04
這個配置一般,但是為了不讓我的mac發光發熱,同時體驗下GPU給深度學習的加速效果(雖然可能加不了多少速度)以及不想讓老電腦荒廢的心,我最終決定還是在上面安裝Ubuntu18.04跑TensorFlow了。
2. 選擇安裝所需軟體
TensorFlow官網中提到了需要安裝以下軟體才可以使用TensorFlow的GPU版本:
簡單來說就是我們需要在Ubuntu18.04的環境下安裝以下軟體:
-
NVIDIA的GPU驅動(nvidia drive-390)
-
CUDA 9.0(不要下載CUDA 10.0,因為TensorFlow 1.12.0目前只支援到CUDA 9.0)
-
cuDNN v7.3.1 for CUDA 9.0 (選當前最新的)
至於CUDA和cuDNN是什麼自行谷歌,對應的下載頁面和地址如下:
-
CUDA 9.0 developer.nvidia.com/cuda-toolki…
-
cuDNN 7.3.1 developer.nvidia.com/rdp/cudnn-a… 注意cuDNN下載前需要註冊登入
3. 安裝NVIDIA驅動並降低gcc版本
cuda的官網 docs.nvidia.com/cuda/cuda-i… 安裝說明中已經列出了檢查步驟。如果你的GPU在支援列表中,則我們只需要做如下操作:
3.1 安裝GPU驅動程式。
Ubuntu在安裝後,是給了一個叫Nouveau預設內建的驅動程式。我們需要安裝GPU針對性的驅動程式,有篇文章教怎麼在Ubuntu上安裝合適的驅動:linuxconfig.org/how-to-inst… 。
簡單來說,執行 ubuntu-drivers devices
命令得到推薦的nvidia驅動程式,
然後執行 sudo apt-get install nvidia-driver-390
(根據提示的驅動程式而定)即可安裝完成。
注意安裝完成後需要重啟。
重啟完成後執行nvidia-smi
,如果出現類似於下圖所示的資訊則說明驅動安裝成功:
3.2 安裝gcc-4.8和g++4.8
sudo apt-get install gcc-4.8
ll /usr/bin |grep gcc #若存在高版本的gcc,則繼續
cd /usr/bin
sudo mv gcc gcc.bak #備份
sudo ln -s gcc-4.8 gcc #重新指向
複製程式碼
執行gcc --version
可檢查是否為4.8版本,g++可執行同樣的操作。
4. 安裝CUDA和cuDNN
進入CUDA9.0的下載頁,選擇安裝型別為runfile(local),可發現有一個基礎安裝包,和三個補丁包,都下載下來,然後依次執行:
sudo sh cuda_9.0.176_384.81_linux.run
複製程式碼
安裝時會以提問的方式,一路預設即可,當第二個詢問是否安裝新驅動程式時,選擇否,其餘均是yes。然後再以同樣的方式安裝以下補丁包。
sudo sh cuda_9.0.176.1_linux.run
sudo sh cuda_9.0.176.2_linux.run
sudo sh cuda_9.0.176.3_linux.run 
複製程式碼
結束後,可以在/usr/local/cuda-9.0 發現有安裝檔案,執行sudo gedit /etc/profile
或者sudo gedit ~/.bashrc
在/etc/profile
或~/.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
或者source /etc/profile
讓剛剛修改的環境變數生效。然後執行nvcc -V
來驗證CUDA是否完成安裝。
安裝好CUDA9.0後,接下來就安裝cuDNN,進入cuDNN下載頁選擇 cuDNN v7.3.1 Library for Linux 下載。
執行如下命令:
tar -xzvf cudnn-9.0-linux-x64-v7.tgz
複製程式碼
進入解壓目錄,執行:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
複製程式碼
這樣就安裝完成了。
5. 安裝pyenv
這裡我採用了pyenv的方式來隔離不同環境下的python。
首先安裝curl,它一個命令列式的下載工具
sudo apt install curl
複製程式碼
然後下載pyenv的安裝包,pyenv的GitHub連結:pyenv
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
複製程式碼
編輯~/.bashrc
:
sudo gedit ~/.bashrc
複製程式碼
在該檔案中新增以下內容(直接複製即可):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"</pre>
複製程式碼
終端執行以下命令安裝python的依賴包
sudo apt-get update
sudo apt-get install make build-essential libssl-dev zlib1g-dev
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
sudo apt-get install llvm libncurses5-dev libncursesw5-dev
複製程式碼
安裝python 3.6.5
pyenv install 3.6.5
複製程式碼
安裝過程可能很緩慢,一個簡便方法,只需要在python的官網(此處給出python3.6.5的下載地址)下載你需要的python版本的tar.xz
檔案然後放到 ~/.pyenv/cache
中然後再執行pyenv install [version]
就可以了,cache資料夾可能不存在,請自行新建。
pyenv的常用命令
上圖是官方文件中的例子,如果想要檢視完整命令列表,可以點選檢視pyenv命令列表
在終端執行pyenv global 3.6.5
即可將3.6.5設定為系統預設的python環境
6. 安裝tensorflow-gpu
終端中輸入以下命令即可安裝:
pip install --index-url http://pypi.douban.com/simple --trusted-host pypi.douban.com --upgrade tensorflow-gpu
複製程式碼
7. 驗證結果
利用終端新建一個.py檔案
touch test.py
複製程式碼
然後利用Visual Studio Code開啟該檔案
code test.py
複製程式碼
輸入
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
複製程式碼
然後執行該指令碼python test.py
即可得到包含有GPU輸出資訊的正確結果