about
聲明: 此文并非原創,我只是個搬運工罷了(盡做些Ctrl+C, Ctrl+V的工作)。作為一個小白,只是為了方便日后學習。如得罪版權,請多多包含。感謝下面大神勞助。
本博文參考了
autocyz 的Ubuntu16.04+cuda8.0+caffe安裝教程
Hungryof的 linux替換cudnn版本
AbsentM's的64位Ubuntu 14.04 LTS + Caffe + CUDA 7.5 + Opencv 3.0 安裝配置實戰
Doral的Caffe安裝問題匯總
github的fatal error: caffe/proto/caffe.pb.h: No such file or directory #105
0. Pre-Installation
- 0.1. 先到NVIDIA官網查看,Compute Capability這項是否達到了3.0,如果不是,那么不用裝了,下面的不用看了。
!Note:
- 官網有說明cuDNN Install Guide:
PREREQUISITES
... a GPU of compute capability 3.0 or higher are required.
- 在查看Compute Capability這一項時,請注意,左側的是:..Desktop Products,右側的是Notebook Products, 就是臺式機和筆記本的區別。
GPU.png
0.2 已裝好了 cuda8.0,可查看教程Ubuntu 14.04安裝CUDA-8.0
-
0.3到NVIDIA官網注冊填個問卷然后下載對應版本的cudnn(本文選的是cuDNN v5.1 Library for Linux, 下早到的是一個cudnn-8.0-linux-x64-v5.1.tgz文件)
cuDNN.png
1. Installation
- 解壓
$ tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz
$ cd cuda
$ sudo cp lib64/* /usr/local/cuda/lib64/
$ sudo cp include/cudnn.h /usr/local/cuda/include/
- 更新軟連接:
$ sudo rm -rf libcudnn.so libcudnn.so.5 #刪除原有動態文件
$ sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5
$ sudo ln -s libcudnn.so.5 libcudnn.so
!Note: 可能遇到的問題:
- 之前安裝了某個cuDNN的版本,想替換為新的: 解決方法是刪除掉原先的,重新裝新的cuDNN
刪除舊的
$ cd /usr/local/cuda/lib64
$ sudo rm libcudnn*
然后再按照上述方法安裝新的
- 可用
ll
命令查看那些軟連接
$ cd /usr/local/cuda/lib64
$ ll | grep libcudnn
lrwxrwxrwx 1 root root 13 12月 1 23:12 libcudnn.so -> libcudnn.so.5*
lrwxrwxrwx 1 root root 17 12月 1 23:11 libcudnn.so.5 -> libcudnn.so.5.1.5*
-rwxr-xr-x 1 root root 79337624 12月 1 23:09 libcudnn.so.5.1.5*
-rw-r--r-- 1 root root 69756172 12月 1 23:09 libcudnn_static.a
2 Post-Installation
- 編譯caffe
在~/caffe/Makefile.config
中,去掉USE_CUDNN := 1
的注釋
執行
$ make clean # 第一次編譯不用這句,出錯時也可使用這句。
$ make all
$ make test
$ make runtest
!Note: 可能遇到的錯誤
- 在執行
$ make all
時遇到
error:‘CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING’ was not declared in this scope
是因為當前的cuDNN版本過低,請自行下行高版本的,再重新裝一遍。
- 在執行
$ make runtest
時遇到
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"
解決方法:
# 當前目錄為caffe,如不是,執行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 clean
$ make all
$ make test
$ make runtest
- 在執行
$ make runtest
時遇到
error:
.build_release/tools/caffe
make: .build_release/tools/caffe: Command not found
make: *** [runtest] Error 127
那是因為先前沒有執行make all
,make test
造成的,不要偷懶,在遇到上面的錯誤時,執行
$ make clean
$ make all
$ make test
$ make runtest
- 在執行
$ make runtest
時遇到
F1202 12:26:03.474925 16455 cudnn_softmax_layer.cpp:15] Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0) CUDNN_STATUS_ARCH_MISMATCH
*** Check failure stack trace: ***
@ 0x2b5817a9cdaa (unknown)
@ 0x2b5817a9cce4 (unknown)
@ 0x2b5817a9c6e6 (unknown)
@ 0x2b5817a9f687 (unknown)
@ 0x2b581bca72b5 caffe::CuDNNSoftmaxLayer<>::LayerSetUp()
@ 0x2b581bd6b6a7 caffe::SoftmaxWithLossLayer<>::LayerSetUp()
@ 0x2b581bdf870c caffe::Net<>::Init()
@ 0x2b581bdf9d4b caffe::Net<>::Net()
@ 0x5ac4a0 caffe::NetTest<>::InitNetFromProtoFileWithState()
@ 0x561c8b caffe::NetTest<>::InitAllInOneNet()
@ 0x578ad0 caffe::NetTest_TestAllInOneNetVal_Test<>::TestBody()
@ 0x8fd933 testing::internal::HandleExceptionsInMethodIfSupported<>()
@ 0x8f4617 testing::Test::Run()
@ 0x8f46be testing::TestInfo::Run()
@ 0x8f47c5 testing::TestCase::Run()
@ 0x8f7b08 testing::internal::UnitTestImpl::RunAllTests()
@ 0x8f7d97 testing::UnitTest::Run()
@ 0x46ccff main
@ 0x2b581ccb0f45 (unknown)
@ 0x474979 (unknown)
@ (nil) (unknown)
make: *** [runtest] Aborted (core dumped)
是因為你的N卡的GPU的Compute Capability低于3.0,不符合cuDNN的硬件要求,這時,不用裝cuDNN了,把在~/caffe/Makefile.config
中的 USE_CUDNN := 1
的注釋加上