從零開始:深度學習軟體環境安裝指南

路雪發表於2017-10-02
在搭建深度學習機器之後,我們下一步要做的就是構建完整的開發環境了。本文將向你解釋如何在一臺新裝的 Ubuntu 機器上安裝 Python 和 Nvidia 硬體驅動、各類庫和軟體包。

為了進行強化學習研究,我最近購置了一臺基於 Ubuntu 和英偉達 GPU 的深度學習機器。儘管目前在網路中能找到一些環境部署指南,但目前仍然沒有全面的安裝說明。另外,我也不得不閱讀了很多文件來試圖理解安裝細節——其中的一些並不完整,甚至包含語法錯誤。因此,本文試圖解決這個問題,提供一個詳盡的軟體環境安裝指南。

本文將指導你安裝

  • 作業系統(Ubuntu)
  • 4 種驅動和庫(GPU 驅動、CUDA、cuDNN 和 pip)
  • 5 種 Python 深度學習庫(TensorFlow、Theano、CNTK、Keras 和 PyTorch)

這些軟體之間的互相依賴關係如下圖所示。其中,你只需要安裝一種深度學習庫,請自由選擇。

從零開始:深度學習軟體環境安裝指南

深度學習軟體安裝和依賴示意圖

以下是各個軟體的細節介紹:

  1. Ubuntu(v16.04.3)——作業系統,各種任務處理。
  2. Nvidia GPU 驅動(v375)——允許系統獲得 GPU 帶來的加速。
  3. CUDA(v8.0)——GPU C 語言庫。「計算同一裝置架構」。
  4. cuDNN(v6.0.21)——基於 CUDA 的深度學習基元庫。「CUDA 深度學習庫」。
  5. pip(v9.0.1)——Python 安裝包。「Pip 安裝包」。
  6. TensorFlow(v1.3)——谷歌開發的深度學習框架。
  7. Theano(v0.9.0)——此前由 MILA 負責維護的深度學習框架。
  8. CNTK(v2.2)——微軟研究院開發的深度學習框架。
  9. Keras(v2.0.8)——深度學習包裝可互換後端。可與 TensorFlow、Theano 和 CNTK 共同使用。
  10. PyTorch(v0.2.0)——可被 GPU 加速的動態圖深度學習框架,主要由 Facebook 的研究人員負責開發。

1. 安裝 Ubuntu 16.04.3

v 16.04.3 可由 USB 啟動的方式安裝,它是最新的 LTS(長期支援)版本。首次在電腦上啟用時,請在 BIOS 中選擇由 USB 引導啟動。

我的電腦中有兩塊硬碟——一塊 1TB 的 SATA 和一塊 256GB 的 SSD。在我的設想中,Ubuntu 被安裝在常規硬碟中,固態硬碟(SSD)用於處理資料集和加速訓練。在安裝過程中,在螢幕中的 Installation Type 中選擇 Something else,隨後我們要進行三個分割槽操作:

  • 引導分割槽(128GB):包含系統檔案、程式設定和文件。
  • 交換分割槽(2 倍的記憶體大小):對於我來說這就是 128GB。這塊分割槽的容量用於擴充套件 Kernel RAM 作為虛擬記憶體使用。
  • 使用者分割槽(剩下的部分):1TB 的硬碟剩下的空間大約還有 744GB。

在安裝後,最好先執行以下命令來升級核心版本。

  1. sudo apt-get update

  2. sudo apt-get upgrade

Reference:https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop#0

2. 安裝英偉達 GPU 驅動

在安裝完 Ubuntu 後,你可能會發現螢幕的解析度不對,而且不能修改,這是因為現在還沒有安裝 GPU 驅動。

安裝驅動有兩種方法:從 Ubuntu 資源庫和資料來源。第一個方法更加容易,但需要頻繁的重新安裝。使用 sudo apt-get update 和 sudo apt-get upgrade 指令後,系統的核心可以自動升級。但這樣並不會更新英偉達驅動,可能會導致 GUI 無法正確載入。從資料來源安裝可以避免這個問題。

從安裝包裡安裝 v375 驅動(簡單的方法)

以下命令會將與你係統相相容的驅動版本顯示出來,它會提供兩個版本號:最新的不穩定版和長期穩定版。版本號會從頭列起,所以你需要把頁面滾到最上面。

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

