本文根據我編譯時出現的一些錯誤,參考了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,做的一些記錄,以便以后備用。
系統環境做一下說明:
ubuntu14.04LTS,CUDA 8.0, ?cudnn 5.0, caffe :官方發布的caffe
(后來實驗配置環境多了,發現問題大同小異,上述系統版本號是我第一次配置時的系統信息,不一定必須遵循,只要你的Ubuntu 和cuda,cudnn 版本號對應就行,這個對應關系網上可以查到,在此就不復制了)。
錯誤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
錯誤描述:如上圖顯示,未定義的引用“TIFFReadRGBAStrip@LIBTIFF_4.0”,說明是libtiff庫未指明,
解決辦法:執行下面命令操作查找對應庫路徑,并添加
$ldconfig -p|grep libtiff #這個指令是查找庫索引
下圖是我查找到的鏈接關系
$ export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ #這個指令是將路徑添加至配置文件中
然后再編譯make all,就可以繼續進行下面測試了。
$make clean # 清理上次編譯錯誤記錄
$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....
錯誤描述:這個是因為cplus文件索引路徑錯誤問題,我安裝caffe是用的是anaconda2,一些路徑出了問題,將python對應路徑添加進去就好
解決辦法:如下
$export CPLUS_INCLUDE_PATH=/usr/include/python2.7
然后再編譯make all,就可以繼續進行下面測試了。
$make clean# 清理上次編譯錯誤記錄
$make all -j8
2017/10更新:
問題描述:前一段時間服務器又歇菜了,項目組的同學重裝系統后,發現正常步驟安裝caffe后,老是找不到pyconfig.h文件,也就是上面這個問題。可是檢查的時候路徑,環境變量什么都沒問題。后來又把caffe卸了重裝好幾次,還是這個問題。今早又重新裝載的時候,git clone 時,報下面這個錯:
以前一直以為是權限問題,沒想太多,直接指令前面加sudo執行了。后來查了一下這個問題,在這篇博客(http://blog.csdn.net/superior_yong/article/details/62041526)中提到了這個問題,并給出了解決方案。如下圖。
問題分析:好吧,那我查看一下我的根目錄下的.config文件夾,發現我的這個文件加的所有者是root。可能是這個原因,跨權限調用文件的原因,造成后面的一系列編譯錯誤吧。
解決辦法:
參照這篇博客(http://www.linuxidc.com/Linux/2015-03/114695.htm),我把文件夾所有者改了回來,編譯發現沒有錯了,都通過了。
3.錯誤
ImportError: No module named Cython.Distutils
解決辦法:
安裝Cython
$sudo apt-get install cython
4錯誤
make pycaffe后,還有一些庫找不到,我自己測試,這個問題也適用于基于CAFFE 平臺的的其他神經網絡,例如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這個文件記錄caffe的Python接口所需要的所有函數庫,執行上面語句便可依次檢查是否所需模塊都安裝,有的話自動跳過或升級,沒有的話自動安裝。
5錯誤
由于服務器桌面系統經常崩盤,找售后他們又重裝了系統,所以所有的環境得重新配置。執行make all 時,發現了下面的錯誤。經排查發現是cudnn安裝配置錯誤。
查到,博客http://blog.csdn.net/u011070171/article/details/52292680,給的解釋說,這是因為當前版本的caffe的cudnn實現與系統所安裝的cudnn的版本不一致引起的。上官網查了了一下caffe對cuda相關要求,顯示如下:
以上判斷是caffe版本過舊,cudnn版本太新。下面就對癥下藥:
解決辦法1:(博客中給的辦法)
1.將./include/caffe/util/cudnn.hpp 換成最新版的caffe里的cudnn的實現,即相應的cudnn.hpp.
2. 將./include/caffe/layers里的,所有以cudnn開頭的文件,例如cudnn_conv_layer.hpp。? 都替換成最新版的caffe里的相應的同名文件。
3.將./src/caffe/layer里的,所有以cudnn開頭的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。
都替換成最新版的caffe里的相應的同名文件。
rbgirshick的py-faster-rcnn實現,因為其cudnn實現為舊版本的實現,所有出現了以上問題.
解決辦法2:(降低cudnn版本)
將之前安裝的/usr/local/cuda-8.0/l路徑下的cudnn的文件刪除,按照網上教程重新安裝v5.0版,文件關聯一下,就好
解決辦法3:(更換新版本的caffe)
去github上下載新版的caffe,把caffe重新按照官方教程安裝配置一遍。
6錯誤
運行make runtest,一直報錯
Checkfailed:status== CUDNN_STATUS_SUCCESS (3vs.0)? CUDNN_STATUS_BAD_PARAM
錯誤描述:按照http://www.cnblogs.com/penguinliong/p/6351215.html這篇博客說是GPU被占用,可是我運行$nvidia-smi查看顯示,說沒有進程調用GPU,經排查還是cudnn的安裝問題,因為服務器是多人在使用,被別人裝了兩個版本的cudnn。
解決辦法:刪掉一個cudnn,重新安裝配置連接,然后再編譯make all,就可以繼續進行下面測試了。
$make clean# 清理上次編譯錯誤記錄
$make all -j8
7錯誤
今天在給師姐裝caffe時,遇到了Python接口無法調用的問題,具體問題描述如下:
按照正常安裝步驟,執行$make all,$make test , $make runtest ,$make pycaffe都正常。但是$Python打開Python編譯器后,執行import caffe調用caffe的Python接口是出現錯誤:No module named _caffe,網上查找大部分解釋說是 make pycaffe 編譯出錯,沒有正確生成Python腳本文件。
解決辦法:
$make clean# 清理上次編譯錯誤記錄
用sudo 超級用戶權限重新執行上面make all ,make pycaffe指令。
需要注意的是,如果錯誤是 no module named caffe ,可能是你的caffe路徑配置錯誤,執行下面命令,將caffe/python/環境變量路徑添加.bashrc文件中。
$sudo vim ~/.bashrc #打開.bashrc文件
在文件最后添加下面指令
export PYTHONPATH=/home/(你的用戶名)/caffe(你的caffe安裝目錄)/python:$PYTHONPATH#這里也可以使用~/caffe/pyhon相對路徑
關閉文件, 輸入下面指令,是環境變量生效,
$source ~/.bashrc
然后,在Python編譯器中import caffe,測試應該可以正常調用caffe。
8錯誤
還是上面的接口問題,按照錯誤7解決no module問題后,再次測試出現新的錯誤如下:
錯誤描述:如上圖最后一行所示,顯示運行時錯誤,網上找問題說是numpy錯誤。
解決辦法:更新numpy模塊,執行下面語句更新。
$sudo pip install numpy --upgrade
9錯誤
環境配置好后,做手寫體網絡測試,執行 (在caffe安裝目錄下)
$sudo examples/mnist/train_lenet.sh
出現如下錯誤
問題描述:出現這種錯誤是由于訓練數據沒有準備好。
解決辦法:(以下命令都在caffe安裝目錄下執行)
$.data/mnist/get_mnist.sh#準備數據
$.examples/mnist/create_mnist.sh#生成caffe指定數lmdb據格式
$.examples/mnist/train_lenet.sh#訓練模型
更復雜的情況看https://github.com/BVLC/caffe/issues/2709
其他問題以后發現繼續補充。
2017/10更新:
10錯誤:/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array
問題描述:執行ssd環境配置時出現上述錯誤。
根據這篇博客http://blog.csdn.net/u010733679/article/details/52125597上說是gcc版本過低
問題解決:按照上述博客所說升級一下gcc。
11錯誤:執行create_data.sh時報錯,如下圖。
問題分析:上網查找說是numpy數據包版本過低。
問題解決:執行命令$sudo pip install -U numpy升級一下numpy數據包
12錯誤:繼問題11numpy版本錯誤問題后,執行create_data.sh 報如下錯誤:
問題分析:綜上問題描述,還是python庫沒安裝全
問題解決:按照問題4解決辦法執行一次,解決問題。
13錯誤:
fatal error:gflags/gflags.h:No such file or directory
如下圖所示。
解決辦法:
參考網上教程https://blog.csdn.net/artprog/article/details/79271388,輸入下面指令:
sudo apt-get install libgflags-dev
14錯誤:
fatal error:glog/logging.h:No such file or directory
如下圖所示。
解決辦法:
參考網上教程https://blog.csdn.net/artprog/article/details/79271388,輸入下面指令:
sudo apt-get install libgoogle-glog-dev
15錯誤:
fatal error: cblas.h: No such file or directory
如下如所示。
解決方法:
sudo apt-get install libblas-dev
16錯誤:
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錯誤:
/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錯誤:
fatal error: lmdb.h: No such file or directory
解決辦法:
sudo apt-get install liblmdb-dev
19錯誤:
nccl.h: No such file or directory
錯誤原因:
因為需要多GPU支持訓練,在多個 GPU 上運行 Caffe 需要使用 NVIDIA NCCL。
解決辦法:
參照CUDA官網的教程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
因為一些原因,新來的筆記本重新安裝了caffe,這次出現了新的問題。
20錯誤:
編譯$make pycaffe生成python的caffe接口時,報錯找不到python.h文件。
錯誤原因:
因為編譯make 之前,Makefile.config文件中python 路徑指定錯誤。
解決辦法:
1.執行命令$whereis python, 可以查看python的絕對路徑,然后修改Makeifle.config中的PYTHON_INCLUDE的文件路徑。
2.執行$make -j8,重新編譯caffe.
3.執行$make pycaffe,生成caffe的python接口即可。
2019/1/25
這次出現的錯誤是:google/protobuf/arena.h找不到
21錯誤:
.build_release/src/caffe/proto/caffe.pb.h:22:35: fatal error: google/protobuf/arena.h: 沒有那個文件或目錄
錯誤分析:
參考博客:https://blog.csdn.net/qq_33144323/article/details/81259985,可知是protobuf版本沖突問題。caffe能正確使用的是protobuf-2.6.1版本。
我裝了ananconda3,其自帶的protobuf版本要高于caffe的需求版本,而ubuntu自帶的protobuf版本符合。
解決辦法:
依據上面博客,既可以強制更改protobuf降版本,也可以暫時關閉ananconda環境,安裝。
我的ananconda安裝的是我的當前路徑,沒有裝到系統環境中,我采用了偷懶的辦法,使用sudo權限,跳到ubuntu系統環境下編譯,其實相當于屏蔽anaconda環境編譯,這樣可以在最大保證不改變其他環境配置的前提下能夠編譯通過,不過這樣付出的代價的是后面的pycaffe接口和matcaffe接口,同樣需要執行sudo權限編譯。
2019/12/12
22錯誤
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
錯誤分析
這次出現的錯誤是第錯誤17,但是按照錯誤17的解決方法,仍不能解決問題,查看caffe安裝教程(網址為:http://caffe.berkeleyvision.org/installation.html)發現需要更改 Makefile.config中變量設置。如圖所示。
解決辦法:
在錯誤17的解決方法的基礎上,修改Makefile.config中變量設置,將BLAS值設置為open。