http://blog.csdn.net/enjoyyl/article/details/47397505php
http://blog.csdn.net/baobei0112/article/details/77996369html
寫在前面:安裝caffe的過程當中必定要把caffe+cuda+cudnn+opencv以及linum的版本對應好,或者徹底按照一個好用的教程操做,不然很容易出問題,博客裏內容基本與http://blog.csdn.net/enjoyyl/article/details/47397505相同,我與其有不一樣的地方在括號(){}中標出。python
歷時一週終於在 ubuntu16.04 系統成功安裝 caffe 並編譯,網上有不少教程,可是某些步驟並無講解詳盡,致使配置過程老是出現各類各樣匪夷所思的問題,尤爲對於新手而言更是欲哭無淚,在我飽受折磨後決定把安裝步驟記錄下來,儘可能詳盡清楚明白,避免後來小白重蹈覆轍。linux
安裝硬件: intel i5 + NVIDIA 740 Mgit
安裝流程細分爲以下10個步驟,細化步驟粒度更易避免出錯:github
.檢查你的電腦是否支持CUDA:
檢查GPU是否支持:輸入以下命令,若是輸出的GPU型號是NVIDIA的,而且在此http://developer.nvidia.com/cuda-gpus列表內,則支持。ubuntu
lspci | grep -i nvidia
一、安裝依賴包
二、禁用 nouveau
三、配置環境變量
四、下載 CUDA 8.0
五、安裝 CUDA 8.0
六、驗證 CUDA 8.0 是否安裝成功
七、安裝 cudnn
八、安裝 opencv3.1
九、安裝 caffe
十、安裝 pycaffe notebook 接口環境ruby
安裝後續步驟或環境必需的依賴包,依次輸入如下命令:bash
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install git cmake build-essential
有必定概率安裝失敗而致使後續步驟出現問題,因此要確保以上依賴包都已安裝成功,驗證方法就是從新運行安裝命令,如驗證 git cmake build-essential是否安裝成功共則再次運行如下命令:網絡
sudo apt-get install git cmake build-essential
界面提示以下則說明已成功安裝依賴包,不然繼續安裝直到安裝成功。
yhao@yhao-X550VB:~$ sudo apt-get install git cmake build-essential
正在讀取軟件包列表... 完成 正在分析軟件包的依賴關係樹 正在讀取狀態信息... 完成 build-essential 已是最新版 (12.1ubuntu2)。 cmake 已是最新版 (3.5.1-1ubuntu3)。 git 已是最新版 (1:2.7.4-0ubuntu1.1)。 下列軟件包是自動安裝的而且如今不須要了: lib32gcc1 libc6-i386 使用'sudo apt autoremove'來卸載它(它們)。 升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 0 個軟件包,有 94 個軟件包未被升級。
安裝好依賴包後須要禁用 nouveau,只有在禁用掉 nouveau 後才能順利安裝 NVIDIA 顯卡驅動,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一條禁用命令,首先須要打開該文件,經過如下命令打開:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
打開後發現該文件中沒有任何內容,寫入:
blacklist nouveau option nouveau modeset=0
保存時命令窗口可能會出現如下提示:
** (gedit:4243): WARNING **: Set document metadata failed: 不支持設置屬性 metadata::gedit-position
無視此提示~,保存後關閉文件,注意此時還需執行如下命令使禁用 nouveau 真正生效:
sudo update-initramfs -u
一樣使用 gedit 命令打開配置文件:
sudo gedit ~/.bashrc
打開後在文件最後加入如下兩行內容:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
保存退出。
注:cuda的安裝參照的http://blog.csdn.net/enjoyyl/article/details/47397505,可是安裝的版本時8.0.61,採用deb安裝,而不是runfile的方式。官網中沒有8.0,可到這個連接中下載http://blog.csdn.net/qing101hua/article/details/74457109
進入 https://developer.nvidia.com/cuda-downloads ,依次選擇 CUDA 類型而後下載便可。
(如下都統一換成8.0)
CUDA-7.0在Linux下的安裝步驟參見官網手冊:CUDA_Getting_Started_Linux,其中說起了「.run」、「.deb」等安裝文件的安裝方法,本人選擇」deb」包的格式,由於它比較簡單。
0.檢查你的電腦是否支持CUDA:
檢查GPU是否支持:輸入以下命令,若是輸出的GPU型號是NVIDIA的,而且在此http://developer.nvidia.com/cuda-gpus列表內,則支持。
lspci | grep -i nvidia
1.下載安裝文件:能夠直接訪問上面給出的官網連接下載,也能夠在終端窗口輸入以下命令下載。(最好使用百度雲下載,官網下載十分容易斷掉)
# downloading the (currently) most recent version of CUDA 7 sudo wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0.28_amd64.deb
2.安裝依賴工具:須要連網。
# installation of required tools sudo apt-get install -y gcc g++ gfortran build-essential \ git wget linux-image-generic libopenblas-dev python-dev \ python-pip python-nose python-numpy python-scipy
3.安裝CUDA:
# installing CUDA sudo dpkg -i cuda-repo-ubuntu1404-8-0-local_7.0-28_amd64.deb sudo apt-get update sudo apt-get install cuda
4.設置環境變量:
注意:此環境變量爲64位系統下的,32位的把lib64
改爲lib
便可。
方式1,僅修改用戶變量
# setting the environment variables so CUDA will be found echo "\nexport PATH=/usr/local/cuda-8.0/bin:$PATH" >> ~/.bashrc echo "\nexport LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc
方式2,修改全部用戶變量
先使用sudo gedit /etc/profile
打開「profile」文件,或者sudo gedit ~/.bashrc
打開「./bashrc」文件,而後在打開的文件的末尾添加以下代碼並保存:
# setting the environment variables so CUDA will be found # After open profile, Add follow code at the end of file export PATH=/usr/local/cuda-8.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
5.加載新的環境變量:添加好環境變量後,須要加載新的環境變量,才能應用於系統。
加載更新環境變量source ~/.bashrc
(方式1),source /etc/profile
或source ~/.bashrc
(方式2)。
=====重啓系統!重啓系統!重啓系統!=======
sudo reboot
安裝samples並檢查CPU:samples被默認安裝在/home/liu
下:
# installing the samples and checking the GPU cuda-install-samples-8.0.sh ~/ cd NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery make ./deviceQuery
執行完./deviceQuery
命令,終端輸出以下相似信息,有GPU型號、驅動版本和運行版本、計算能力……諸多信息:
至此CUDA安裝成功。
登陸官網:https://developer.nvidia.com/rdp/cudnn-download ,下載對應 cuda 版本且 linux 系統的 cudnn 壓縮包,注意官網下載 cudnn 須要註冊賬號並登陸,不想註冊的可從個人網盤下載:https://pan.baidu.com/s/1c2xPVzy
下載完成後解壓,獲得一個 cudn 文件夾,該文件夾下include 和 lib64 兩個文件夾,命令行進入 cudn/include 路徑下,而後進行如下操做:
sudo cp cudnn.h /usr/local/cuda/include/ #複製頭文件
而後命令行進入 cudn/lib64 路徑下,運行如下命令:
sudo cp lib* /usr/local/cuda/lib64/ #複製動態連接庫 cd /usr/local/cuda/lib64/ sudo rm -rf libcudnn.so libcudnn.so.5 #刪除原有動態文件(這是兩條命令) sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成軟銜接 sudo ln -s libcudnn.so.5 libcudnn.so #生成軟連接
這裏須要注意第三行命令,網上有人的第三行命令爲(這個根據本身電腦中的來,原做者的時5.1.5,個人是libcudnn.so.7.0.3):
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 #生成軟銜接
起初我執行的也是上條連接 libcudnn.so.5.1.5 的命令,可是後面編譯caffe時出錯,報錯內容爲 /usr/bin/ld: 找不到 -lcudnn,因此這裏須要先查看一下本身應該連接的是 libcudnn.so.5.1.10 仍是 libcudnn.so.5.1.5 ,查看方法爲下:
locate libcudnn.so
我執行完後顯示以下:
yhao@yhao-X550VB:~$ locate libcudnn.so /home/yhao/.local/share/Trash/files/libcudnn.so /home/yhao/.local/share/Trash/files/libcudnn.so.5 /home/yhao/.local/share/Trash/files/libcudnn.so.5.1.10 /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5 /home/yhao/.local/share/Trash/files/cuda/lib64/libcudnn.so.5.1.10 /home/yhao/.local/share/Trash/info/libcudnn.so.5.1.10.trashinfo /home/yhao/.local/share/Trash/info/libcudnn.so.5.trashinfo /home/yhao/.local/share/Trash/info/libcudnn.so.trashinfo /home/yhao/cuda/lib64/libcudnn.so /home/yhao/cuda/lib64/libcudnn.so.5 /home/yhao/cuda/lib64/libcudnn.so.5.1.10 /usr/local/lib/libcudnn.so /usr/local/lib/libcudnn.so.5
能夠看到個人文件是 libcudnn.so.5.1.10 ,並無 libcudnn.so.5.1.5,因此第三行命令我連接的是 libcudnn.so.5.1.10 ,這裏第三行連接命令視你的查看結果而定。
安裝完成後可用 nvcc -V 命令驗證是否安裝成功,若出現如下信息則表示安裝成功:
yhao@yhao-X550VB:~$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2016 NVIDIA Corporation Built on Tue_Jan_10_13:22:03_CST_2017 Cuda compilation tools, release 8.0, V8.0.61
{
#此處經查看爲libcudnn.so.7.0.3,因此改爲7
報錯/usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope
}
進入官網 : http://opencv.org/releases.html , 選擇 3.1.0 版本的 source , 下載 opencv-3.1.0.zip (必定要注意opencv的版本)
解壓到你要安裝的位置,命令行進入已解壓的文件夾 opencv-3.1.0 目錄下,執行:
mkdir build # 建立編譯的文件目錄 cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j8 #編譯
在執行 make -j8 命令編譯到 92% 時可能會出現如下錯誤:
modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppState, Npp8u* pDeviceMem);
這是因爲opecv3.1與cuda8.0不兼容致使的。解決辦法:
修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件內容,如圖:
編譯成功後安裝:
sudo make install #安裝
安裝完成後經過查看 opencv 版本驗證是否安裝成功:
(報錯,17%時 使用cmake -D CMAKE_BUILD_TYPE=bulid -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..)
pkg-config --modversion opencv
首先在你要安裝的路徑下 clone :
git clone https://github.com/BVLC/caffe.git
進入 caffe ,將 Makefile.config.example 文件複製一份並改名爲 Makefile.config ,也能夠在 caffe 目錄下直接調用如下命令完成複製操做 :
sudo cp Makefile.config.example Makefile.config
複製一份的緣由是編譯 caffe 時須要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 給出的配置文件例子,不能用來編譯 caffe。
而後修改 Makefile.config 文件,在 caffe 目錄下打開該文件:
sudo gedit Makefile.config
修改 Makefile.config 文件內容:
1.應用 cudnn
將
#USE_CUDNN := 1 修改爲: USE_CUDNN := 1
2.應用 opencv 版本
將
#OPENCV_VERSION := 3 修改成: OPENCV_VERSION := 3
3.使用 python 接口
將
#WITH_PYTHON_LAYER := 1 修改成 WITH_PYTHON_LAYER := 1
4.修改 python 路徑
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 修改成: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
這裏貼出 個人Makefile.config文件 方便你們參考
而後修改 caffe 目錄下的 Makefile 文件:
將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 替換爲: NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
將:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 改成: LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
而後修改 /usr/local/cuda/include/host_config.h 文件 (這個文件中沒有找到對應的代碼,不過好像關係不大):
將
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported! 改成 //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
OK ,能夠開始編譯了,在 caffe 目錄下執行 :
make all -j8
這是若是以前的配置或安裝出錯,那麼編譯就會出現各類各樣的問題,因此前面的步驟必定要細心。(特別是版本不對應的狀況下,會有各類各樣的錯誤)
編譯成功後可運行測試:
sudo make runtest -j8
若是顯示結果爲上圖所示,則表示 caffe 已經成功安裝。
{
報錯nvcc fatal : Unsupported gpu architecture 'compute_20'
註釋掉Makefile.conf中的四個行
報錯.build_release/tools/caffe: error while loading shared libraries: libopencv_core.so.3.1: cannot open shared object file: No such file or directory
根據http://blog.csdn.net/gph2319/article/details/56497740
找到http://blog.csdn.net/sahusoft/article/details/7388617,而後搜索發現libopencv_core.so.3.1這個文件是在/usr/local/lib中,符合連接中的狀況,按照鏈接中說的執行
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
可是又出現了拒絕訪問的問題 bash: /etc/ld.so.conf: Permission denied 。而後再次搜索,根據這個鏈接中http://blog.csdn.net/yunyi4367/article/details/78070928所說,執行sudo sh -c "echo '/usr/local/lib' >> /etc/ld.so.conf" ,ok
}
1.解壓文件:終於能夠安裝DIGITS了,解壓下載好的DIGITS-master.zip文件生成「DIGITS-master」文件夾,將其重命名爲「digits」,並copy到你的目錄yourpath,如/home/liu/sfw下面。
2.安裝DIGITS:命令以下,注意修改路徑。
cd /home/liu/sfw/digits sudo apt-get install graphviz gunicorn for req in $(cat requirements.txt); do sudo pip install $req; done
若是網絡很差,或軟件源服務關閉等等可能形成某些依賴庫沒法下載和安裝,終端會有大片紅色文字,請更改軟件源確認網絡鏈接正常,從新執行上述命令。
進入digits文件夾,給文件「./digits-devserver」賦予可執行權限,而後./digits-devserver
運行digits:
cd ~/sfw/digits chmod +x ./digits-devserver ./digits-devserver
第一次運行會提示輸入caffe的安裝路徑:
運行時可能會提示啓動失敗:$ImportError: /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv
在stackoverflow找到了緣由及解決方法,命令以下:
sudo apt-get remove libopenblas-base
而後在終端輸入./digits-devserver
,便可成功啓動:
久違的界面終於出來了:
{
與上邊不一樣的是,我啓動的時候沒有要求輸入路徑,而是出現了這樣的錯誤
搜到: https://github.com/NVIDIA/DIGITS/issues/1107
的解決方案:
# Check the current value of your envvar
#檢查當前envvar的值
$ echo $CAFFE_ROOT # Add the envvar to ~/.profile so it will load automatically when you login
#把envvar加到~/.profile中,下次當你登陸時會自動加載
$ echo "export CAFFE_ROOT=/home/username(個人帳戶名)/caffe/" >> ~/.profile # Load the new configuration
#加載新配置
$ source ~/.profile # Check the new envvar value
#檢查新配置
$ echo $CAFFE_ROOT /home/username/caffe/
按上面的方法改了以後,digits順利啓動。
惋惜發現這個方法並不治本,重啓軟件時仍然須要配置目錄,或者首先運行一下 $ source ~/.profile
暫時問題不大,有待解決
}
上述步驟,是按默認配置啓動digits,若是你想自定義配置,能夠在啓動前輸入:
Most values are set silently by default. If you need more control over your configuration, try one of these commands: # Set more options before starting the server ./digits-devserver --config # Advanced usage python -m digits.config.edit --verbose
參見GettingStarted或源碼包中的「GettingStarted.md」文件。
DIGITS提供了下載數據集MNIST和CIFAR的工具,在/digits/tools/download_data
目錄下,包含以下文件:
(此處有所不一樣的是,下載數據集MNIST和CIFAR的工具是在/digits/download_data目錄下,固然該目錄下還有其餘數據集的下載工具
)
執行其中的main.py程序便可(在我安裝的版本中,該目錄下的文件有所不一樣):
主要代碼以下:
#首次使用賦予執行權限 chmod +x *.py #查看幫助 ./main.py -h #建立一個目錄用於存放MNIST數據集 mkdir -p /home/liu/sfw/digits/data/mnist #下載數據集至上述目錄 ./main.py -c mnist ~/sfw/digits/data/mnist
執行後,能夠在/digits/data/mnist
目錄下看到下載好的數據集,以下圖:
{
注,使用上述命令下載時老是報錯,錯誤以下,暫時沒有找到辦法解決這個問題,換了另外一個命令,不明白原理,不過慶幸虧用
}
這裏按照「GettingStarted.md」文件中所述,建立數據集爲分類數據集:在digits server首頁的DataSets區域點擊Images,選擇Classfication,在彈出的窗口填寫訓練數據集信息,這裏爲60000個樣本(「GettingStarted.md」裏的例子樣本數爲10k),信息見下圖(圖中digits版本與個人稍有不一樣,能夠參考http://www.linuxidc.com/Linux/2016-11/136774p21.htm以及後續頁面,這是一個教程,能夠學習一下http://www.linuxidc.com/Linux/2016-11/136774p22.htm):
數據集建立過程:
點擊左上角的「DIGITS」返回查看建立好的MNIST train 60k數據集:
如上圖,在Models區域點擊Images,選擇Classfication。在彈出的頁面填寫信息,數據集選擇:MNIST train 60k,模型命名爲:LeNet on MNIST 60k,以下圖:
點擊藍色按鈕「Create」後,任務即開始執行!
原覺得能夠興奮地看到結果,然而失望了,報出了錯誤:
ERROR: Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0) CUDNN_STATUS_ARCH_MISMATCH
以下圖:
其實,在安裝Caffe時,當運行make runtest
時就有個小問題,報出了「Check failure」,不過讓我直接忽略了,沒想到又回來了,哈哈。
這是由於筆記本上的GT635M的計算能力CUDA Capability是2.1,而官方的cuDNN加速是不支持3.0如下的版本的,所以只能在Makefile.config中註釋掉USE_CUDNN這行,從新執行如下編譯2。
make clean make all -j4 make test -j4 make runtest -j4
注:訪問CUDA GPUs查看GPU的計算能力,在頁面選擇GPU的型號,如Geforce GT 635M,以下圖:
{
在這一步中出現了一樣的問題,可是個人GPU是GeForce GT 650M,是支持3.0的,有多是顯卡驅動版本太高的緣由,能夠考慮去http://www.nvidia.cn/Download/index.aspx?lang=cn 下載合適的驅動,
暫時尚未操做,先在Makefile.config中註釋掉USE_CUDNN這行試試
}
編譯完成後,刪除以前建的LetNet on MNIST 60k任務,而後仿造上述步驟,從新新建一個任務,執行後,以下圖:
運行過程,網絡的訓練狀態,GPU的狀態等信息會實時顯示:
學習率與訓練代數關係
訓練結束後,能夠對手寫體數字圖像進行分類,能夠對單個圖像分類,也能夠同時分類多幅圖像,這裏以上述步驟中生成的「MNIST train 60k」數據集中的驗證集爲例。
在「Upload Image List」區域點擊選擇文件
按鈕,選擇驗證集的 list文件val.txt:
選擇好後,點擊Classify Many Images
按鈕,便可對多幅圖像分類,這時,界面上沒有顯示進度,在終端中顯示,以下圖:
對所選圖像分類完成後,彈出分類結果頁面:
可視化分類結果:
本文記錄了本人安裝配置NVIDIA DIGITS步驟與方法,軟件環境爲Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0 + DIGITS 2.0。並以DIGITS自述文件中的例子爲例,簡單介紹了DIGITS的用法。
可見,DIGITS的源碼安裝方式仍是有必定難度,特別是對Linux不熟悉的使用者。DIGITS的使用很方便,只需進行簡單的點擊操做,便可完成數據集建立、網絡模型建立、網絡訓練、網絡訓練狀態的實時顯示、用訓練好的網絡進行圖像分類等任務,使得不熟悉深度學習的人員也能夠在深度學習的大海中垂手可得地航行,這正式DIGITS的設計目的所在。
DIGITS除了支持Caffe,還支持Theano,本文並未介紹Theano,不過會陸續補充,關於Theano的一些信息,也能夠在本人的其它博客裏找到。