cuda7.0+ caffe 小白安裝手記
本人是linux新手,在歷時兩個星期的糾結的caffe安裝之路後,終於在昨天成功用上了caffe!先說說我的電腦配置吧,戴爾Optiplex 990主機,Q67主機板,Geforce GTX960 顯示卡。這一系列的主機特別坑爹,我裝上顯示卡後系統就切不了tty介面了,後面想在Bios裡面啟用集顯禁用獨顯,結果發現這臺主機沒有切換顯示卡的功能!所幸後面找到了解決方法(在下文有)。總之,這次的安裝之路讓我明白堅持才是最重要的,還有,就是不要老想著重灌系統,重灌系統並不會徹底解決問題,如果不去解決bug的話,就永遠會有未知的新bug等著你。
1 CUDA的安裝
CUDA的安裝包括很多種方法。由於像freeglut3-dev
1.1 Kubuntu14.04系統+cuda手動安裝
首先驗證你是否有nvidia的顯示卡(http://developer.nvidia.com/cuda-gpus個網站檢視你是否有支援gpu的顯示卡):&lspci|grep -i nvidia
檢視你的linux發行版本(主要是看是64位還是32位的):$uname –m && cat/etc/*release
看一下gcc的版本:$gcc –version
(1 )準備好CUDA Toolkit(在此之前千萬不要更新系統!!!)
根據官網介紹,之前安裝的版本都會有衝突的嫌疑,所以之前安裝的Toolkit和Drievers就得解除安裝,遮蔽,等等。
$ sudo apt-get--purgeremove nvidia* (由於我的是新系統,此步省略)
(2)安裝一些必要的庫:
在此之前先sudo apt-getupdate
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
(3)禁掉nouveau:在/etc/modprobe.d/blacklist.conf最後一行加上 blacklist nouveau
禁了nouveau之後有時要重啟下電腦才生效(4)切換到tty1(ctrl+alt+F1)
關閉GUI:sudo service lightdm stop
在此遇到一個問題:自從Kubuntu14.04裝上Nvidia的GTX 960顯示卡驅動後,C+A+F1就無法啟動tty終端了。準確的說,是黑屏,無法顯示任何東西,但是可以操作,盲打可以登陸。切換回X後,用w命令可以察看到已經登陸了。
————————————————————————————
nvidia的顯示卡:
修改/etc/initramfs-tools/modules
加入
fbcon
vesafb
nvidiafb三行
再修改/etc/modprobe.d/blacklist-framebuffer檔案
把nvidiafb,vesafb,vga16fb三行註釋掉
執行sudo update-initramfs -u重啟電腦就好
—————————————————————————
我的沒vga16fb這一行,就無視掉了。
另外我考慮到也可能是解析度的問題,所以去 /etc/default/grub裡把GRUB_CMDLINE_LINUX=""加了個引數,改為GRUB_CMDLINE_LINUX="vga=792",792代表的是1024*768解析度的十六進位制0x0318程式碼。
然後更新grub:update-grub,重啟。
就可以了。
(5)更改CUDA Toolkit執行許可權:
sudo chmod +x cuda-7.0.28_linux_64.run
(6)執行CUDA安裝檔案:
sudo ./cuda-7.0.28_linux_64.run --no-opengl-libs
(If the target system includes both an integrated GPU (iGPU) and a discrete GPU
(dGPU), the --no-opengl-libs option must be used. Otherwise, the openGL library used
by the graphics driver of the iGPU will be overwritten and the GUI will not work. In
addition, the xorg.conf update at the end of the installation must be declined.)
(7)切換回GUI:
sudo service lightdm start
(8)成功切回GUI後新增環境變數:
開啟你的.bashrc檔案:
sudo vi ~/.bashrc
加入下列語句
$ exportPATH=/usr/local/cuda-7.0/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
檢查是否設定成功:
$ echo $PATH
$ echo$LD_LIBRARY_PATH
(9)檢驗:
檢視顯示卡的驅動版本:cat /proc/driver/nvidia/version
檢視nvcc編譯器的版本:nvcc -V i
編譯cuda的示例程式碼: cd ~/NVIDIA_CUDA-7.0_Samples
然後make一下編譯程式碼:make all
進入bin路徑:
cd ~/NVIDIA_CUDA-7.0_Samples/bin
(cd /home/lin/NVIDIA_CUDA-7.0_Samples/bin/x86_64/linux/release)
然後執行deviceQuery檔案: ./ deviceQuery
如果提示nvcc未安裝,其實是nvidia-cuda-toolkit的編譯器沒有安裝完整,則按照提示操作:
$ sudo apt-get installnvidia-cuda-toolkit
1.2 ubuntu系統+CUDA deb包安裝
首先在官網上下載CUDA的deb包
下載完成之後可以使用如下命令安裝它,注意檔名修改為cuda-repo-ubuntu1404_7.0-28_amd64.deb
命令:sudo dpkg –Icuda-repo-ubuntu1404_7.0-28_amd64.deb
安裝好倉庫之後,就可以更新你的本地倉庫:sudoapt-get update
最後開始安裝cuda以及顯示卡驅動(安裝cuda的同時就會把顯示卡驅動也全部安裝好)
sudoapt-get install cuda
不出意外的話,按照上面步驟可以成功安裝cuda,這跟其他手工安裝cuda的方法相比,實在是太方便了,至於為什麼按照這個方法可行的具體原因還不知道。
安裝完之後你需要設定環境變數的方法與1.1的方法相同,這裡就不贅述了。
設定完畢之後,你還可以選擇是否安裝cuda附帶的示例程式碼(<dir>表示你要安裝的位置,你可以將<dir>替換成~):
$ cuda-install-samples-7.0.sh <dir>
然後檢驗。
1.3 ubuntu系統+手動安裝cuda
1.3.1 安裝NVIDIA驅動
(1)更新系統:sudo apt-get update && sudo apt-get upgrade
sudoapt-get install build-essential
(2)從nvidia官網上下載cuda安裝包(cuda_7.0.28_linux.run檔案)
(3)解壓run檔案:
chmod +x cuda_7.0.28_linux.run
mkdir nvidia_installers
./cuda_7.0.28_linux.run –extract=`pwd`/nvidia_installers
(4)更新與nvidia驅動相匹配的linux image:
sudo apt-get install linux-image-extra-virtual
(安裝linux-image-extra-virtual的時候,可能會詢問:What would you like to do aboutmenu.lst? 選擇”keep the local version currentlyinstalled”)
(5)禁掉nouveau:
建立blacklist-nouveau.conf檔案:
sudo vi/etc/modprobe.d/blacklist-nouveau.conf
將下列語句加入檔案:
blacklist nouveau
blcklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
回到終端:
echo options nouveau modeset=0 | sudo tee –a /etc/modprobe.d/nouveau-kms.conf
sudo update-initramfs –u
sudo reboot
(6)重啟後,切換到tty1介面並關閉GUI:
sudo service lightdm stop
(7)sudo apt-get install linux-source
sudo apt-get installlinux-headers-`uname -r`
(8)安裝驅動:
cd nvidia_installers
sudo ./NVIDIA-Linux-x86_64-346.46.run
注意:
如果有“nvidia-installer was forced toguess the X library path ‘/usr/lib’and X module path …”,繼續並點選OK.
如果有“The CC version check failed”點選“ignore CC version check”.
如果有問你關於32-bit libraries,選擇yes,並安裝它們.
如果問你關於“running nvidia –xconfig to updateyour X configuration file”,選擇no.
執行 nvidia –smi 來檢視已安裝的GPU.
1.3.2 安裝CUDA
sudo modprobe nvidia
sudo apt-get install build-essential
sudo ./cuda-linux64-rel-7.0.28-19326674.run
執行結束後,切換回GUI:
sudo service lightdm start
成功切回GUI後新增環境變數:
sudo vi ~/.bashrc
export PATH=$PATH:/usr/local/cuda-7.0/bin
export LD_LIBRARY_PATH=:/usr/local/cuda-7.0/lib64
儲存.bashrc檔案後執行source ~/.bashrc
1.3.3 安裝cuda sample
sudo./cuda-samples-linux-7.0.28-19326674.run
cd/usr/local/cuda-6.5/samples
sudo make
全部編譯完成後,進入 samples/bin/x86_64/linux/release, sudo下執行deviceQuery: sudo ./deviceQuery
接下來的檢驗步驟與前面一樣,暫且不表。
cuda安裝方法的比較:
第一種安裝方法現在只能在kubuntu系統上面執行,第二種安裝方法十分方便,但是deb包安裝方式十分不穩定,而且前面兩種方法雖然能成功安裝cuda,但是在後面編譯caffe的時候會出現很多很奇葩的bug,不知道是不是跟cuda安裝方式有關係。第三種方法是google上較新的安裝方法,雖然有點複雜,但是執行的時候沒有什麼bug,暢通無阻。綜合來說,還是第三種方法較好。
2 安裝配置cuDNN
cuDNN可以在官網免費獲得,註冊帳號後即可下載。官網沒有找到安裝說明,下載得到的壓縮包內也沒有Readme. 不過google一下就會找到許多說明。基本原理是把lib檔案加入到系統能找到的lib資料夾裡, 把標頭檔案加到系統能找到的include資料夾裡就可以。這裡把他們加到CUDA的資料夾下(參考這裡)
tar -zxf cudnn-6.5-linux-x64-v2.tgz
cd cudnn-6.5-linux-x64-v2
sudo cp lib*/usr/local/cuda/lib64/
sudo cp cudnn.h/usr/local/cuda/include/
執行後發現還是找不到庫, 報錯
error while loading sharedlibraries: libcudnn.so.6.5: cannot open shared object file: No such file ordirectory
而lib資料夾是在系統路徑裡的,用ls -al發現是檔案許可權的問題,因此用下述命令先刪除軟連線
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.solibcudnn.so.6.5
然後修改檔案許可權,並建立新的軟連線
sudo chmod u=rwx,g=rx,o=rxlibcudnn.so.6.5.48
sudo ln -s libcudnn.so.6.5.48libcudnn.so.6.5
sudo ln -s libcudnn.so.6.5libcudnn.so
$ sudo ldconfig -v
不做連結,可能會出現這個報錯:“./build/tools/caffe:error while loading shared libraries: libcudnn.so.6.5:cannot open sharedobject file: No such file or directory”那是因為cuDNN沒有連結成功,只能做一下硬連結。
3 caffe的安裝
3.1 Atlas安裝
$ sudo apt-get install libatlas-base-dev
3.2 其他依賴項,確保都成功
$ sudo apt-getinstall libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-devlibboost-all-dev libhdf5-serial-dev
$ sudo apt-getinstall libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
3.3 下載caffe-master.zip,並解壓。
(1) 切換到Caffe的下載資料夾,然後執行:
$ cpMakefile.config.example Makefile.config
修改新生成的Makefile.config檔案,修改“BLAS := mkl”,這個非常重要。(我安裝的是atlas,所以預設配置)
編輯確保Makefile.config,啟用GPU “# CPU_ONLY := 1”,並設定“USE_CUDNN := 1”。
(2) 編譯caffe-master。"-j8"是使用CPU的多核進行編譯,可以極大地加速編譯的速度,建議使用。
$ make all -j8
$ make test -j8
$ make runtest-j8
make runtest 的時候可能會出現“You have 2 disabled tests”,這個可以忽略不計。
(3)執行Mnist例子
cd caffe-master
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
執行上述檔案的時候必須切換到caffe主資料夾,否則就會執行錯誤。
3.4 編譯過程中可能出現的的錯誤:
(1)libcudnn.so.6.5:cannot open shared object file,no such file or directory.
可以直接在將自己的庫所在路徑新增到/etc/ld.so.conf檔案中。但一般這個檔案中的內容都是一句“include /etc/ld.so.conf.d/*.conf”,因此最好在/etc/ld.so.conf.d/目錄下新建一個檔案,如“ld-cudnn.conf”,然後將自己的庫所在路徑新增到這個conf檔案中。
修改完檔案後,以root身份執行 /sbin/ldconfig -v 。這一步必不可少,別丟了。
(2)如果提示:make: protoc: 命令未找到,那是因為protoc沒有安裝,安裝一下就好了。
$ sudo apt-get installprotobuf-c-compiler protobuf-compiler
(3) error whileloading shared libraries: libcudart.so.7.0: cannot open shared object file
原因分析:LD_LIBRARY_PATH路徑設定有問題,少了一個lib64
下載網址: