AI 加速器自學組裝指南(二)-Tensorflow 軟體架設

作者 | 發布日期 2017 年 11 月 07 日 14:08 | 分類 AI 人工智慧 , 軟體、系統 , 電腦 line share follow us in feedly line share
AI 加速器自學組裝指南(二)-Tensorflow 軟體架設


在上一篇談完硬體組裝基本架構後,這篇我們要談的是 Tensorflow 軟體架設,要安裝軟體,使用者當然要有 Linux 的安裝概念與實作,因為這可是要用到終端機指令才行,而非如 Windows 安裝那般一直按滑鼠點按即可。

AI- Tensorflow with GPU 安裝紀錄

OS: Ubuntu 16.04.03 LTS (Server Version)
Python: 3.5.2
Tensorflow: 1.3.0
Graphics Card: Nvidia Tesla P100
Graphics Card Driver: NVIDIA-Linux-x86_64-384.81.run
CUDA Version: cuda_8.0.61_375.26_linux & cuda_8.0.61.2_linux (20171020時測試只能用cuda 8),cuda_9.0.176_384.81_linux (因Tensorflow 1.3不支援cuda 9)
cuDNN Version: cudnn-9.0-linux-x64-v7.tgz
Test Package: libcudnn7-doc_7.0.3.11-1+cuda9.0_amd64.deb

Google 有推出開放原始版的 AI 套件來讓一般人使用,本次是記錄安裝 Tenforflow with GPU 的安裝過程,Tensorflow 的安裝方式有兩大類和 4 種方式,可以根據你的需求再做調整。

本次安裝是選擇 TensorFlow with GPU support + virtualenv,選擇用 virtualenv 安裝是因為維護方便,以下會分兩大部分來介紹,因為文章和圖片不少,所以會分成兩篇來記錄。

第一部分  前置準備( Part 1 Pre-installation)

前置準備的部分包含了,顯卡驅動程式的安裝和 CUDA、CUDNN 驅動程式的安裝,另外鐵的教訓,不要想偷懶,請愛用 Source Code 安裝,用套件管理程式來安裝,未來有許多坑等著你自己跳
首先,更新各項套件到最新版本。

apt-get update && apt-get upgrade
apt-get dist-upgrade

接著安裝開發所需要的工具。

apt-get install openjdk-8-jdk git python-dev python3-dev python-numpy python3-numpy build-esse

swig python-wheel libcurl3-dev

要安裝顯卡驅動程式之前請先關閉 nouveau,因為 Ubuntu 系統整合的顯示卡驅動程式是 nouveau,我們需要先將 nouveau 從 linux 核心移除掉才能安裝 NVIDIA 官方驅動,方法就是將 nouveau 添加到黑名單 blacklist.conf 中。(P.S. 不管你是 Desktop Version 還是 Server Version 都要做,因為不做的話預設是啟動 nouveau,你會發現你安裝完顯卡驅動程式一重開機之後,之前裝好的驅動卻沒有反應的問題。)

確認一下檔案的屬性和位置,不同版本的 Linux 位置存放點都不同,這邊以 Ubuntu 16.04 版為主。

ll /etc/modprobe.d/blacklist.conf
vim /etc/modprobe.d/blacklist.conf

到這個文件的最底層,加上以下清單。

blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb

增加完畢存檔後離開 vim 模式,terminal 模式底下更新核心模組。

update-initramfs -u

執行完畢後沒有任何問題就重新開機。

reboot

重開機完成之後可以檢查看看有沒有成功關閉,下面第一張圖是還沒關閉前,第二張是關閉後。

lsmod | grep nouveau

你會發現本來有的模組就沒有再被讀取到了,接著安裝下載好的 Nvidia Driver。

bash NVIDIA-Linux-x86_64-384.81.run

基本上都是確定就可以,但最後一個步驟它會問你允不允許 Nvida 自動修改 X Configure 檔案,網路上有人建議是選 NO,有人說依照預設既可,也有人說可以,因為不確定到底影響在哪裡,所以為了可以順利安裝下去,這邊以選擇 YES 為主。

安裝完畢之後可以執行 Nvidia 提供的工具來看看有無安裝成功。

nvidia-smi

接著安裝下載回來的 CUDA Toolkit 8.0。

sh cuda_8.0.61_375.26_linux.run
sh cuda_8.0.61.2_linux.run

安裝過程中基本上都是依照預設就可以,但是中間會問你要不要安裝它內建的顯卡驅動程式,這邊一定要選 NO,因為你前面已經裝了最新版的顯卡驅動了。詳情可以參考 NVIDIA 的官方文件。
安裝完畢後會出現告警視窗,說你沒有安裝它的驅動程式,無視它就好,接著要設定相關的環境變數路徑,如果不設定的話執行程式會出現找不到 Library 的問題,因為是用 run 來安裝,所以安裝完畢後 cuda 的路徑通常會在 /usr/local/cuda-8.0/bin 底下,記得在要執行程式的使用者帳號底下的 .bashrc 加入以下兩行變數(這邊以 64bit 為主),詳情可以參考 NVIDIA 官方文件的第 6 章(圖截的是 9.0 測試的,但是過程是一樣的)。

vim ~/.bashrc
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