新增並安裝資源庫。透過第二個命令,改變你想要安裝的<driver_number>。我們在這裡推薦安裝最新的長期穩定版本——375 版。

  1. sudo apt-get update

  2. sudo apt-get install nvidia-<driver_number>

重啟計算機以重新配置影片輸出。

  1. sudo shutdown -r now

要測試驅動程式是否工作,Screen Display(SUPERKEY,螢幕顯示型別)現在應該可以識別你使用的顯示器了,你可以修改設定、解析度與方向。

Reference:https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

從英偉達網站安裝 v384.90(較難的方法)

從英偉達網站下載最新的驅動程式版本。基於硬體配置,我選擇的選項是:

GeForce -> GeForce 10 Series -> GeForce GTX 1080 -> Linux 64 bit -> English (UK)

可選條件:編譯到 32 位架構和 GUI 的開發版本。

  1. sudo apt-get install gcc-multilib xorg-dev

按 CTRL + ALT + F1 鍵登入,從 GUI 轉至終端。為了重建影片輸出,必須先將其暫停。

  1. sudo service lightdm stop

如果命令列沒有效果,Ubuntu 新版本使用 systemctl 替換 lightdm。然後使 runfile 可執行,並執行它。

  1. cd <download location>

  2. chmod +x NVIDIA-Linux-x86_64-384.90.run

  3. sudo ./NVIDIA-Linux-x86_64-384.90.run --dkms

執行時,你可能會收到一條 pre-install script failed 資訊。這沒什麼影響,因為預安裝指令碼包含命令 exit 1,其目標是確保你真的想安裝驅動程式。

選項--dkms(預設開啟)在 kernel 自行更新時將驅動程式安裝至模組中,從而阻止驅動程式重新安裝。在 kernel 更新期間,dkms 觸發驅動程式重編譯至新的 kernel 模組堆疊。

如果安裝失敗,則原因在於計算機的 BIOS 未關閉 Secure Boot。重啟電腦,在 BIOS 選項中關閉 Secure Boot。

如果安裝成功,則可以重啟 GUI。

  1. sudo service lightdm start

解除安裝:sudo ./NVIDIA-Linux-x86_64-384.90.run --uninstall

驗證

確保以下命令能夠識別正確的 GPU 版本

  1. nvidia-smi

確保驅動程式版本號與你安裝的一致

  1. cat /proc/driver/nvidia/version

3. 安裝 CUDA 8.0

從英偉達網站,使用下列系統屬性下載 CUDA 的 runfile(地址:https://developer.nvidia.com/cuda-downloads)。

Linux -> x86_64 -> Ubuntu -> 16.04 -> .deb(network)

導航至.deb 檔案的位置後,將該檔案解壓縮,更新軟體包列表,使用下列命令安裝 CUDA。

  1. sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb

  2. sudo apt-get update

  3. sudo apt-get install cuda

將庫新增至 bash path,這樣就可以使用其他應用找到庫了。

  1. echo 'export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}' >> ~/.bashrc

  2. echo 'export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc

  3. source ~/.bashrc

驗證時,使用 nvcc -V 確保 Nvidia C Compiler(nvcc)版本與 CUDA 的版本匹配。

重啟電腦 sudo shutdown -r now,完成安裝。

可選操作:測試 CUDA 安裝

測試安裝的一個方法是執行一些示例。以下命令列建立了一個儲存示例程式的 test_CUDA 目錄。

  1. mkdir test_CUDA

  2. cd test_CUDA

  3. ./cuda-install-samples-8.0.sh .

子目錄 NVIDIA_CUDA-8.0_Samples/3_Imaging/cudaDecodeGL 中是 findgllib.mk 檔案。該檔案的第 61 行 30 列包含了英偉達驅動程式的硬編碼值,該值應從 367 更改成你安裝的驅動程式版本號。

編譯示例

  1. cd ../.. && make

你現在可以在 NVIDIA_CUDA-8.0_Samples 內隨意執行示例。你可以在 NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release 中找到兩個非常有用的指令碼:./deviceQuery 可以在使用過程中列印 GPU,./bandwidthTest 可以列印它的頻寬。

Reference:http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

4. 安裝 cuDNN 6.0.21

在英偉達網站上註冊開發者專案,同意條款。從下拉選單中選擇 cuDNN v6.0.21 (April 27, 2017), for CUDA 8.0,並下載:

  1. cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
  2. cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
  3. cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)

