1. 程式人生 > >折騰記錄——Ubuntu14.04系統安裝NvidiaCUDA7.5並搭建

折騰記錄——Ubuntu14.04系統安裝NvidiaCUDA7.5並搭建

引言

最近幾天一直嘗試搭建Theano深度學習開發環境,並安裝英偉達CUDA Toolkit。這期間,有想過在Windows上搭建的,但是從網上了解後,發現還是在linux環境下更加合適。在搭建這個開發環境的過程中,其實入了不少坑,有點曲折。本不打算寫搭建過程的,因為網上確實有不少不錯的安裝步驟,以及官網也有安裝教程。But,鑑於被坑了好幾天,還是記錄一下,長長記性 :)
期間安裝Ubuntu 14.04超過4次(原因:有些軟體依賴問題無法解決,更換軟體源貌似也不可以。不過今天把軟體源換成主伺服器後,就正常了,但是我的無線網速度比較慢,所以使用主伺服器後,下載速度明顯要慢了不少。)。
嘗試安裝Fedora

作業系統1次,因為也想過在這個系統上搭建環境的,因為Ubuntu 14.04上面的部分依賴總是搞不定。但是因為網絡卡驅動的問題,始終無法聯網;無法聯網,自然就沒法安裝編譯器,沒有編譯器,沒法安裝網絡卡驅動(因為需要編譯驅動),最後放棄了這個平臺。
嘗試安裝CentOS作業系統1次,其實根本沒有安裝成功,原因是我的獨立顯示卡驅動問題,導致安裝程式的圖形介面上的所有文字都是模糊的,甚至連“退出安裝”按鈕文字我都識別不出來,最後放棄了。

桌上型電腦主要引數

  • 記憶體:金士頓8G
  • 處理器:Intel Core i5-4590 CPU @ 3.3GHz x 4
  • 顯示卡: 英偉達Geforce GTX 750 (GPU並行運算)
  • 硬碟: 西部資料 1TB

安裝Ubuntu 14.04作業系統

  • 製作Ubuntu啟動盤(使用軟碟通寫入到U盤上);
  • 桌上型電腦啟動時,選擇快捷啟動,從U盤啟動Ubuntu live cd系統;
  • 安裝Ubuntu 14.04作業系統;
  • 安裝完畢後重新啟動系統;
  • 啟動系統,在進入Grub介面時,按e鍵,進入編輯頁面,在倒數第二行中,ro quiet splash後面新增nomodeset,這樣進入系統後不會因為獨顯驅動問題而導致黑屏了;
  • 在進入系統後,編輯檔案/boot/grub/grub.cfg檔案,搜尋ro quiet splash關鍵詞,同樣追加nomodeset,這樣不用每次啟動系統前重複上述步驟了。

安裝Theano環境

需要預先安裝的工具

這些工具在後面可能會使用到,如編譯器等。

sudo apt-get install -y python-dev python-pip python-nose gcc g++ git gfortran

安裝BLAS, LAPACK, ATLAS

這些軟體包必須在安裝Numpy和Scipy之前安裝

sudo apt-get install -y libopenblas-dev liblapack-dev libatlas-base-dev

安裝NumPy

在官方教程中使用了apt-get方式安裝的,但是貌似我確實在安裝後沒有通過單元測試,有不少錯誤產生。尤其是後面安裝的SciPy更是如此。可能和我之前沒有把需要的工具包安裝齊全有關係吧。

# 安裝NumPy,這個安裝過程需要等待會,因為需要編譯,所以得花一點時間。
# 實際上後面安裝的SciPy和Theano都會花時間編譯的,整個安裝過程還是要挺久的。
sudo pip install numpy

# 進行測試。
python -c 'import numpy; numpy.test()'

必須要保證上面的測試通過,然後再繼續下一步,確保每一步都是正確的。沒有Errors則通過測試。測試結果如下。

安裝SciPy

# 安裝方法,耐心等待編譯吧:)
sudo pip install scipy

# 進行測試
python -c 'import scipy; scipy.test()'

必須保證scipy也正常通過測試,這樣才可以繼續安裝下面的Theano。測試結果如下圖:

安裝Theano

# 安裝方法,還是要耐心等待編譯安裝的,感覺比較耗時
sudo pip install Theano

# 開始測試
sudo python -c 'import theano; theano.test()'

好吧,我感覺這個步驟中的Theano測試花了好長時間,所以,還是耐心等待吧。最後結果如下。

