從Hinton在science上發表深度學習訓練開創新的文章以來,深度學習火了整整有3年多,而且隨着新的硬件和算法的提出,深度學習正在應用於越來越多的領域,發揮其算法的優勢。
實驗室並沒有趕上第一波深度學習熱,但是讓人高興的是最近終於配了一台超級電腦,雖說和谷歌、百度幾百個上千個GPU跑算法的設備不能比,但是好歹終於有了搭建自己的深度學習平台,想想還很是興奮。最近這幾天忙着搭建深度學習平台,把現在最火的Caffe框架代碼跑通,從最初對ubuntu的菜鳥到現在順利搭建起深度學習平台,中間走了很多彎路,現在把自己從系統安裝到最后測試中遇到的問題及關鍵步驟記錄下來,加深對caffe理解的同時,也方便自己后續安裝時重新查找資料,避免浪費時間和精力。
一、 深度學習工作站搭建(硬件):
工欲善其事,必先利其器,對於現在大火的深度學習來說更是如此,如果所在實驗室或者公司沒有相應的人員來進行專門的維護和服務,那么自己掌握這樣一項技能,對於自己后續工作開展、以及服務站升級與維護也是非常方便的。
廢話不多說,進入正題。
總體思路可參考該連接下filestorm的回答,本文只是告訴你如何進行甄選,以及配置。
如何配備深度學習工作站:鏈接
如果是使用台式機進行配置,那么必須清楚,配置深度學習工作站和電腦是一樣的。
總體原則:如果經費充足,那么所有的硬件都往當前最好的上,顯卡,主板,CPU,電源,機箱,內存,硬盤都是最好的,那么該工作站肯定沒問題。
但是一般情況下,老師給的經費不那么充裕,所以就需要數着指頭過日子,這時候給的建議一句話總結就是:因為顯卡貴,所以優先買最好的顯卡,讓其他硬件適應顯卡,而不是讓GPU適應其他硬件。
而購買優先權是:顯卡,CPU,主板,內存,硬盤,電源。
GPU的型號確定之后,其他的硬件配套就好。
以我的電腦為例,我的電腦配置為:
主板: ASUS Z97-AR
GPU: NVIDIA GTX980 TI(6G)
硬盤: 128G SSD + 2T 機械硬盤
CPU: i7-4790k(8核)
我的主板是ASUS 的Z97-AR,因為主板上提供的物理接口數量直接從硬件上限定死了可並行GPU數量。
我的主板上有兩個PCIE X_16 3.0,一個PCIE X_16 2.0,因此最多可以裝3個GPU,關於關於PCIE 3.0和PCIE 2.0的區別見下圖。
我 們都知道顯卡工作流程是由CPU和GPU協作完成的,CPU負 責三角形設定(Triangle Setup)和GPU負責三角形光柵化(Triangle Rasterize)【DirectX 10中加入的幾何着色器使GPU可以負責一部分Setup工作】。我們進行游戲時CPU和GPU是不斷交換數據的,大部分情況下都是GPU收到CPU的渲 染指令,而他們之間的通信是用PCI-E總線來進行的。
因此,CPU的選取也是限制GPU性能發揮的最主要的因素:
解釋見:連接
CPU的規格中一個很重要的參數是:PCI-E的數量
我的cpu型號為i7-4790k, 該CPU提供24條通道(20條是PCI-E 3.0,4條是PCI-E 2.0,其中4條3.0分配給了集成顯卡,4條2.0分配給了DMI 2.0總線,剩下的以插槽形式提供給獨顯等);
因此CPU只剩下16條PCI-E通道留給獨顯,所以最好是配一個GPU,最多兩個GPU進行交火。
根據木桶原理,我這台機器最多可以配2個GPU進行工作,但是由於CPU PCIE數量的限制,使用一個GPU時也可以發揮最大效能。使用兩個GPU,那么對於高端顯卡,帶寬可能會不夠。(8GB vs 16GB)
二、 深度學習平台搭建(軟件):
軟件版本:
Ubuntu 14.04(X_64)
CUDA 7.0
opencv3.0.0
Matlab 2015B
軟件平台部分組織結構:
- 第一部分:Ubuntu系統的安裝;
- 第二部分:CUDA 7.0的安裝;
- 第三部分:安裝cuDNN
- 第四部分:安裝Intel MKL 或Atlas
- 第五部分:安裝opencv 3.0
- 第六部分:安裝Caffe所需要的Python環境
- 第七部分:安裝Matlab並配置
- 第八部分:編譯Caffe
- 第九部分:使用MNIST數據集進行測試
第一部分:Ubuntu14.04安裝
1.1 從ubuntu官網或者其它鏡像網站下載Ubuntu 14.04(正常情況下,鏡像文件名字叫ubuntu-14.04.3-desktop-amd64.iso,1G左右);
1.2 使用nero或者ultraISO 將該鏡像文件刻錄到DVD。注意在刻錄ISO文件時,選擇“刻錄鏡像文件到光盤”這個選項,該選項刻錄的光盤選擇光驅啟動時,可以直接進行光盤安裝;
1.3 從光盤啟動后,會出現14.04這樣一個畫面,接下來就是滿屏字母文字,可主要參考Ubuntu安裝方法 ,設置略有不同。
1.3.1. 這時候只是建立了Ubuntu14.04的引導項,需要使用桌面的安裝圖標進行安裝->選擇語言,配置caffe時最好選用English,因為Ubuntu對中文支持並不是特別好,使用過程中選擇英文會方便很多。
(安裝時可以選用中文,安裝好之后可以在設置中將語言更改為英文,不過最好剛開始時就選擇英文)
1.3.2. 安裝類型:其它選項
1.3.3. 接下來需要設置分區,首先設置交換空間大小,與電腦內存差不多或為電腦內存的兩倍
分區設置時
swap 交換分區,主要用於休眠時系統文件,一般設置內存大小,32G
/boot Ubuntu內核目錄,網上一般建議100M,個人建議硬盤空間夠的話1G左右,因為系統內核雖然不大,但是更新占空間還是挺大,至少300M
/ Ubuntu根目錄,這里建議硬盤剩余所有空間都分配給根目錄,至少保證有100G左右,因為后續安裝的很多程序包都會在/根目錄下面
這3個分區均為ext4文件系統,注意linux系統的1G對應1000M。
1.3.4. 接下來就是設置地區、鍵盤布局,接着就是用戶名和密碼,參照網上其它教程。
安裝過程中遇到問題時,請善用百度和谷歌,推薦使用谷歌鏡像 對遇到的問題進行及時搜索。
現在我們已經安裝好了Ubuntu(64bit),接下來就進行CUDA7.0安裝。
注:安裝了Win+Ubuntu雙系統,特別是先安裝win之后,再安裝Ubuntu系統,引導項會默認選擇Ubuntu。如果常用系統是windows的話,每次都需要手動選取,特別不方便。
因此需要更改默認引導系統,對Ubuntu下面的Grub進行修改:修改教程請戳我
第二部分:CUDA 7.0
在安裝好Ubuntu(64bit)系統之后,在配置Caffe環境之前,請先連上互聯網。ubuntu在某些情況下不安裝mentohust也可以聯網,這部分可參見:Linux使用mentohust連接銳捷校園網教程
經測試,在Ubuntu下直接在網絡連接里面輸入用戶名,密碼即可連上網絡,推測Ubuntu14.04應該自身集成銳捷協議。
2.1. 安裝CUDA7.0
2.1.1 安裝Caffe所需依賴包
sudo apt-get install build-essential # basic requirement sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler #required by caffe
2.1.2 安裝CUDA7.0
安裝CUDA有兩種方法,
離線.run安裝:從官網下載對應版本的.run安裝包安裝。
在離線.deb安裝:deb安裝分離線和在線,我都嘗試過都安裝成功了,官網下載地址
推薦使用在線deb安裝方法。ps:在安裝cuda時,已經同時安裝顯卡驅動,所以沒有必要再裝顯卡驅動。
sudo dpkg -i cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb sudo apt-get update sudo apt-get install cuda
然后重啟電腦。
Tips:如果安裝不成功,卸載多試幾次。
2.1.3 設置環境變量:
(設置環境變量時,首先確定好cuda安裝路徑和位置,這一步非常重要,在安裝時不需要對下面位置進行修改,系統會自動建立連接)
sudo gedit /etc/profile
添加內容:
PATH=/usr/local/cuda/bin:$PATH
export PATH
保存后, 執行下列命令, 使環境變量立即生效
source /etc/profile
同時需要添加lib庫路徑: 在 /etc/ld.so.conf.d/加入文件 cuda.conf, 內容如下
/usr/local/cuda/lib64
保存后,執行下列命令使之立刻生效
sudo ldconfig
2.2 安裝CUDA SAMPLE:
進入/usr/local/cuda/samples, 執行下列命令來build samples
sudo make all -j8
全部編譯完成后, 進入 ./bin/x86_64/linux/release, 運行deviceQuery
./deviceQuery
如果出現顯卡信息, 則驅動及顯卡安裝成功:
CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce GTX 980 Ti" CUDA Driver Version / Runtime Version 7.0 / 7.0 CUDA Capability Major/Minor version number: 5.2 Total amount of global memory: 6136 MBytes (6433828864 bytes) (22) Multiprocessors, (128) CUDA Cores/MP: 2816 CUDA Cores GPU Max Clock rate: 1076 MHz (1.08 GHz) Memory Clock rate: 3505 Mhz Memory Bus Width: 384-bit L2 Cache Size: 3145728 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.0, CUDA Runtime Version = 7.0, NumDevs = 1, Device0 = GeForce GTX 980 Ti Result = PASS
*注:我安裝時CUDA Driver Version和CUDA Runtime Version不同,不過暫時不影響,安裝時候兩個版本最好一樣。
如果沒有這些信息,那肯定是安裝不成功,可以逐步排除一下原因!
第三部分:安裝cuDNN
這里強烈建議大家安裝與cuda版本相匹配的cudnn,這樣會避免很多不必要的兼容麻煩。比如我安裝的是cuda-7.0版本,那么安裝cudnn-v3以上會比較好。
下載cudnn-7.0-linux-x64-v3.0-prod.tgz。
鏈接cuDNN的庫文件
如果在使用cudnn的lib 或者cudnn.h 時出現Permission denied提示,那么說明copy過去的文件當前系統沒有權限使用,那么在拷貝過去之前,先對文件授權
修復方式:
cd /usr/local/cuda/lib64/
sudo su
chmod 777 -R libcudnn.so
chmod 777 -R libcudnn.so.7.0
chmod 777 -R libcudnn.so.7.0.64
cd ..
cd include
chmod 777 -R cudnn.h
cudnn-v4安裝,適用於cuda7.0 以及later
a. 安裝前請去先官網下載最新的cuDNN (cudnn-7.0-linux-x64-v4.0-rc.tgz)。
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib
b. 鏈接cuDNN的庫文件
sudo ln -sf /usr/local/lib/libcudnn.so.4.0.4 /usr/local/lib/libcudnn.so.4 sudo ln -sf /usr/local/lib/libcudnn.so.4 /usr/local/lib/libcudnn.so sudo ldconfig -v
cudnn-v5.1-cuda8.0 安裝:
a. 安裝前請去先官網下載最新的cuDNN (cudnn-8.0-linux-x64-v5.1.tgz)。
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib
b. 鏈接cuDNN的庫文件
sudo ln -sf /usr/local/lib/libcudnn.so.5.1.10 /usr/local/lib/libcudnn.so.5
sudo ln -sf /usr/local/lib/libcudnn.so.5 /usr/local/lib/libcudnn.so sudo ldconfig -v
第四部分:安裝Intel MKL 或Atlas
Atlas安裝命令(caffe默認也是atlas,Intel MKL需要申請):
sudo apt-get install libatlas-base-dev
**注:這里最好直接安裝intel的mkl核心,因為后面調試matlab接口時候還是需要用到mkl庫,所以雖然比較麻煩,但是在安裝時候直接安裝mkl會好一些。
在這一模塊可以選擇(ATLAS,MKL或者OpenBLAS),我這里使用MKL,首先下載並安裝英特爾® 數學內核庫 Linux* 版MKL,下載鏈接, 請下載Student版,先申請,然后會立馬收到一個郵件(里面有安裝序列號),打開照着下載就行了(可以下載離線版或在線安裝版,在線版名稱為parallel_studio_xe_2016_online.sh)。通過在線版可以直接安裝。
若使用離線版安裝,文件下載完之后,要把文件解壓到home文件夾(或直接 把tar.gz文件拷貝到home文件夾,為了節省空間,安裝完記得把壓縮文件給刪除喔~),或者其他的ext4的文件系統中。
tar zxvf parallel_studio_xe_2015.tar.gz chmod a+x parallel_studio_xe_2015 -R sudo ./install_GUI.sh
安裝完成之后,需要設置mkl的配置文件
1. 新建intel_mkl.conf, 並編輯之:
sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
在文件中加入配置路徑
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
第五部分:安裝opencv3.0
切換目錄Ubuntu\3.0\安裝OpenCV 3.0.0rc1:
sudo sh opencv3_0_0-rc1.sh
保證網絡暢通,因為軟件需要聯網這里時間較長,請耐心等待。
*注:打開.sh文件可以看到,在安裝過程中需要下載opencv-3.0.0-rc1.zip文件,如果下載過程中出現問題,安裝過程則會失敗。這時可以選擇自己下載,然后執行.sh文件中的安裝編譯過程。
懶人版:
如果對opencv版本沒有特殊要求,為了省時間,可以直接通過Ubuntu的包管理進行安裝,即通過apt-get install進行安裝,該安裝方法會根據現在系統的版本,cuda版本以及其他信息自動安裝caffe所需要的庫,極大地縮短了安裝時間。
(因為通過上述方式進行安裝的過程,需要在本地使用cmake軟件進行編譯,所以非常耗時)
sudo apt-get install libopencv-dev
使用該命令安裝的opencv版本為2.8.4,安裝的為caffe最小依賴的包(個人理解),但是使用該方法安裝opencv速度快,可以很快的部署好caffe的環境。
第六部分:安裝Caffe所需要的Python環境
python選用環境較多,根據個人喜好進行安裝。常用的有:
bash Anaconda-2.3.0-Linux-x86_64.sh
使用anaconda,則需要在Makefile.config中進行配置:
把之前的PYTHON_INCLUDE一定不加注釋,把ANACONDA_HOME以及下面的PYTHON_INCLUDE 都去掉,並且改為如下圖最終的樣子:
# NOTE: this is required only if you will compile the python interface. # We need to be able to find Python.h and numpy/arrayobject.h. PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib/python2.7/dist-packages/numpy/core/include # Anaconda Python distribution is quite popular. Include path: # Verify anaconda location, sometimes it's in root. ANACONDA_HOME := $(HOME)/anaconda2 PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ $(ANACONDA_HOME)/include/python2.7 \ $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \ # We need to be able to find libpythonX.X.so or .dylib. PYTHON_LIB := /usr/lib # PYTHON_LIB := $(ANACONDA_HOME)/lib
在執行make all -j8過程中遇到錯誤:
error: ./include/caffe/util/cudnn.hpp:8:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory #include "caffe/proto/caffe.pb.h"
解決方案:
cd caffe protoc src/caffe/proto/caffe.proto --cpp_out=. mkdir include/caffe/proto mv src/caffe/proto/caffe.pb.h include/caffe/proto
在執行make all -j8 時遇到的另外一個錯誤:
fatal error: pyconfig.h: No such file or directory
解決方案:
export CPLUS_INCLUDE_PATH=/usr/include/python2.7/:$CPLUS_INCLUDE_PATH source ~/.bashrc
安裝python環境就是為了提供一個好的python開發環境,因此推薦大家安裝caffe官網推薦的ipython-notebook,安裝方便,使用也簡單, Jupyter安裝地址
python由於其語言的特殊性,因此對編輯軟件依賴較高。但是大神一般都用vim編輯器,一般剛入門也推薦使用sublime,配置編譯環境以及需要的各種package,網上搜索教程,很方便。
第七部分:安裝Matlab2014a
1. 下載
由於該軟件為商業軟件,請大家自行尋找,安裝學習,並確保不使用做商業目的,下載24小時刪除......( 地址)2. 預准備
選擇Mathworks.Matlab.R2014a.Unix.iso - 右鍵 - 使用磁盤映像掛載器打開”
進入裝載的虛擬光盤,拷貝全部文件至home/Matlab 文件夾
(PS:我的原則是能GUI就GUI,喜歡CMD的可以參照執行)
復制Crack/install.jar至 home/Matlab/java/jar/ 並覆蓋源文件
3. 授權安裝文件夾
4. 安裝
選項:不使用Internet安裝
序列號: 12345-67890-12345-67890
默認路徑:/usr/local/MATLAB/R2014a
5.激活
激活文件:Crack/license_405329_R2014a.lic
拷貝 license_405329_R2014a.lic 至 /usr/local/MATLAB/
將Crack/Linux文件夾下的libmwservices.so copy到 /usr/local/MATLAB/R2014A/bin/gln
sudo cp Crack/Linux/license_405329_R2014a.lic /usr/local/MATLAB/R2014a/bin/glnxa64
安裝完畢,程序默認啟動路徑:
第八部分:編譯Caffe
Caffe下載 ,進入caffe-master文件夾的python目錄,執行如下命令:
for req in $(cat requirements.txt); do pip install $req; done
下載安裝所需依賴包。
進入caffe-master目錄,復制一份Makefile.config.examples
cp Makefile.config.example Makefile.config
修改其中的一些路徑,如果前邊和我說的一致,都選默認路徑的話,那么配置文件應該為:
USE_CUDNN := 1 #cudnn加速 CUDA_DIR := /usr/local/cuda BLAS := atlas MATLAB_DIR := /usr/local/MATLAB/R2014a PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib/python2.7/dist-packages/numpy/core/include PYTHON_LIB := /usr/lib INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial BUILD_DIR := build DISTRIBUTE_DIR := distribute TEST_GPUID := 0
因為安裝的時opencv-3.0,因此配置好Makefile.config文件之后,需要對Makefile進行修改(實現對OpenCV 3.x的支持)
查找“Derive include and lib directories”一節,修改“LIBRARIES +=”的最后一行,增加opencv_imgcodecs
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
保存,退出。
caffe編譯和測試:
"-j8"是使用CPU的多核進行編譯,可以極大地加速編譯的速度,建議使用。
cd caffe-master #打開caffe所在文件夾 make all -j8 #在build文件夾下進行編譯
make test -j8 make runtest -j8 #使用CPU多核同時進行編譯
make matcaffe -j8
注:編譯matcaffe時,需要使用g++和gcc,Ubuntu14.04的g++是4.8+,而matlab為4.7,但是在編譯時並不需要對g++進行降級,編譯有warning但是還是會通過。
想對g++編譯器進行降級的見連接 Caffe + Ubuntu 15.04 + CUDA 7.0 新手安裝配置指南 。
*********************Caffe 的python接口配置*********************
caffe的python 接口是配置過程中最容易出問題的地方,因為python可以從很多地方啟動,而python的編輯軟件也很多,因此需要設置。
推薦使用第二種環境變量設置方法,即/etc/profile中寫入環境變量。
使用下面命令進行python接口生成
make pycaffe -j8
make distribute
如果上述步驟沒有錯誤,那么配置路徑:
一般情況下,如果從terminal啟動,則只需要在~/.bashrc中進行PYTHONPATH環境變量的添加
配置python接口時,需要將環境變量寫入~/.bashrc文件中,命令為:
sudo gedit ~/.bashrc
但是如sublime等GUI軟件,如果不從terminal使用命令啟動,則有時不會讀到PYTHONPATH環境變量,因此最穩妥的方法是將PYTHONPATH寫入/etc/profile中,命令為:
sudo gedit /etc/profile
寫入的環境變量為:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/usr/local/cuda/lib64:/home/startag/caffe/distribute/lib:/home/startag/Documents/Caffe-soft/opencv_linux/Install-OpenCV/Ubuntu/3.0/OpenCV/opencv-3.0.0-rc1/build/lib:$LD_LIBRARY_PATH export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD export PYTHONPATH=/home/startag/caffe/distribute/python:$PYTHONPATH
在寫入環境變量時,需要注意自己的拼寫是否正確,需要認真檢查,確認無誤。
執行完這一步驟之后,注銷或者重啟讓環境變量生效。
注:如果使用的不是系統自帶的終端工具(bash),如比較好用的oh-my-zsh,那么在寫入PATH和PYTHONPATH時應該寫入~/.zshrc文件中
(每個軟件對應的配置文件名為~/.xxxrc)
第九部分:使用MNIST數據集進行測試
Caffe默認情況會安裝在$CAFFE_ROOT,就是解壓到那個目錄,例如:$ home/username/caffe-master,所以下面的工作,默認已經切換到了該工作目錄。下面的工作主要是,用於測試Caffe是否工作正 常,不做詳細評估。具體設置請參考官網:http://caffe.berkeleyvision.org/gathered/examples /mnist.html
1. 數據預處理
sh data/mnist/get_mnist.sh
2. 重建lmdb文件。Caffe支持三種數據格式輸入網絡,包括Image(.jpg, .png等),leveldb,lmdb,根據自己需要選擇不同輸入吧。
sh examples/mnist/create_mnist.sh
生成mnist-train-lmdb 和 mnist-train-lmdb文件夾,這里包含了lmdb格式的數據集
sh examples/mnist/train_lenet.sh
至此,Caffe安裝的所有步驟完結。
后續繼續更新。
參考博客:
2015.08.17 Ubuntu 14.04+cuda 7.0+caffe安裝配置
Caffe + Ubuntu 15.04 + CUDA 7.0 新手安裝配置指南
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置說明
本文系本人原創,其中某些部分借鑒其中3個博客和網絡上的資料,如需轉載,注明出處,謝謝。