460
魔獸
深度學習軟件安裝指南
由於即將要開始撰寫強化學習論文,所以我最近搭建了一個基於Ubuntu和Nvidia的深度學習計算機。雖然在深度學習方麵有很多不錯的教程,但卻無法找到一篇完整的安裝說明。我不得不閱讀大量的文檔來了解細節和規範,其中一些不完整或者存在語法錯誤。因此,我決定把我所做的所有工作進行整理並記錄下來。
該指南將告訴你如何進行安裝:
- 操作係統(Ubuntu)
- 4個驅動程序和庫(GPU驅動程序、CUDA、cuDNN和pip)
- 5個Python深度學習庫(TensorFlow、Theano、CNTK、Keras和PyTorch)
下圖展示了每個包之間的依賴關係。由於隻需要安裝一個Python深度學習庫,因此你可以隨意選擇所需的部分。
每個組件更詳細的用途說明:
- ** Ubuntu **(v16.04.3) - 操作係統,進程調度。
- ** Nvidia GPU驅動程序**(v375) - 使操作係統能夠操作GPU。
- ** CUDA **(v8.0) - GPU C庫。代表計算統一設備架構。
- ** cuDNN **(v6.0.21) - 基於CUDA的深度學習基元庫。代表CUDA深度神經網絡。
- ** pip **(v9.0.1) - Python包安裝程序。
- ** TensorFlow **(v1.3) - 由Google開發的深度學習庫。
- ** Theano **(v0.9.0) - 在GPU上運行的數學庫。
- ** CNTK **(v2.2) - 由Microsoft Research開發的深度學習框架。
- ** Keras **(v2.0.8)- 深度學習包裝。可與TensorFlow、Theano或CNTK一起使用。
- ** PyTorch **(v0.2.0) - 具有GPU加速的動態深度學習庫。
1. 安裝 Ubuntu 16.04.3
本章節所示的安裝步驟將覆蓋已有的分區或操作係統,安裝一個**幹淨的操作係統**。
由於v 16.04.3是最新的LTS(長期支持)版本,因此它可以安裝在可啟動的USB上。首次打開計算機電源時,通過訪問引導菜單並選擇USB從USB引導。
我的計算機有兩個硬盤,1TB的SATA和256GB的SSD。在我的搭建計劃中,Ubuntu安裝在1TB的硬盤中,這樣SSD就可以用於存放數據集,加快訓練速度。在安裝過程中,屏幕顯示Installation Type
時,我選擇了Something else
,這一步將創建以下三個分區。
引導分區(128GB):包含係統文件、程序設置和文檔。
交換分區(2xRAM大小):對我來說,這是128GB。用於擴展內核RAM作為虛擬內存使用。
用戶分區(剩餘的):我的1TB硬盤驅動器的可用空間為744GB。
安裝完成後,運行以下命令升級內核版本。
sudo apt-get update
sudo apt-get upgrade
2. 安裝Nvidia GPU驅動程序
安裝Ubuntu後,你可能會注意到屏幕分辨率不正確,而且無法更改。這是因為來自GPU的視頻輸出沒有驅動程序,也沒有配置。
有兩種方法來安裝驅動程序,從某個**Ubuntu的資源庫**安裝,或者從**源**安裝。第一種方法更容易,但需要頻繁重新安裝。當調用命令sudo apt-get update
和sudo apt-get upgrade
時,會更新內核。這不會更新Nvidia驅動程序,並將導致GUI無法正確加載。而從源安裝則可以避免這個問題。
從包裝安裝v375(更容易)
以下命令將列出與係統兼容的驅動程序版本。它將給出兩個數字:最新版本和長期版本號。這個命令將從最早的版本開始列出,所以一定要向上滾動屏幕。
sudo add-apt-repository ppa:graphics-drivers/ppa
添加並安裝資源庫。在第二個命令中,將<driver_number>
更改為要安裝的版本。建議安裝最新的長期支持版本:375。
sudo apt-get updatesudo apt-get install nvidia-<driver_number>
重新啟動計算機並重新配置視頻輸出參數。
sudo shutdown -r now
Screen Display(屏幕顯示)現在應該能夠正確識別使用的顯示器了,要測試驅動程序是否能正常工作,你可以更改顯示配置、分辨率和方向。
從Nvidia源安裝v384.90(更難)
從Nvidia網站下載最新的驅動程序。對我而言,我選擇的選項是:
GeForce -> GeForce 10 係列 -> GeForce GTX 1080 -> Linux 64位 -> 英語(英國)
可以選擇編譯為32位架構,以及開發版本的GUI。
sudo apt-get install gcc-multilib xorg-dev
按CTRL + ALT + F1
並登錄。這將從GUI切換到終端。為了重建視頻輸出,必須首先停止GUI。
sudo service lightdm stop
如果該命令不起作用,那麼說明Ubuntu的新版本使用的是systemctl
而不是lightdm
。然後給這個程序賦予可執行權限並運行它。
cd <download location>
chmod +x NVIDIA-Linux-x86_64-384.90.run
sudo ./NVIDIA-Linux-x86_64-384.90.run --dkms
運行時,你可能會收到pre-install script failed(預安裝腳本失敗)
的消息。這並不重要,因為預安裝腳本包含一個命令:exit 1
。其目的隻是為了確保你真的要安裝驅動程序。
選項--dkms
(默認情況下應該是這個選項)在內核通過將驅動程序安裝到一個模塊中來更新自身時,會阻止重新安裝驅動程序。在內核更新期間,dkms觸發驅動程序重新編譯到新的內核模塊堆棧。
如果安裝失敗,那是因為Secure Boot
沒有在計算機的BIOS中禁用。重新啟動計算機並在BIOS選項中禁用Secure Boot
。
如果安裝成功,則可以重新啟動GUI了。
sudo service lightdm start
卸載:sudo ./NVIDIA-Linux-x86_64-384.90.run --uninstall
驗證
確保以下命令能夠識別正確的GPU版本
nvidia-smi
確保驅動程序版本號就是你所安裝的版本號
cat /proc/driver/nvidia/version
3. 安裝CUDA 8.0
從Nvidia網站下載CUDA的運行文件,使用以下係統屬性:
Linux -> x86_64 -> Ubuntu -> 16.04 -> .deb(網絡)
瀏覽.deb
文件的存放位置,卸載.deb
,更新軟件包列表並使用以下命令安裝CUDA。
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
將庫添加到bash路徑中,以便可以讓其他應用程序找到。
echo 'export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
要進行**驗證**,執行nvcc -V
以檢查 Nvidia C 編譯器版本(nvcc)與CUDA所使用的編譯器版本一致。
重新啟動計算機sudo shutdown -r now
來完成安裝。
可選:測試CUDA安裝
測試安裝的方法是**運行一些例程**。以下命令將創建一個名為test_CUDA
的目錄,其中會存儲示例程序。
mkdir test_CUDA
cd test_CUDA
./cuda-install-samples-8.0.sh
子目錄NVIDIA_CUDA-8.0_Samples/3_Imaging/cudaDecodeGL
中存放了文件findgllib.mk
。該文件在第61行第30列包含了Nvidia驅動程序的硬編碼值,該值應從367更改為先前安裝的驅動程序版本號。
編譯例程
cd ../.. && make
你現在可以在NVIDIA_CUDA-8.0_Samples
中運行例程了。 NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
中有兩個特別有用的腳本。 ./deviceQuery
能打印出正在使用的GPU,./bandwidthTest
能打印出GPU的帶寬。
4. 安裝 cuDNN 6.0.21
在Nvidia網站上注冊開發人員計劃並同意條款。從下拉菜單**cuDNN v6.0.21 (April 27, 2017), for CUDA 8.0** 下載:
- cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
- cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
- cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)
.deb
優於.tar
,因為這個格式專門為Ubuntu設計,安裝過程更加清晰。這三個軟件包可以使用以下命令進行安裝:
sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb
sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb
測試 cuDNN
將安裝的例程複製到可讀目錄中,編譯並運行mnistCNN
。
cp -r /usr/src/cudnn_samples_v6/ $HOME
cd $HOME/cudnn_samples_v6/mnistCUDNN
make clean && make
./mnistCUDNN
如果一切順利,腳本應該返回Test passed!
卸載 cudnn
以下命令將卸載這三個庫。另外,如果你已經創建了例程,那麼另外還有執行rm -r〜/ cudnn_samples_v6
。
sudo apt-get remove libcudnn6
sudo apt-get remove libcudnn6-dev
sudo apt-get remove libcudnn6-doc
5. 安裝 pip 9.0.1
pip本身的更新非常頻繁,每兩周一次。建議使用最新的pip。
以下命令將進行安裝並升級到最新版本。
sudo apt-get install python-pip python-dev
sudo pip install --upgrade pip
要進行**驗證**,確保pip -V
能打印出版本號。
6. 安裝 Tensorflow 1.3.0
pip install tensorflow-gpu
要進行**驗證**,啟動python,執行$ python,
並確保以下腳本能打印出Hello, TensorFlow!
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
7. 安裝 Theano 0.10
Theano需要以下係統依賴關係
sudo apt-get install libopenblas-dev
和以下Python依賴關係。
sudo pip install numpy scipy nose sphinx pydot-ng `pycuda scikit-cuda cython`
libgpuarray
讓Theano能夠使用GPU,它必須從源代碼進行編譯。首先下載源代碼
git clone https://github.com/Theano/libgpuarray.git
cd libgpuarray
在一個名為Build的文件夾中進行編譯。
mkdir Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install
然後編譯成一個python包
cd ..
`python setup.py build
sudo python setup.py install`
將下麵這一行添加到~/.bashrc
中,以便Python可以找到這個庫。
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
最後,安裝Theano
sudo pip install git+https://github.com/Theano/Theano.git#egg=Theano
要進行**驗證**,首先創建一個測試文件test_theano.py
, 其內容可以從這裏複製過去。然後確保THEANO_FLAGS = device = cuda0 python test_theano.py
能成功輸出Used the gpu
。
8. 安裝 CNTK 2.2
sudo pip install https://cntk.ai/PythonWheel/GPU/cntk-2.2-cp27-cp27mu-linux_x86_64.whl
要進行**驗證**,確保python -c "import cntk; print(cntk.__version__)"
能打印出2.2
。
9. 安裝 Keras 2.0.8
sudo pip install keras
要進行**驗證**,檢查$ python
中的import keras
是否成功了。
10. 安裝 PyTorch 0.2.0
PyTorch的運行依賴torchvision
和torch
這兩個庫,下麵將進行安裝。
sudo pip install https://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl
sudo pip install torchvision
要進行**驗證**,以下腳本應該能打印出一個張量。
from __future__ import print_function
import torch
x = torch.Tensor(5, 3)
print(x)
結論
到目前為止,整個過程中最難的部分是找到Nvidia驅動程序和深度學習軟件包之間的依賴關係,以及最有效的長期支持版本的安裝過程。最簡單的部分是安裝Python包,這些包維護得非常好,而且文檔詳細。
雖然閱讀文檔和源代碼非常耗時,但是了解每個軟件包的構建和運行情況非常有啟發性,它能夠幫助我了解整個Ubuntu生態係統。
文章原標題《Deep Learning Software Installation Guide》,作者:dyth,譯者:夏天,審校:主題曲。
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-10-05 10:33:18