最近幾天一直嘗試搭建Theano深度學(xué)習(xí)開發(fā)環(huán)境,并安裝英偉達CUDA Toolkit。這期間,有想過在Windows上搭建的,但是從網(wǎng)上了解后,發(fā)現(xiàn)還是在linux環(huán)境下更加合適。在搭建這個開發(fā)環(huán)境的過程中,其實入了不少坑,有點曲折。本不打算寫搭建過程的,因為網(wǎng)上確實有不少不錯的安裝步驟,以及官網(wǎng)也有安裝教程。But,鑒于被坑了好幾天,還是記錄一下,長長記性 :)
期間安裝Ubuntu 14.04超過4次(原因:有些軟件依賴問題無法解決,更換軟件源貌似也不可以。不過今天把軟件源換成主服務(wù)器后,就正常了,但是我的無線網(wǎng)速度比較慢,所以使用主服務(wù)器后,下載速度明顯要慢了不少。)。
嘗試安裝Fedora操作系統(tǒng)1次,因為也想過在這個系統(tǒng)上搭建環(huán)境的,因為Ubuntu 14.04上面的部分依賴總是搞不定。但是因為網(wǎng)卡驅(qū)動的問題,始終無法聯(lián)網(wǎng);無法聯(lián)網(wǎng),自然就沒法安裝編譯器,沒有編譯器,沒法安裝網(wǎng)卡驅(qū)動(因為需要編譯驅(qū)動),最后放棄了這個平臺。
嘗試安裝CentOS操作系統(tǒng)1次,其實根本沒有安裝成功,原因是我的獨立顯卡驅(qū)動問題,導(dǎo)致安裝程序的圖形界面上的所有文字都是模糊的,甚至連“退出安裝”按鈕文字我都識別不出來,最后放棄了。
e
鍵,進入編輯頁面,在倒數(shù)第二行中,ro quiet splash
后面添加nomodeset
,這樣進入系統(tǒng)后不會因為獨顯驅(qū)動問題而導(dǎo)致黑屏了;/boot/grub/grub.cfg
文件,搜索ro quiet splash
關(guān)鍵詞,同樣追加nomodeset
,這樣不用每次啟動系統(tǒng)前重復(fù)上述步驟了。這些工具在后面可能會使用到,如編譯器等。
sudo apt-get install -y python-dev python-pip python-nose gcc g++ git gfortran
這些軟件包必須在安裝Numpy和Scipy之前安裝
sudo apt-get install -y libopenblas-dev liblapack-dev libatlas-base-dev
在官方教程中使用了apt-get
方式安裝的,但是貌似我確實在安裝后沒有通過單元測試,有不少錯誤產(chǎn)生。尤其是后面安裝的SciPy更是如此??赡芎臀抑皼]有把需要的工具包安裝齊全有關(guān)系吧。
# 安裝NumPy,這個安裝過程需要等待會,因為需要編譯,所以得花一點時間。# 實際上后面安裝的SciPy和Theano都會花時間編譯的,整個安裝過程還是要挺久的。sudo pip install numpy# 進行測試。python -c 'import numpy; numpy.test()'
必須要保證上面的測試通過,然后再繼續(xù)下一步,確保每一步都是正確的。沒有Errors則通過測試。測試結(jié)果如下。
# 安裝方法,耐心等待編譯吧:)sudo pip install scipy# 進行測試python -c 'import scipy; scipy.test()'
必須保證scipy
也正常通過測試,這樣才可以繼續(xù)安裝下面的Theano。測試結(jié)果如下圖:
# 安裝方法,還是要耐心等待編譯安裝的,感覺比較耗時sudo pip install Theano# 開始測試sudo python -c 'import theano; theano.test()'
好吧,我感覺這個步驟中的Theano
測試花了好長時間,所以,還是耐心等待吧。最后結(jié)果如下。
在安裝這個英偉達CUDA Toolkit時,還是遇到了不少問題。以下記錄安裝過程,詳細的說明文檔參見英偉達官方提供的Installation Guide for Linux。需要注意的是,該安裝文件已經(jīng)包含了英偉達較新的顯卡驅(qū)動,所以不用單獨安裝獨顯驅(qū)動的。
進入CUDA Toolkit下載頁面
選擇對應(yīng)的Ubuntu 14.04操作系統(tǒng),并且選擇下載runfile(1.1G)
文件,同時記錄對應(yīng)的md5值,用于校驗下載文檔有沒有損壞
下載GPU Development Kit
下載完成后,最后校驗一下下載文件與下載頁面提供的文件MD5值是否相同,確保下載到的安裝包是完好無損的。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
/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
首先,將X-Window關(guān)閉,然后進入字符界面(如tty1)。關(guān)閉X-Window方法:sudo service lightdm stop
接下來,在字符界面中,給下載好的cuda_7.5.18_linux.run
以及cuda_352_39_gdk_linux.run
添加可執(zhí)行權(quán)限
安裝Development Kit:sudo ./cuda_352_39_gdk_linux .run
安裝CUDA:sudo ./cuda_7.5.18_linux.run
,安裝過程直接根據(jù)提示進行下去即可
重新啟動X-Window:sudo service lightdm start
echo 'export PATH=/usr/local/cuda-7.5/bin:$PATH' >> ~/.bashrcecho 'export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH' >> ~/.bashrcsource ~/.bashrc
nvcc -V
,輸出結(jié)果如下:進入到Samples安裝目錄,然后在該目錄下make
,等待十來分鐘。
編譯完成后,可以在Samples
里面找到bin/x86_64/linux/release/
目錄,并切換到該目錄
運行deviceQuery
程序,查看輸出結(jié)果如下(重點關(guān)注最后一行,Pass表示通過測試):
運行bandwidthTest
程序,查看輸出結(jié)果如下(同樣最后顯示結(jié)果為PASS
):
這是最后一個環(huán)節(jié)了,配置Theano使用GPU并行計算,以驗證環(huán)境搭建是否成功。
from theano import function, config, shared, sandboximport theano.tensor as Timport numpyimport time vlen = 10 * 30 * 768 # 10 x #cores x # threads per coreiters = 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')
sudo vi ~/.theanorc
添加如下內(nèi)容:
[global]floatX=float32device=gpu
作為對比,使用cpu進行計算,觀察與gpu運算結(jié)果差別,從下面的截圖中可以看出,使用gpu的運算時間明顯短很多
新聞熱點
疑難解答
圖片精選