.deb 優先於.tar,因為.deb 格式更適用於 Ubuntu,可以進行更純淨的安裝。使用下列命令安裝這三個包:

  1. sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb

  2. sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb

  3. sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb

測試 cuDNN

將已安裝的示例複製到可讀目錄,然後編譯並執行 mnistCNN。

  1. cp -r /usr/src/cudnn_samples_v6/ $HOME

  2. cd $HOME/cudnn_samples_v6/mnistCUDNN

  3. make clean && make

  4. ./mnistCUDNN

如果一切順利,指令碼應該會返回一條 Test passed! 訊息。

解除安裝 cudnn

使用以下命令解除安裝三個庫。另外,如果你已經建立了樣本,那麼再加上 rm -r ~/cudnn_samples_v6。

  1. sudo apt-get remove libcudnn6

  2. sudo apt-get remove libcudnn6-dev

  3. 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 的升級非常頻繁,幾乎每兩週一次,建議使用最新版本的 pip。

請使用以下命令安裝和升級最新版本的 pip。

  1. sudo apt-get install python-pip python-dev

  2. sudo pip install --upgrade pip

驗證:請確保鍵入 pip -V 後可以列印出版本號。

6. 安裝 Tensorflow 1.3.0

  1. pip install tensorflow-gpu

驗證:啟動$ python,確認是否以下指令碼能夠列印出 Hello, Tensorflow!

  1. import tensorflow as tf

  2. hello = tf.constant('Hello, TensorFlow!')

  3. sess = tf.Session()

  4. print(sess.run(hello))

Reference:https://www.tensorflow.org/install/install_linux

7. 安裝 Theano 0.10

Theano 需要的系統環境:

  1. sudo apt-get install libopenblas-dev cmake git

此外還要遵循 Python 的系統需求。

  1. sudo pip install numpy scipy nose sphinx pydot-ng pycuda scikit-cuda cython

libgpuarray 可以讓 Theano 使用 GPU,它必須從源編譯。首先下載原始碼

  1. git clone https://github.com/Theano/libgpuarray.git

  2. cd libgpuarray

將其編譯為一個名為 Build 的資料夾。

  1. mkdir Build

  2. cd Build

  3. cmake .. -DCMAKE_BUILD_TYPE=Release

  4. make

  5. sudo make install

隨後將其編譯成一個 Python 包。

  1. cd ..

  2. python setup.py build

  3. sudo python setup.py install

將下面一行新增至 ~/.bashrc,這樣 Python 就可以找到庫了。

  1. export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

最後,安裝 Theano

  1. sudo pip install git+https://github.com/Theano/Theano.git#egg=Theano

驗證:建立測試檔案 test_theano.py,其中的內容複製自: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

  1. 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。

Reference: Setup CNTK on your machine(https://docs.microsoft.com/en-us/cognitive-toolkit/setup-cntk-on-your-machine)

9. 安裝 Keras 2.0.8

  1. sudo pip install keras

驗證:檢查$ python 中的 import keras 是否成功。

Reference: Keras Installation(https://keras.io/#installation)

10. 安裝 PyTorch 0.2.0

PyTorch 執行在兩個庫上: torchvision 和 torch,我們需要這樣安裝:

  1. sudo pip install http://download.pytorch.org/whl/cu80/torch-

  2. 0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl

  3. sudo pip install torchvision

驗證:以下指令碼能夠列印出一個帶有隨機初始浮點數的張量。

  1. from __future__ import print_function

  2. import torch

  3. x = torch.Tensor(5, 3)

  4. print(x)

Reference: http://pytorch.org/

結論

目前為止,整個過程中最難的部分是找出 Nvidia 驅動和深度學習包之間的依賴關係,以及最有效的長期安裝過程。而最簡單的部分是安裝 Python,安裝包和文件都得到了良好的維護。

雖然閱讀文件和原始碼都非常耗費時間,但瞭解每個軟體包的構建和功能是非常具有啟發性的,它也可以幫助我們理解整個 Ubuntu 生態系統。

希望本文對你有所幫助。 

相關文章