Overview
服務器環境:Ubuntu 16.04 Linux media50 4.10.0-30-generic Wed Aug 2 02:13:56 UTC 2017 x86_64 GNU/Linux
所用版本:CUDA 8.0 + cuDNN 6.0 + OpenCV 3.3.0 + Caffe 1.0
CUDA
- CUDA Archive:https://developer.nvidia.com/cuda-toolkit-archive
CUDA Toolkit 8.0 GA2:https://developer.nvidia.com/cuda-80-ga2-download-archive
根據OS和CPU架構選擇對應版本的.run file並下載
- Installation Guide Linux :: CUDA Toolkit Documentation:https://docs.nvidia.com/cuda/archive/8.0/cuda-installation-guide-linux/index.html
安裝NVIDIA顯卡驅動
- NVIDIA顯卡驅動程序下載:https://www.nvidia.cn/Download/index.aspx?lang=cn
卸載原有舊版本驅動:(可選)
sudo apt-get remove nvidia* # 需要sudo權限
賦予.run安裝文件執行權限:
sudo chmod a+x NVIDIA-Linux-${***}.run
帶參數運行,以避免出現循環登錄的問題:Ref[5]
sudo ./NVIDIA-Linux-x86_64-375.20.run –no-x-check –no-nouveau-check –no-opengl-files
# –no-x-check 安裝驅動時關閉X服務
# –no-nouveau-check 安裝驅動時禁用nouveau
# –no-opengl-files 只安裝驅動文件,不安裝OpenGL文件
驗證NVIDIA驅動是否安裝成功:
nvidia-smi
安裝CUDA
運行.run file文件:
sudo sh cuda8.0_${***}_linux.run # 需要sudo權限
一直按空格到100%後,輸入accept接受條款;
輸入no不安裝NVIDIA驅動,因爲已經安裝過了;
輸入y安裝cuda8.0工具,回車使用默認路徑安裝cuda8.0工具;
輸入y使用sudo命令,接着輸入密碼;
輸入n不安裝指向/usr/local/cuda的符號連接(也可選擇y安裝符號連接);
輸入y安裝cuda8.0的實例,可以用此來檢驗cuda是否安裝成功,回車選擇默認路徑安裝;
等待cuda安裝成功… Ref[4]
安裝完成後,打開profile文件:
sudo gedit /etc/profile # 需要sudo權限
在末尾處添加(注意不要有空格):
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
測試CUDA安裝
cd /usr/local/cuda-8.0/samples
sudo make all -j8 # 需要sudo權限
cd bin/x86_64/linux/release
./deviceQuery
或者
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make -j8 # 需要sudo權限
./deviceQuery
如果顯示一些關於GPU的信息,則說明安裝成功了
查看已安裝CUDA版本
cat /usr/local/cuda/version.txt
cuDNN
- cuDNN Archive:https://developer.nvidia.com/rdp/cudnn-archive
免註冊直接下載:http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz (v6.0 for CUDA 8.0)
- cuDNN Installation Guide :: Deep Learning SDK Documentation:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html
安裝cuDNN
解壓縮:
tar zxvf cudnn-8.0-linux-x64-v${*}.tgz
複製文件至系統目錄:
# 複製頭文件cudnn.h到/usr/local/cuda-8.0/include/目錄下
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
# 複製庫文件lib*到/usr/local/cuda-8.0/lib64/目錄下
sudo cp cuda/lib/lib* /usr/local/cuda-8.0/lib64/
# 均需要sudo權限
如果發現文件上有鎖:Ref[4]
sudo chmod 777 ${file} # 賦予文件夾及子文件夾777權限,去掉鎖後再複製
重置讀寫權限:Ref[6]
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h
建立符號鏈接
創建並編輯鏈接文件:
sudo gedit /etc/ld.so.conf.d/cuda.conf # 需要sudo權限
增加下面一行:Ref[4]
/usr/local/cuda-8.0/lib64
最後更新動態鏈接庫:
ldconfig -v
關聯環境變量
編輯.bashrc文件:
gedit ~/.bashrc
添加一行:Ref[6]
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
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
更新環境:(需要重啓終端)
source ~/.bashrc
查看已安裝cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
OpenCV
opencv/opencv on Github:https://github.com/opencv/opencv/releases
opencv/opencv_contrib:https://github.com/opencv/opencv_contrib/releases
下載對應相同版本的tar.gz源文件
解壓後將opencv_contrib存放在opencv目錄下,以便安裝
卸載舊版本OpenCV (可選)
進入源碼build文件夾uninstall卸載:
cd ${OPENCV/SOURCE/PATH}
cd build
make uninstall
cd ..
rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* # 需要sudo權限
後續清理:
# 刪除/usr中所有opencv相關項 Ref[3]
cd /usr/
find . -name "*opencv*" | xargs sudo rm -r
# 移除Python相關
sudo apt-get remove opencv-doc opencv-data python-opencv # 需要sudo權限
安裝OpenCV
針對CUDA 8.0以上版本,修改modules/(gpu)or(cudalegacy)/src/graphcuts.cpp第45行
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
爲
// Ref[1]
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
源碼編譯安裝命令:
cd ${OPENCV/SOURCE/PATH}
mkdir build
cd build
# WITHOUT opencv_contrib Ref[2]
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..
# WITH opencv_contrib Ref[7]
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler -D OPENCV_EXTRA_MODULES_PATH=${OPENCV/CONTRIB/SOURCE/PATH}/modules -D WITH_EIGEN=OFF ..
# 如果提示缺少ippicv或者protobuf,則下載相應版本放入錯誤提示的目錄內
make -j8 # -jx 分配進程數x
sudo make install # 需要sudo權限
# 更新動態鏈接庫
ldconfig -v
編譯出錯解決方案
- make 提示出錯 fatal error: opencv2/xfeatures2d/cuda.hpp或nonfree.hpp: No such file or directory
將
${OPENCV/CONTRIB/SOURCE/PATH}/modules/xfeatures2d/include/opencv2
下內容複製到
${OPENCV/SOURCE/PATH}/modules/features2d/include/opencv2
- make 提示出錯 fatal error: boostdesc_*bgm_***.i或vgg_generated_***.i: No such file or directory
下載 boostdesc_*bgm_***.i ×7 Ref[8]
得到下載地址
替換末尾文件名即可逐一下載
下載 vgg_generated_***.i ×4
opencv/opencv_3rdparty:https://github.com/opencv/opencv_3rdparty/tree/contrib_xfeatures2d_vgg_20160317
或者
opencv-dlco:https://github.com/cbalint13/opencv-dlco/tree/master/workspace/opencv
下載完成後,可將所有相關文件置於
${OPENCV/SOURCE/PATH}/modules/features2d/include
而後重新make即可
查看已安裝OpenCV版本
pkg-config --modversion opencv
Caffe
- BVLC/caffe on Github:https://github.com/BVLC/caffe/releases
git clone或下載tar.gz源文件,並解壓
修改Makefile.config
進入caffe目錄,根據Makefile.config.example複製一份Makefile.config:
cd caffe-1.0
cp Makefile.config.example Makefile.config
gedit Makefile.config
根據內容提示,結合具體情況修改Makefile.config,典型修改示例如下:Ref[9]
- 應用cuDNN
# USE_CUDNN := 1
↓
USE_CUDNN := 1
- 應用OpenCV3
# OPENCV_VERSION := 3
↓
OPENCV_VERSION := 3
- 更改Python lib路徑
PYTHON_LIB := /usr/lib
↓
PYTHON_LIB := /usr/lib/x86_64-linux-gnu
- 應用Python層接口
# WITH_PYTHON_LAYER := 1
↓
WITH_PYTHON_LAYER := 1
- 修改include & lib路徑
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
修改其他配置文件
修改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
這是因爲Ubuntu16.04的文件包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改這一路徑
修改/usr/local/cuda/include/目錄下的host_config.h文件:
#error-- unsupported GNU version! gcc versions later than 5 are not supported!
↓
// #error-- unsupported GNU version! gcc versions later than 5 are not supported!
編譯安裝Caffe
在caffe根目錄下:Ref[11]
cd caffe-1.0
make pycaffe -j8 # 可選
make all -j8
make test -j8
make runtest -j8
各項均是RUN……OK,即表示runtest成功
驗證:MNIST數據集分類測試
具體參見Ref[12],有比較詳細的描述與解釋:
# 將終端定位到Caffe根目錄
cd $CAFFE_ROOT
# 下載MNIST數據庫並解壓縮
./data/mnist/get_mnist.sh # 亦可手動下載 http://yann.lecun.com/exdb/mnist/
# 將其轉換成Lmdb數據庫格式
./examples/mnist/create_mnist.sh
# 訓練網絡
./examples/mnist/train_lenet.sh
訓練一共迭代10000次,最終正確率能夠達到99.07%
在CAFFE_ROOT/examples/mnist/目錄下新生成了lenet_iter_10000.solverstate、lenet_iter_10000.caffemodel、lenet_iter_5000.solverstate、lenet_iter_5000.caffemodel共4個文件
- 運行create_mnist.sh時出錯:Unable to open file data/mnist/train-images-idx3-ubyte
修改create_mnist.sh中的文件名,使與已下載的文件名保持一致(一般爲 . 與 - 的區別)
References
[1] GraphCut deprecated in CUDA 7.5 and removed in 8.0:https://github.com/opencv/opencv/pull/6510/files
[2] Unsupported gpu architecture ‘compute_11’解決方法:https://blog.csdn.net/sysuwuhongpeng/article/details/45485719
[3] Ubuntu16.04卸載opencv2.4.9並安裝opencv3.2.0+contrib:https://www.cnblogs.com/mar-q/p/7490271.html
[4] Ubuntu16.04安裝cuda及cudnn:https://blog.csdn.net/cdwxx1234/article/details/75121562
[5] 安裝NVIDIA顯卡驅動以及CUDA:https://blog.csdn.net/qq_28413479/article/details/76377184
[6] 最正確的姿勢安裝cudnn,網上大多數教程都太坑了:https://blog.csdn.net/lucifer_zzq/article/details/76675239
[7] ubuntu 下配置opencv3.10問題-Eigen/Eigenvalues: No such file or directory:https://blog.csdn.net/kekong0713/article/details/53674067
[8] fatal error: boostdesc_bgm.i: No such file or directory:https://github.com/opencv/opencv_contrib/issues/1301
[9] Ubuntu 16.04 安裝配置Caffe 圖文詳解:https://www.linuxidc.com/Linux/2016-12/138870p2.htm
[10] Ubuntu16.04 Caffe 安裝步驟記錄(超詳盡):https://blog.csdn.net/yhaolpz/article/details/71375762
[11] Caffe | Installation:http://caffe.berkeleyvision.org/installation.html
[12] Caffe | LeNet MNIST Tutorial:http://caffe.berkeleyvision.org/gathered/examples/mnist.html