在搭建深度學(xué)習(xí)機(jī)器之后,我們下一步要做的就是構(gòu)建完整的開(kāi)發(fā)環(huán)境了。本文將向你解釋如何在一臺(tái)新裝的 Ubuntu 機(jī)器上安裝 Python 和 Nvidia 硬件驅(qū)動(dòng)、各類(lèi)庫(kù)和軟件包。
為了進(jìn)行強(qiáng)化學(xué)習(xí)研究,我最近購(gòu)置了一臺(tái)基于 Ubuntu 和英偉達(dá) GPU 的深度學(xué)習(xí)機(jī)器。盡管目前在網(wǎng)絡(luò)中能找到一些環(huán)境部署指南,但目前仍然沒(méi)有全面的安裝說(shuō)明。另外,我也不得不閱讀了很多文檔來(lái)試圖理解安裝細(xì)節(jié)——其中的一些并不完整,甚至包含語(yǔ)法錯(cuò)誤。因此,本文試圖解決這個(gè)問(wèn)題,提供一個(gè)詳盡的軟件環(huán)境安裝指南。
本文將指導(dǎo)你安裝
操作系統(tǒng)(Ubuntu)
4 種驅(qū)動(dòng)和庫(kù)(GPU 驅(qū)動(dòng)、CUDA、cuDNN 和 pip)
5 種 Python 深度學(xué)習(xí)庫(kù)(TensorFlow、Theano、CNTK、Keras 和 PyTorch)
這些軟件之間的互相依賴(lài)關(guān)系如下圖所示。其中,你只需要安裝一種深度學(xué)習(xí)庫(kù),請(qǐng)自由選擇。
深度學(xué)習(xí)軟件安裝和依賴(lài)示意圖
以下是各個(gè)軟件的細(xì)節(jié)介紹:
Ubuntu(v16.04.3)——操作系統(tǒng),各種任務(wù)處理。
Nvidia GPU 驅(qū)動(dòng)(v375)——允許系統(tǒng)獲得 GPU 帶來(lái)的加速。
CUDA(v8.0)——GPU C 語(yǔ)言庫(kù)?!赣?jì)算同一設(shè)備架構(gòu)」。
cuDNN(v6.0.21)——基于 CUDA 的深度學(xué)習(xí)基元庫(kù)。「CUDA 深度學(xué)習(xí)庫(kù)」。
pip(v9.0.1)——Python 安裝包?!窹ip 安裝包」。
TensorFlow(v1.3)——谷歌開(kāi)發(fā)的深度學(xué)習(xí)框架。
Theano(v0.9.0)——此前由 MILA 負(fù)責(zé)維護(hù)的深度學(xué)習(xí)框架。
CNTK(v2.2)——微軟研究院開(kāi)發(fā)的深度學(xué)習(xí)框架。
Keras(v2.0.8)——深度學(xué)習(xí)包裝可互換后端。可與 TensorFlow、Theano 和 CNTK 共同使用。
PyTorch(v0.2.0)——可被 GPU 加速的動(dòng)態(tài)圖深度學(xué)習(xí)框架,主要由 Facebook 的研究人員負(fù)責(zé)開(kāi)發(fā)。
1. 安裝 Ubuntu 16.04.3
v 16.04.3 可由 USB 啟動(dòng)的方式安裝,它是最新的 LTS(長(zhǎng)期支持)版本。首次在電腦上啟用時(shí),請(qǐng)?jiān)?BIOS 中選擇由 USB 引導(dǎo)啟動(dòng)。
我的電腦中有兩塊硬盤(pán)——一塊 1TB 的 SATA 和一塊 256GB 的 SSD。在我的設(shè)想中,Ubuntu 被安裝在常規(guī)硬盤(pán)中,固態(tài)硬盤(pán)(SSD)用于處理數(shù)據(jù)集和加速訓(xùn)練。在安裝過(guò)程中,在屏幕中的 Installation Type 中選擇 Something else,隨后我們要進(jìn)行三個(gè)分區(qū)操作:
引導(dǎo)分區(qū)(128GB):包含系統(tǒng)文件、程序設(shè)置和文檔。
交換分區(qū)(2 倍的內(nèi)存大小):對(duì)于我來(lái)說(shuō)這就是 128GB。這塊分區(qū)的容量用于擴(kuò)展 Kernel RAM 作為虛擬內(nèi)存使用。
用戶(hù)分區(qū)(剩下的部分):1TB 的硬盤(pán)剩下的空間大約還有 744GB。
在安裝后,最好先運(yùn)行以下命令來(lái)升級(jí)內(nèi)核版本。
sudo apt-get update
sudo apt-get upgrade
Reference:https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0
2. 安裝英偉達(dá) GPU 驅(qū)動(dòng)
在安裝完 Ubuntu 后,你可能會(huì)發(fā)現(xiàn)屏幕的分辨率不對(duì),而且不能修改,這是因?yàn)楝F(xiàn)在還沒(méi)有安裝 GPU 驅(qū)動(dòng)。
安裝驅(qū)動(dòng)有兩種方法:從 Ubuntu 資源庫(kù)和數(shù)據(jù)源。第一個(gè)方法更加容易,但需要頻繁的重新安裝。使用 sudo apt-get update 和 sudo apt-get upgrade 指令后,系統(tǒng)的內(nèi)核可以自動(dòng)升級(jí)。但這樣并不會(huì)更新英偉達(dá)驅(qū)動(dòng),可能會(huì)導(dǎo)致 GUI 無(wú)法正確加載。從數(shù)據(jù)源安裝可以避免這個(gè)問(wèn)題。
從安裝包里安裝 v375 驅(qū)動(dòng)(簡(jiǎn)單的方法)
以下命令會(huì)將與你系統(tǒng)相兼容的驅(qū)動(dòng)版本顯示出來(lái),它會(huì)提供兩個(gè)版本號(hào):最新的不穩(wěn)定版和長(zhǎng)期穩(wěn)定版。版本號(hào)會(huì)從頭列起,所以你需要把頁(yè)面滾到最上面。
sudo add-apt-repository ppa:graphics-drivers/ppa
添加并安裝資源庫(kù)。通過(guò)第二個(gè)命令,改變你想要安裝的
sudo apt-get update
sudo apt-get install nvidia-driver_number>
重啟計(jì)算機(jī)以重新配置視頻輸出。
sudo shutdown -r now
要測(cè)試驅(qū)動(dòng)程序是否工作,Screen Display(SUPERKEY,屏幕顯示類(lèi)型)現(xiàn)在應(yīng)該可以識(shí)別你使用的顯示器了,你可以修改設(shè)置、分辨率與方向。
Reference:https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
從英偉達(dá)網(wǎng)站安裝 v384.90(較難的方法)
從英偉達(dá)網(wǎng)站下載最新的驅(qū)動(dòng)程序版本。基于硬件配置,我選擇的選項(xiàng)是:
GeForce -> GeForce 10 Series -> GeForce GTX 1080 -> Linux 64 bit -> English (UK)
可選條件:編譯到 32 位架構(gòu)和 GUI 的開(kāi)發(fā)版本。
sudo apt-get install gcc-multilib xorg-dev
按 CTRL + ALT + F1 鍵登錄,從 GUI 轉(zhuǎn)至終端。為了重建視頻輸出,必須先將其暫停。
sudo service lightdm stop
如果命令行沒(méi)有效果,Ubuntu 新版本使用 systemctl 替換 lightdm。然后使 runfile 可執(zhí)行,并運(yùn)行它。
cd download location>
chmod +x NVIDIA-Linux-x86_64-384.90.run
sudo ./NVIDIA-Linux-x86_64-384.90.run --dkms
運(yùn)行時(shí),你可能會(huì)收到一條 pre-install script failed 信息。這沒(méi)什么影響,因?yàn)轭A(yù)安裝腳本包含命令 exit 1,其目標(biāo)是確保你真的想安裝驅(qū)動(dòng)程序。
選項(xiàng)--dkms(默認(rèn)開(kāi)啟)在 kernel 自行更新時(shí)將驅(qū)動(dòng)程序安裝至模塊中,從而阻止驅(qū)動(dòng)程序重新安裝。在 kernel 更新期間,dkms 觸發(fā)驅(qū)動(dòng)程序重編譯至新的 kernel 模塊堆棧。
如果安裝失敗,則原因在于計(jì)算機(jī)的 BIOS 未關(guān)閉 Secure Boot。重啟電腦,在 BIOS 選項(xiàng)中關(guān)閉 Secure Boot。
如果安裝成功,則可以重啟 GUI。
sudo service lightdm start
卸載:sudo ./NVIDIA-Linux-x86_64-384.90.run --uninstall
驗(yàn)證
確保以下命令能夠識(shí)別正確的 GPU 版本
nvidia-smi
確保驅(qū)動(dòng)程序版本號(hào)與你安裝的一致
cat /proc/driver/nvidia/version
3. 安裝 CUDA 8.0
從英偉達(dá)網(wǎng)站,使用下列系統(tǒng)屬性下載 CUDA 的 runfile(地址:https://developer.nvidia.com/cuda-downloads)。
Linux -> x86_64 -> Ubuntu -> 16.04 -> .deb(network)
導(dǎo)航至.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
將庫(kù)添加至 bash path,這樣就可以使用其他應(yīng)用找到庫(kù)了。
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
驗(yàn)證時(shí),使用 nvcc -V 確保 Nvidia C Compiler(nvcc)版本與 CUDA 的版本匹配。
重啟電腦 sudo shutdown -r now,完成安裝。
可選操作:測(cè)試 CUDA 安裝
測(cè)試安裝的一個(gè)方法是運(yùn)行一些示例。以下命令行創(chuàng)建了一個(gè)存儲(chǔ)示例程序的 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 列包含了英偉達(dá)驅(qū)動(dòng)程序的硬編碼值,該值應(yīng)從 367 更改成你安裝的驅(qū)動(dòng)程序版本號(hào)。
編譯示例
cd ../.. && make
你現(xiàn)在可以在 NVIDIA_CUDA-8.0_Samples 內(nèi)隨意運(yùn)行示例。你可以在 NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release 中找到兩個(gè)非常有用的腳本:./deviceQuery 可以在使用過(guò)程中打印 GPU,./bandwidthTest 可以打印它的帶寬。
Reference:http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
4. 安裝 cuDNN 6.0.21
在英偉達(dá)網(wǎng)站上注冊(cè)開(kāi)發(fā)者項(xiàng)目,同意條款。從下拉菜單中選擇 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 優(yōu)先于.tar,因?yàn)?deb 格式更適用于 Ubuntu,可以進(jìn)行更純凈的安裝。使用下列命令安裝這三個(gè)包:
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
測(cè)試 cuDNN
將已安裝的示例復(fù)制到可讀目錄,然后編譯并運(yùn)行 mnistCNN。
cp -r /usr/src/cudnn_samples_v6/ $HOME
cd $HOME/cudnn_samples_v6/mnistCUDNN
make clean && make
./mnistCUDNN
如果一切順利,腳本應(yīng)該會(huì)返回一條 Test passed! 消息。
卸載 cudnn
使用以下命令卸載三個(gè)庫(kù)。另外,如果你已經(jīng)創(chuàng)建了樣本,那么再加上 rm -r ~/cudnn_samples_v6。
sudo apt-get remove libcudnn6
sudo apt-get remove libcudnn6-dev
sudo apt-get remove libcudnn6-doc
Reference:cuDNN Installation Guide cuDNN Installation Guide(http://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html)
5. 安裝 pip 9.0.1
Pip 的升級(jí)非常頻繁,幾乎每?jī)芍芤淮?,建議使用最新版本的 pip。
請(qǐng)使用以下命令安裝和升級(jí)最新版本的 pip。
sudo apt-get install python-pip python-dev
sudo pip install --upgrade pip
驗(yàn)證:請(qǐng)確保鍵入 pip -V 后可以打印出版本號(hào)。
6. 安裝 Tensorflow 1.3.0
pip install tensorflow-gpu
驗(yàn)證:?jiǎn)?dòng)$ python,確認(rèn)是否以下腳本能夠打印出 Hello, Tensorflow!
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
Reference:https://www.tensorflow.org/install/install_linux
7. 安裝 Theano 0.10
Theano 需要的系統(tǒng)環(huán)境:
sudo apt-get install libopenblas-dev cmake git
此外還要遵循 Python 的系統(tǒng)需求。
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
將其編譯為一個(gè)名為 Build 的文件夾。
mkdir Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install
隨后將其編譯成一個(gè) Python 包。
cd ..
python setup.py build
sudo python setup.py install
將下面一行添加至 ~/.bashrc,這樣 Python 就可以找到庫(kù)了。
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
最后,安裝 Theano
sudo pip install git+https://github.com/Theano/Theano.git#egg=Theano
驗(yàn)證:創(chuàng)建測(cè)試文件 test_theano.py,其中的內(nèi)容復(fù)制自:http://deeplearning.net/software/theano/tutorial/using_gpu.html#testing-theano-with-GPU
隨后看看 THEANO_FLAGS=device=cuda0 python test_theano.py 在使用了 GPU 之后是否成功。
Reference: Theano 0.9.0 documentation(http://deeplearning.net/software/theano/install_ubuntu.html)
8. 安裝 CNTK 2.2
sudo pip install https://cntk.ai/PythonWheel/GPU/cntk-2.2-cp27-cp27mu-linux_x86_64.whl
驗(yàn)證:輸入 python -c 'import cntk; print(cntk.__version__)',輸出 2.2。
Reference: Setup CNTK on your machine(https://docs.microsoft.com/en-us/cognitive-toolkit/setup-cntk-on-your-machine)
9. 安裝 Keras 2.0.8
sudo pip install keras
驗(yàn)證:檢查$ python 中的 import keras 是否成功。
Reference: Keras Installation(https://keras.io/#installation)
10. 安裝 PyTorch 0.2.0
PyTorch 運(yùn)行在兩個(gè)庫(kù)上: torchvision 和 torch,我們需要這樣安裝:
sudo pip install http://download.pytorch.org/whl/cu80/torch-
0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl
sudo pip install torchvision
驗(yàn)證:以下腳本能夠打印出一個(gè)帶有隨機(jī)初始浮點(diǎn)數(shù)的張量。
from __future__ import print_function
import torch
x = torch.Tensor(5, 3)
print(x)
Reference: http://pytorch.org/
結(jié)論
目前為止,整個(gè)過(guò)程中最難的部分是找出 Nvidia 驅(qū)動(dòng)和深度學(xué)習(xí)包之間的依賴(lài)關(guān)系,以及最有效的長(zhǎng)期安裝過(guò)程。而最簡(jiǎn)單的部分是安裝 Python,安裝包和文檔都得到了良好的維護(hù)。
雖然閱讀文檔和源代碼都非常耗費(fèi)時(shí)間,但了解每個(gè)軟件包的構(gòu)建和功能是非常具有啟發(fā)性的,它也可以幫助我們理解整個(gè) Ubuntu 生態(tài)系統(tǒng)。
希望本文對(duì)你有所幫助。
原文鏈接:https://medium.com/@dyth/deep-learning-software-installation-guide-d0a263714b2
聯(lián)系客服