寫在前面
最近拿到了一臺新機器,安裝了Ubuntu16.04。原來在筆記本的Ubuntu16.04下配置成功過caffe(cpu only)機器matlab與python接口。
特將在新機器上配置caffe完整過程記錄如下。
0.機器配置
- 處理器:Intel? Xeon(R) CPU E3-1231 v3 @ 3.40GHz × 8
- 內存:Kingston 32G
- 顯卡:NVIDIA GeForce GTX 1070
顯卡型號可以用這個命令查詢:
lspci |grep VGA
機器配置查詢參考 - 操作系統:Ubuntu17.04
1.Caffe下載
- 根據Caffe官網上給出的鏈接,在Github上下載Caffe的Zip壓縮包
- 提取到Home目錄下,文件夾名為caffe-master
2.編譯前的準備
本部分根據Caffe官網Ubuntu下安裝教程以及部分網絡教程進行
2.1 General dependencies
執行此部分前最好先升級apt-get:
sudo apt-get update
然后分別執行下面兩句:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
(可能執行完這句后會再次提醒需要升級apt-get,再運行一遍升級命令就好了)
sudo apt-get install --no-install-recommends libboost-all-dev
此部分安裝完成
2.2 安裝NVIDIA顯卡驅動
這部分耗費了一個下午的時間總算安裝好了。
安裝這部分的時候,先參考了《Ubuntu-安裝-cuda7.0-單顯卡-超詳細教程》這篇文章(注意,不使用該文章中的方法安裝Cuda,否則報錯),按照二進制安裝包安裝的方式安裝顯卡驅動,一直報錯,說kernel modules配置錯誤,錯誤報告很長,最后的部分如下:
錯誤報告:
scripts/Makefile.build:294: recipe for target '/tmp/selfgz6789/NVIDIA-Linux-x86_64-375.26/kernel/nvidia-drm/nvidia-drm-fence.o' failed
make[2]: *** [/tmp/selfgz6789/NVIDIA-Linux-x86_64-375.26/kernel/nvidia-drm/nvidia-drm-fence.o] Error 1
make[2]: Target '__build' not remade because of errors.
Makefile:1524: recipe for target '_module_/tmp/selfgz6789/NVIDIA-Linux-x86_64-375.26/kernel' failed
make[1]: *** [_module_/tmp/selfgz6789/NVIDIA-Linux-x86_64-375.26/kernel] Error 2
make[1]: Target 'modules' not remade because of errors.
make[1]: Leaving directory '/usr/src/linux-headers-4.10.0-19-generic'
Makefile:81: recipe for target 'modules' failed
make: *** [modules] Error 2
ERROR: The nvidia kernel module was not created.
ERROR: Installation has failed. Please see the file '/var/log/nvidia-installer.log' for details. You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
后來根據這篇文章,采用apt-get方式安裝,成功,但步驟有所不同。
我的具體安裝步驟如下:
2.2.1 禁用舊的顯卡驅動
Ubuntu中自帶了適用于NVIDIA顯卡的nouveau驅動,但是與NVIDIA官方驅動相比還是有很大差距的,而且沒有官方驅動的話,也不能使用Cuda和cudnn。nouveau驅動與官方驅動沖突,因此,需要在安裝官方驅動之前禁用nouveau驅動。
之前嘗試過網上建議較多的添加blacklist的方法,發現都不能完全將nouveau驅動禁用。查看nouveau驅動是否完全被禁用命令如下:
lsmod | grep nouveau
于是采用另外一種方法,成功去除nouveau驅動。
2.2.2 apt-get方式安裝驅動
-
在命令行輸入:
ubuntu-drivers devices
查看建議的驅動版本
采用有“recommended”那一行的驅動版本。 按“Ctrl+Alt+F1”,切換到tty1。注意,這里輸入密碼時不能用小鍵盤,用鍵盤上方的橫排數字輸入密碼(密碼中有數字的情況下)。
輸入命令“
sudo su
”,切換到root模式關閉顯示器管理器,命令:
service lightdm stop
安裝顯卡驅動,命令:
apt-get install nvidia-375
安裝完成,打開顯示器管理器,命令:
service lightdm start
-
登錄圖形化界面,打開Terminal,輸入
cat /proc/driver/nvidia/version
,查看顯卡信息,如安裝成功,如下所示:
NVIDIA顯卡驅動安裝完畢
2.3 安裝Cuda
安裝Cuda時可以退出tyy1了,回到圖形界面。安裝過程中曾經嘗試用run方法,但是不知什么原因一直失敗。因此直接采用deb方式安裝Cuda。步驟如下:
- 安裝依賴庫
apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libgl1-mesa-dev libglu1-mesa libglu1-mesa-dev libxi-dev
-
選擇配置,直接從網站中下載deb文件
- 根據官網提示的命令運行:
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
可以在/usr/local/中找到安裝好的文件夾:
- 配置環境變量
命令:sudo gedit /etc/profile
在文件最后加上
PATH=/usr/local/cuda/bin:$PATH
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LD_LIBRARY_PATH
命令:source /etc/profile
最好能夠退出(Logout)當前賬戶再登錄,以確保環境配置成功
- 檢驗
命令:nvcc --version
,出現下圖結果:
- 安裝cuda samples
直接參考這篇博客Cuda Samples安裝部分。
注意,采用deb方式安裝的Cuda,Sample文件夾不在home下,而直接保存在cuda目錄中。
-
./deviceQuery執行結果
- Cuda安裝測試完畢
2.4 安裝Cudnn6
注意:CUDA9.1需要與Cudnn7配合使用
- 在官方網站注冊賬號之后即可下載。
- 采用下面的命令:
#解壓文件
tar -zxvf cudnn-6.5-linux-x64-v2.tgz
#切換路徑,復制文件
cd cuda
sudo cp lib/* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/
#更新軟連接
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6
sudo ln -s libcudnn.so.6.0.20 libcudnn.so.6
sudo ln -s libcudnn.so.6 libcudnn.so
- 在官網上沒有找到cudnn Sample,先不測試。
- cudnn安裝完成
2.5 安裝MKL
- 首先在官網申請免費下載。需要用edu結尾的郵箱申請。
-
很快郵箱中會收到一封包含下載鏈接和序列號的郵件,直接點擊鏈接進入下載頁面即可下載。如下圖:
- 下載完成后,使用
sudo tar -xvf
命令解壓文件夾,閱讀安裝指導pdf。 - 根據安裝手冊,首先到官網進行序列號注冊。
- 注冊完成后,采用GUI方式安裝mkl。運行install_GUI.sh文件。這里根據安裝指導和需要一步步安裝就好了。
- 安裝完成后,使用source命令添加環境變量,命令
source /[path to your intel]/intel/mkl/bin/mklvars.sh intel64
。為了方便,我直接把該命令添加到~/.bashrc文件中了,每次啟動命令行可以添加好環境變量。 - mkl安裝完成
2.6 安裝Matlab
(我之前在byr上下載了MatlabR2017A安裝包,沒想到現在byr不能登錄了。。。)
(好像2017版本的matlab不能接入caffe,我在make matcaffe的時候總有問題,所以暫時只是安裝好了MATLAB,沒有做與caffe的借口)
安裝包包括三個文件,分別是R2017a_glnxa64_dvd1.iso,R2017a_glnxa64_dvd2.iso,和Crack文件夾。網絡上其他版本基本上也是如此,比較常見的是一個ISO文件和一個Crack文件夾,安裝過程類似。
- 首先要閱讀Crack文件夾中的Readme文件,里面有序列號以及安裝指導。
- 安裝過程主要參考這篇博客
- 主要使用以下幾個命令:
sudo mkdir /media/matlab #新建文件夾
sudo mount -o loop [path]/[ISO文件] /media/matlab #兩個ISO的話,先加載dvd1即可,dvd2以后用
sudo /media/matlab/install #運行安裝文件
sudo umount /media/matlab #安裝完成后取消掛載
- 安裝完成后,用命令:
sudo chmod -R a+w /××××/×××/matlab
把matlab所在的文件夾改成讀寫狀態,進行破解 - 將Crack文件夾中的licence文件復制到安裝目錄下的licence文件夾內
Use license_standalone.lic to activate, or copy license_standalone.lic to %installdir%\licenses\ ,and run matlab without activation
- 將Crack文件夾中 /R2017a/bin/glnxa64/libmwservices.so 復制到安裝目錄下的對應文件夾中
after the installation finishes copy the folders to %installdir% to overwriting the originally installed files
-
到這里就安裝+破解完成。在Terminal中執行 ./%installdir%/bin/matlab 就可以運行Matlab了
2.6 安裝Opencv
- github上已經有人寫好了腳本,可以直接根據需求下載安裝。
- 需要說明的是,如果直接安裝最新版本,會安裝到opencv3,如果想安裝opencv2的話,可以進入相應的目錄,運行對應的腳本進行安裝。可以參考這個博客。
- 我直接運行的腳本進行的安裝,安裝完成后用
pkg-config --modversion opencv
命令查看opencv版本,如下圖:
- opencv安裝完成
3.編譯caffe
第二部分介紹了caffe編譯前的各種準備工作,全部安裝完成后,就可以進行caffe的編譯了。
- 首先進入caffe-master文件夾,直接采用caffe官網上提供的cmake方式進行編譯。
In lieu of manually editing Makefile.config to configure the build, Caffe offers an unofficial CMake build thanks to @Nerei, @akosiorek, and other members of the community. It requires CMake version >= 2.8.7. The basic steps are as follows:
mkdir build
cd build
cmake .. -DBLAS=MKL
這里由于我用了mkl,所以加上了‘-DBLAS=MKL’這一限制
make all -j
'-j'是為了采用多核進行編譯,速度較快。還可以在j后面加上數字限制核的數量。如‘-j8’
make install -j
make runtest -j
make pycaffe
配置caffe的python接口
在編譯caffe的時候我開始用了make方式,一直報錯。采用cmake之后很順利,沒有遇到問題。至此caffe編譯完成,可以運行了。
4.mnist例子測試
- mnist測試的例子網上有很多,例如這篇,可參考此步驟。
-
測試結果:
訓練開始
訓練結束 - caffe運行成功,16秒完成10000次循環,正確率可達99.05%
5.以上就是配置caffe全過程,如有疏漏,以后補充。
注:開始配置的時候是在Ubuntu17.04上,后來更換了16.04的系統。安裝步驟一樣。只是文中配圖還有一些是原來安裝的截圖,但不影響結果。在16.04系統上完全可用。