安裝完畢之後可以測試看看 cuda 有沒有安裝成功,首先到剛剛安裝 cuda 的時候會問你 sample 檔案要放在哪裡,預設是你下載 cuda 的位置,以本例來說就是到「 /home/mis/NVIDIA_CUDA-8.0_Samples」,Compiler 之後會出現 bin 的目錄,到底下去,執行相關的測試程式。

cd /home/mis/NVIDIA_CUDA-8.0_Samples
make
cd /home/mis/NVIDIA_CUDA-8.0_Samples/bin
./deviceQuery

如果有安裝成功的話就會顯示「Result = PASS」的字樣,接著要安裝 cuDNN,因為 Tensorflow 目前的版本只支援到 CUDA 8.0,而且後來真的在使用 Tensorflow 的時候發現只裝 CUDA 8.0 根本不夠用,所以就全裝吧。

Download cuDNN v7.0.3 (Sept 28, 2017), for CUDA 9.0
Download cuDNN v7.0.2 (Sept 7, 2017), for CUDA 8.0
Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0

實際跑 Tensorflow 後會發現可能需要用到這 3 樣東西,所以就都先下載下來吧,然後再放到 Server 上解壓縮,要注意目錄名稱不要重複,詳情可以參考 NVIDIA 官方文件的第 2 章。

tar –zxvf cudnn-9.0-linux-x64-v7.tgz
cp cuda/include/cudnn.h /usr/local/cuda/include
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn.h
chmod a+r /usr/local/cuda/lib64/libcudnn*

如果之後執行 tensorflow 的時候有出現「ImportError: libcudart.so.6.0: cannot open shared object file: No such file or directory」,就補安裝剛剛下載下來的舊版 Library 就好(例如: cuDNN v6.0)
接著來測試看看 cuDNN 有沒有裝成功,這邊是個滿詭異的情況,因為官方文件使用 tar 來安裝的話就沒有地方可以單獨下載測試文件,而測試文件卻只有包在 deb 檔案裏面,變成你還要額外下載 deb 檔案下來並且安裝才行,但是要注意不要下載到 runtime 的 deb 檔案,下載測試用的 sample 就好並且安裝。

dpkg -i libcudnn7-doc_7.0.3.11-1+cuda9.0_amd64.deb

安裝後會出現 /usr/src/cudnn_samples_v7 的目錄,把這個目錄 CP 到自己的家目錄底下,並且 Compiler 和執行。

cp -r /usr/src/cudnn_samples_v7 ~/
cd ~/cudnn_samples_v7/mnistCUDNN/
make clean && make
./mnistCUDNN

如果都成功的話會顯示「Test passed」的字樣。

到這邊第一部分準備完成,可以進行第二部分 Tensorflow 主程式的安裝囉。

第二部分  Tensorflow GPU 版安裝(Part 2 Install Tensorflow with GPU)

OS: Ubuntu 16.04.03 LTS (Server Version)
Python: 3.5.2
Tensorflow: 1.3.0
Graphics Card: Nvidia Tesla P100
Graphics Card Driver: NVIDIA-Linux-x86_64-384.81.run
CUDA Version: cuda_8.0.61_375.26_linux & cuda_8.0.61.2_linux (20171020 時測試只能用 cuda 8),cuda_9.0.176_384.81_linux (因 Tensorflow 1.3.0 尚未支援 cuda 9)
cuDNN Version: cudnn-9.0-linux-x64-v7.tgz
Test Package: libcudnn7-doc_7.0.3.11-1+cuda9.0_amd64.deb

首先是安裝和更新相關套件的版本。

apt-get install -y python-pip python-dev python-virtualenv # for Python 2.7
apt-get install -y python3-pip python3-dev python-virtualenv # for Python 3.X

再來是利用 python 的虛擬環境來建立 tensorflow 的運作環境。

virtualenv –system-site-packages targetDirectory # for Python 2.7
virtualenv –system-site-packages -p python3 targetDirectory # for Python 3.X

上面紅色的安裝路徑可以由自己來決定,沒有強制規定一定要放在哪裡,以本例來說是放在 /opt/tensorflow 下,你沒特別指定的話,預設是你目前操作的使用者帳號的家目錄底下。

安裝完畢後就可以啟動 tensorflow 的執行環境了。

source /opt/tensorflow/bin/activate

可以看到你的命令提示字元前面多了一個「(tensorflow)」,代表已經啟用了。安裝完畢後可以先更新套件一下。(注意下面的指令需要在有「(tensorflow)」的時候使用才行)。

(tensorflow)$ pip install –upgrade tensorflow-gpu # for Python 2.7 and GPU
(tensorflow)$ pip3 install –upgrade tensorflow-gpu # for Python 3.n and GPU

可以開始來測試看看有沒有正常運作,先輸入以下指令。

(tensorflow)$ python

然後依序輸入以下指令後你會看到程式回傳給你「’Hello, TensorFlow’」的字樣代表是有正常在運作的。

import tensorflow as tf
hello = tf.constant(‘Hello, TensorFlow!’)
sess = tf.Session()
print(sess.run(hello))

要離開 tensorflow 的執行環境的話就輸入:

(tensorflow)$ deactivate

(首圖來源:shutterstock)

延伸閱讀: