本文根據(jù)我編譯時(shí)出現(xiàn)的一些錯(cuò)誤盔几,參考了swfa1的csdn博客《caffe編譯中的python問題》http://www.th7.cn/Program/Python/201609/967571.shtml 和ThinkingMan新浪博客《Ubuntu14.04編譯caffe問題記錄》http://blog.sina.com.cn/s/blog_721a75e50102wfig.html屈芜,做的一些記錄,以便以后備用牌捷。
系統(tǒng)環(huán)境做一下說明:
ubuntu14.04LTS,CUDA 8.0, ?cudnn 5.0, caffe :官方發(fā)布的caffe
(后來實(shí)驗(yàn)配置環(huán)境多了,發(fā)現(xiàn)問題大同小異,上述系統(tǒng)版本號(hào)是我第一次配置時(shí)的系統(tǒng)信息君丁,不一定必須遵循,只要你的Ubuntu 和cuda,cudnn 版本號(hào)對應(yīng)就行将宪,這個(gè)對應(yīng)關(guān)系網(wǎng)上可以查到绘闷,在此就不復(fù)制了)。
錯(cuò)誤1:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libopencv_highgui.so: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
make: *** [.build_release/tools/convert_imageset.bin] Error 1
錯(cuò)誤描述:如上圖顯示较坛,未定義的引用“TIFFReadRGBAStrip@LIBTIFF_4.0”印蔗,說明是libtiff庫未指明,
解決辦法:執(zhí)行下面命令操作查找對應(yīng)庫路徑丑勤,并添加
$ldconfig -p|grep libtiff #這個(gè)指令是查找?guī)焖饕?/p>
下圖是我查找到的鏈接關(guān)系
$ export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ #這個(gè)指令是將路徑添加至配置文件中
然后再編譯make all,就可以繼續(xù)進(jìn)行下面測試了华嘹。
$make clean # 清理上次編譯錯(cuò)誤記錄
$make all -j8
問題2:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory # include^
compilation terminated.
make: *** [.build_release/src/caffe/layer_factory.o] Error 1
make: *** Waiting for unfinished jobs....
錯(cuò)誤描述:這個(gè)是因?yàn)閏plus文件索引路徑錯(cuò)誤問題,我安裝caffe是用的是anaconda2法竞,一些路徑出了問題耙厚,將python對應(yīng)路徑添加進(jìn)去就好
解決辦法:如下
$export CPLUS_INCLUDE_PATH=/usr/include/python2.7
然后再編譯make all,就可以繼續(xù)進(jìn)行下面測試了。
$make clean# 清理上次編譯錯(cuò)誤記錄
$make all -j8
2017/10更新:
問題描述:前一段時(shí)間服務(wù)器又歇菜了爪喘,項(xiàng)目組的同學(xué)重裝系統(tǒng)后颜曾,發(fā)現(xiàn)正常步驟安裝caffe后,老是找不到pyconfig.h文件秉剑,也就是上面這個(gè)問題泛豪。可是檢查的時(shí)候路徑,環(huán)境變量什么都沒問題诡曙。后來又把caffe卸了重裝好幾次臀叙,還是這個(gè)問題。今早又重新裝載的時(shí)候价卤,git clone 時(shí)劝萤,報(bào)下面這個(gè)錯(cuò):
以前一直以為是權(quán)限問題,沒想太多慎璧,直接指令前面加sudo執(zhí)行了床嫌。后來查了一下這個(gè)問題,在這篇博客(http://blog.csdn.net/superior_yong/article/details/62041526)中提到了這個(gè)問題胸私,并給出了解決方案厌处。如下圖。
問題分析:好吧岁疼,那我查看一下我的根目錄下的.config文件夾阔涉,發(fā)現(xiàn)我的這個(gè)文件加的所有者是root〗萑蓿可能是這個(gè)原因瑰排,跨權(quán)限調(diào)用文件的原因,造成后面的一系列編譯錯(cuò)誤吧暖侨。
解決辦法:
參照這篇博客(http://www.linuxidc.com/Linux/2015-03/114695.htm)椭住,我把文件夾所有者改了回來,編譯發(fā)現(xiàn)沒有錯(cuò)了它碎,都通過了函荣。
3.錯(cuò)誤
ImportError: No module named Cython.Distutils
解決辦法:
安裝Cython
$sudo apt-get install cython
4錯(cuò)誤
make pycaffe后,還有一些庫找不到扳肛,我自己測試傻挂,這個(gè)問題也適用于基于CAFFE 平臺(tái)的的其他神經(jīng)網(wǎng)絡(luò),例如py-faster-rcnn和py-R-FCN等挖息。
(參考這篇博客http://www.cnblogs.com/venus024/p/5664103.html)
解決辦法:
$cd caffe/python
$for req in $(cat requirements.txt); do pip install $req; done
caffe/python/requirements.txt這個(gè)文件記錄caffe的Python接口所需要的所有函數(shù)庫金拒,執(zhí)行上面語句便可依次檢查是否所需模塊都安裝,有的話自動(dòng)跳過或升級(jí)套腹,沒有的話自動(dòng)安裝绪抛。
5錯(cuò)誤
由于服務(wù)器桌面系統(tǒng)經(jīng)常崩盤,找售后他們又重裝了系統(tǒng)电禀,所以所有的環(huán)境得重新配置幢码。執(zhí)行make all 時(shí),發(fā)現(xiàn)了下面的錯(cuò)誤尖飞。經(jīng)排查發(fā)現(xiàn)是cudnn安裝配置錯(cuò)誤症副。
查到店雅,博客http://blog.csdn.net/u011070171/article/details/52292680,給的解釋說贞铣,這是因?yàn)楫?dāng)前版本的caffe的cudnn實(shí)現(xiàn)與系統(tǒng)所安裝的cudnn的版本不一致引起的闹啦。上官網(wǎng)查了了一下caffe對cuda相關(guān)要求,顯示如下:
以上判斷是caffe版本過舊辕坝,cudnn版本太新窍奋。下面就對癥下藥:
解決辦法1:(博客中給的辦法)
1.將./include/caffe/util/cudnn.hpp 換成最新版的caffe里的cudnn的實(shí)現(xiàn),即相應(yīng)的cudnn.hpp.
2. 將./include/caffe/layers里的酱畅,所有以cudnn開頭的文件琳袄,例如cudnn_conv_layer.hpp。? 都替換成最新版的caffe里的相應(yīng)的同名文件圣贸。
3.將./src/caffe/layer里的挚歧,所有以cudnn開頭的文件,例如cudnn_lrn_layer.cu吁峻,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu在张。
都替換成最新版的caffe里的相應(yīng)的同名文件用含。
rbgirshick的py-faster-rcnn實(shí)現(xiàn),因?yàn)槠鋍udnn實(shí)現(xiàn)為舊版本的實(shí)現(xiàn)帮匾,所有出現(xiàn)了以上問題.
解決辦法2:(降低cudnn版本)
將之前安裝的/usr/local/cuda-8.0/l路徑下的cudnn的文件刪除啄骇,按照網(wǎng)上教程重新安裝v5.0版,文件關(guān)聯(lián)一下瘟斜,就好
解決辦法3:(更換新版本的caffe)
去github上下載新版的caffe缸夹,把caffe重新按照官方教程安裝配置一遍。
6錯(cuò)誤
運(yùn)行make runtest,一直報(bào)錯(cuò)
Checkfailed:status== CUDNN_STATUS_SUCCESS (3vs.0)? CUDNN_STATUS_BAD_PARAM
錯(cuò)誤描述:按照http://www.cnblogs.com/penguinliong/p/6351215.html這篇博客說是GPU被占用螺句,可是我運(yùn)行$nvidia-smi查看顯示虽惭,說沒有進(jìn)程調(diào)用GPU,經(jīng)排查還是cudnn的安裝問題,因?yàn)榉?wù)器是多人在使用蛇尚,被別人裝了兩個(gè)版本的cudnn芽唇。
解決辦法:刪掉一個(gè)cudnn,重新安裝配置連接,然后再編譯make all,就可以繼續(xù)進(jìn)行下面測試了取劫。
$make clean# 清理上次編譯錯(cuò)誤記錄
$make all -j8
7錯(cuò)誤
今天在給師姐裝caffe時(shí)匆笤,遇到了Python接口無法調(diào)用的問題,具體問題描述如下:
按照正常安裝步驟谱邪,執(zhí)行$make all炮捧,$make test , $make runtest ,$make pycaffe都正常惦银。但是$Python打開Python編譯器后咆课,執(zhí)行import caffe調(diào)用caffe的Python接口是出現(xiàn)錯(cuò)誤:No module named _caffe末誓,網(wǎng)上查找大部分解釋說是 make pycaffe 編譯出錯(cuò),沒有正確生成Python腳本文件傀蚌。
解決辦法:
$make clean# 清理上次編譯錯(cuò)誤記錄
用sudo 超級(jí)用戶權(quán)限重新執(zhí)行上面make all ,make pycaffe指令基显。
需要注意的是,如果錯(cuò)誤是 no module named caffe ,可能是你的caffe路徑配置錯(cuò)誤善炫,執(zhí)行下面命令撩幽,將caffe/python/環(huán)境變量路徑添加.bashrc文件中。
$sudo vim ~/.bashrc #打開.bashrc文件
在文件最后添加下面指令
export PYTHONPATH=/home/(你的用戶名)/caffe(你的caffe安裝目錄)/python:$PYTHONPATH#這里也可以使用~/caffe/pyhon相對路徑
關(guān)閉文件箩艺, 輸入下面指令窜醉,是環(huán)境變量生效,
$source ~/.bashrc
然后,在Python編譯器中import caffe艺谆,測試應(yīng)該可以正常調(diào)用caffe榨惰。
8錯(cuò)誤
還是上面的接口問題,按照錯(cuò)誤7解決no module問題后静汤,再次測試出現(xiàn)新的錯(cuò)誤如下:
錯(cuò)誤描述:如上圖最后一行所示琅催,顯示運(yùn)行時(shí)錯(cuò)誤,網(wǎng)上找問題說是numpy錯(cuò)誤虫给。
解決辦法:更新numpy模塊藤抡,執(zhí)行下面語句更新。
$sudo pip install numpy --upgrade
9錯(cuò)誤
環(huán)境配置好后抹估,做手寫體網(wǎng)絡(luò)測試缠黍,執(zhí)行 (在caffe安裝目錄下)
$sudo examples/mnist/train_lenet.sh
出現(xiàn)如下錯(cuò)誤
問題描述:出現(xiàn)這種錯(cuò)誤是由于訓(xùn)練數(shù)據(jù)沒有準(zhǔn)備好。
解決辦法:(以下命令都在caffe安裝目錄下執(zhí)行)
$.data/mnist/get_mnist.sh#準(zhǔn)備數(shù)據(jù)
$.examples/mnist/create_mnist.sh#生成caffe指定數(shù)lmdb據(jù)格式
$.examples/mnist/train_lenet.sh#訓(xùn)練模型
更復(fù)雜的情況看https://github.com/BVLC/caffe/issues/2709
其他問題以后發(fā)現(xiàn)繼續(xù)補(bǔ)充药蜻。
2017/10更新:
10錯(cuò)誤:/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array
問題描述:執(zhí)行ssd環(huán)境配置時(shí)出現(xiàn)上述錯(cuò)誤瓷式。
根據(jù)這篇博客http://blog.csdn.net/u010733679/article/details/52125597上說是gcc版本過低
問題解決:按照上述博客所說升級(jí)一下gcc。
11錯(cuò)誤:執(zhí)行create_data.sh時(shí)報(bào)錯(cuò)语泽,如下圖贸典。
問題分析:上網(wǎng)查找說是numpy數(shù)據(jù)包版本過低。
問題解決:執(zhí)行命令$sudo pip install -U numpy升級(jí)一下numpy數(shù)據(jù)包
12錯(cuò)誤:繼問題11numpy版本錯(cuò)誤問題后湿弦,執(zhí)行create_data.sh 報(bào)如下錯(cuò)誤:
問題分析:綜上問題描述瓤漏,還是python庫沒安裝全
問題解決:按照問題4解決辦法執(zhí)行一次,解決問題。
13錯(cuò)誤:
fatal error:gflags/gflags.h:No such file or directory
如下圖所示颊埃。
解決辦法:
參考網(wǎng)上教程https://blog.csdn.net/artprog/article/details/79271388蔬充,輸入下面指令:
sudo apt-get install libgflags-dev
14錯(cuò)誤:
fatal error:glog/logging.h:No such file or directory
如下圖所示。
解決辦法:
參考網(wǎng)上教程https://blog.csdn.net/artprog/article/details/79271388班利,輸入下面指令:
sudo apt-get install libgoogle-glog-dev
15錯(cuò)誤:
fatal error: cblas.h: No such file or directory
如下如所示饥漫。
解決方法:
sudo apt-get install libblas-dev
16錯(cuò)誤:
fatal error: hdf5.h: No such file or directory
解決方法:
修改Makefile.config文件,定位到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
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
17錯(cuò)誤:
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
解決方法:
sudo apt-get install libopenblas-dev
18錯(cuò)誤:
fatal error: lmdb.h: No such file or directory
解決辦法:
sudo apt-get install liblmdb-dev
19錯(cuò)誤:
nccl.h: No such file or directory
錯(cuò)誤原因:
因?yàn)樾枰郍PU支持訓(xùn)練庸队,在多個(gè) GPU 上運(yùn)行 Caffe 需要使用 NVIDIA NCCL积蜻。
解決辦法:
參照CUDA官網(wǎng)的教程https://www.nvidia.cn/object/caffe-installation-cn.html
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
NCCL 庫和文件頭將安裝在 /usr/local/lib 和 /usr/local/include 中
2019/1/8
因?yàn)橐恍┰颍聛淼墓P記本重新安裝了caffe,這次出現(xiàn)了新的問題彻消。
20錯(cuò)誤:
編譯$make pycaffe生成python的caffe接口時(shí)竿拆,報(bào)錯(cuò)找不到python.h文件。
錯(cuò)誤原因:
因?yàn)榫幾gmake 之前宾尚,Makefile.config文件中python 路徑指定錯(cuò)誤丙笋。
解決辦法:
1.執(zhí)行命令$whereis python, 可以查看python的絕對路徑,然后修改Makeifle.config中的PYTHON_INCLUDE的文件路徑煌贴。
2.執(zhí)行$make -j8,重新編譯caffe.
3.執(zhí)行$make pycaffe,生成caffe的python接口即可御板。
2019/1/25
這次出現(xiàn)的錯(cuò)誤是:google/protobuf/arena.h找不到
21錯(cuò)誤:
.build_release/src/caffe/proto/caffe.pb.h:22:35: fatal error: google/protobuf/arena.h: 沒有那個(gè)文件或目錄
錯(cuò)誤分析:
參考博客:https://blog.csdn.net/qq_33144323/article/details/81259985,可知是protobuf版本沖突問題牛郑。caffe能正確使用的是protobuf-2.6.1版本怠肋。
我裝了ananconda3,其自帶的protobuf版本要高于caffe的需求版本淹朋,而ubuntu自帶的protobuf版本符合笙各。
解決辦法:
依據(jù)上面博客,既可以強(qiáng)制更改protobuf降版本础芍,也可以暫時(shí)關(guān)閉ananconda環(huán)境酪惭,安裝。
我的ananconda安裝的是我的當(dāng)前路徑者甲,沒有裝到系統(tǒng)環(huán)境中,我采用了偷懶的辦法砌创,使用sudo權(quán)限虏缸,跳到ubuntu系統(tǒng)環(huán)境下編譯,其實(shí)相當(dāng)于屏蔽anaconda環(huán)境編譯嫩实,這樣可以在最大保證不改變其他環(huán)境配置的前提下能夠編譯通過刽辙,不過這樣付出的代價(jià)的是后面的pycaffe接口和matcaffe接口,同樣需要執(zhí)行sudo權(quán)限編譯甲献。
2019/12/12
22錯(cuò)誤
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
錯(cuò)誤分析
這次出現(xiàn)的錯(cuò)誤是第錯(cuò)誤17宰缤,但是按照錯(cuò)誤17的解決方法,仍不能解決問題晃洒,查看caffe安裝教程(網(wǎng)址為:http://caffe.berkeleyvision.org/installation.html)發(fā)現(xiàn)需要更改 Makefile.config中變量設(shè)置慨灭。如圖所示。
解決辦法:
在錯(cuò)誤17的解決方法的基礎(chǔ)上球及,修改Makefile.config中變量設(shè)置氧骤,將BLAS值設(shè)置為open。