安裝CUDA Toolkit

下載CUDA Toolkit

在安裝這個英偉達CUDA Toolkit時,還是遇到了不少問題。以下記錄安裝過程,詳細的說明文件參見英偉達官方提供的Installation Guide for Linux。需要注意的是,該安裝檔案已經包含了英偉達較新的顯示卡驅動,所以不用單獨安裝獨顯驅動的。

下載CUDA Toolkit

  • 進入CUDA Toolkit下載頁面

  • 選擇對應的Ubuntu 14.04作業系統,並且選擇下載runfile(1.1G)檔案,同時記錄對應的md5值,用於校驗下載文件有沒有損壞

  • 下載GPU Development Kit

  • 下載完成後,最後校驗一下下載檔案與下載頁面提供的檔案MD5值是否相同,確保下載到的安裝包是完好無損的。

安裝一些需要的庫

  • 下面都是一些可能需要用到的庫,否則在安裝CUDA時,可能會提示缺少需要的庫檔案。

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev  
  • 值得注意的是,我在我的Ubuntu系統/usr/lib/x86_64-linux-gnu/目錄下找到了名為libGLU.so.1.3.1,所以在嘗試建立連結到/usr/lib/目錄下後,安裝Samples時就正常了。

sudo ln -s /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1 /usr/lib/libGLU.so

安裝CUDA

  1. 首先,將X-Window關閉,然後進入字元介面(如tty1)。關閉X-Window方法:sudo service lightdm stop

  2. 接下來,在字元介面中,給下載好的cuda_7.5.18_linux.run以及cuda_352_39_gdk_linux.run新增可執行許可權

  3. 安裝Development Kit:sudo ./cuda_352_39_gdk_linux .run

  4. 安裝CUDA:sudo ./cuda_7.5.18_linux.run,安裝過程直接根據提示進行下去即可

  5. 重新啟動X-Window:sudo service lightdm start

環境變數設定

  • 在終端中輸入下面的命令即可:

echo 'export PATH=/usr/local/cuda-7.5/bin:$PATH' >> ~/.bashrc

echo 'export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

source ~/.bashrc
  • 接下來重啟系統,然後開始驗證安裝的結果。

驗證

檢視NVCC版本

  • nvcc -V,輸出結果如下:

編譯並執行例子

  • 進入到Samples安裝目錄,然後在該目錄下make,等待十來分鐘。

  • 編譯完成後,可以在Samples裡面找到bin/x86_64/linux/release/目錄,並切換到該目錄

  • 執行deviceQuery程式,檢視輸出結果如下(重點關注最後一行,Pass表示通過測試):

  • 執行bandwidthTest程式,檢視輸出結果如下(同樣最後顯示結果為PASS):

綜合測試

這是最後一個環節了,配置Theano使用GPU平行計算,以驗證環境搭建是否成功。

  • 首先將下面的測試程式碼複製到文字中,命名為test.py
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
 
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000
 
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
PRint(f.maker.fgraph.toposort())
t0 = time.time()
for i in xrange(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')
  • 在使用者目錄下新建.theanorc配置檔案,設定採用GPU替代CPU進行運算:
  • 新建配置檔案sudo vi ~/.theanorc
  • 新增如下內容:

    [global]
    floatX=float32
    device=gpu
  • 執行test.py測試檔案:
  • 首先是預設的使用gpu進行計算,檢視執行結果
  • 作為對比,使用cpu進行計算,觀察與gpu運算結果差別,從下面的截圖中可以看出,使用gpu的運算時間明顯短很多

總結

  • 最終還是在Ubuntu 14.04.1系統上將整個開發環境搭建成功了,期間確實走了不少彎路。所以還是要汲取一下教訓。
  • 理想情況下,按照很多教程那樣,可以很順利的解決安裝的問題。但是安裝過程中還是遇到不少問題,所以,重要的是學會解決遇到的問題,還有就是耐心地閱讀文件。

參考

  1. Easy Installation of an Optimized Theano on Current Ubuntu,這個是我第一次安裝的時候閱讀的教程,不過我沒有成功,在後面的單元測試時,沒有全部通過。
  2. Ubuntu12.04配置NVIDIA cuda5.5經驗帖
  3. Theano Tutorial: Using the GPU
  4. Ubuntu 14.04安裝Theano詳細教程
  5. CUDA: Installation Guide for Linux
  6. CUDA: Quick Start
  7. stackoverflow: Missing recommended library: libGLU.so