前言
本文主要使用兩種方法來配置Caffe以及在發(fā)布自己配置過程中遇到的問題和解決方案秆吵,以供大家參考奸披。一種是基于系統(tǒng)本身的Python環(huán)境坟漱,無需安裝Anaconda3竟纳,另外一種是基于Anaconda3的獨(dú)立Python環(huán)境搞莺。
安裝的前提是需要已經(jīng)進(jìn)行顯卡驅(qū)動息罗、CUDA、CUDNN的安裝以及Opencv的安裝才沧,如果沒有安裝可以參考Ubuntu18.04 安裝顯卡驅(qū)動阱当、CUDA、CUDNN糜工,Ubuntu18.04配置Opencv3.4.9弊添。
其次要提到的是Caffe開源代碼(這里的地址是我鏈接到碼云上的,下載會比github快很多)捌木,目前對應(yīng)的Python版本是3.6油坝,這一步在后面的配置中會提到。
無需安裝Anaconda3的caffe配置
這種方式相對比較簡單刨裆,且不容易出錯澈圈,但是我在配置到最后一步的時候卻發(fā)生使用上出了問題,原因是似乎是多操作了一步帆啃,因此喜歡簡單方法的建議謹(jǐn)慎嘗試瞬女。
1.安裝必要的依賴包
$ 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
一定要確保所有的依賴包都正常安裝了,如果沒有可以嘗試apt update一下
2.更改默認(rèn)Python
終端輸入python查看版本努潘,如果默認(rèn)不是python3诽偷,則在終端輸入:
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
執(zhí)行完上述兩行命令之后在終端輸入python,如果第一行信息是3.6疯坤,則成功报慕。
如果要切換到Python2,執(zhí)行:
$ sudo update-alternatives --config python
3.下載caffe開源庫
$ git clone https://gitee.com/notalone0125/caffe.git
4.進(jìn)行編譯前的配置更改
$ cd caffe
$ sudo cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config
/#修改Makefile.config文件
1.應(yīng)用 cudnn
將 #USE_CUDNN := 1
修改成:
USE_CUDNN := 1
2.應(yīng)用 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
5.刪掉compute_20压怠,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
/#
$ sudo gedit Makefile
/#修改Makefile文件
1.將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
2.將:
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
3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35 #py35需要改為你自己的python版本眠冈,如py34,py33
/#
5.開始編譯
在 caffe 目錄下執(zhí)行 :
$ make all -j8
這一步前面如果配置正確就應(yīng)該沒什么問題。
$ make runtest -j8
出現(xiàn)如圖結(jié)果就表示成功菌瘫。
到了這一步蜗顽,在命令行的執(zhí)行python,之后import caffe應(yīng)該就可以正常使用的雨让。提示File "<stdin>", line 1, in <module> ImportError: No module named caffe的話,進(jìn)行一下環(huán)境變量的配置
$ sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
$ source ~/.bashrc
但是在參考文章中說位置支持Python接口雇盖,需要make pycaffe -j8。這一步我嘗試了之后宫患,import caffe就報錯了刊懈,暫時沒有找到原因。如果在上面一步import caffe已經(jīng)可以成功娃闲,先不要進(jìn)行make pycaffe -j8虚汛,看后面能不能正常使用。
關(guān)于更詳細(xì)的操作可以看我的參考文章的第一篇皇帮。我還是想重點(diǎn)講一講第二種方法卷哩。
安裝Anaconda3之后進(jìn)行Caffe環(huán)境的配置
我在操作了make pycaffe -j8之后就報錯了,因此就又折騰了一下在Anaconda3下配置pyhton并且安裝caffe属拾。
1.安裝Anaconda3,這張表上提供了Anaconda以及對應(yīng)的Python版本将谊。我使用的是3.5.2,最好是3.5.2渐白,因為對應(yīng)的caffe里的python是3.6版本的尊浓,這樣會少走很多彎路。
anaconda下載纯衍,這里使用清華鏡像軟件站下載栋齿,會很快。
下載完之后執(zhí)行.sh文件襟诸,并按照第一種方法中的第2步更改默認(rèn)Python.
之后還要更改環(huán)境變量
$ sudo gedit /etc/profile
# 在文件末尾處添加exportPATH=/home/liguangyao/anaconda3/bin:$PATH
$ source ~/.bashrc
此時瓦堵,在終端輸入Python,會看到第一行位Python3.6.5 |Anaconda歌亲,Inc.|.....菇用,這樣就證明默認(rèn)的Python已經(jīng)是Anaconda下的Python3.6.5了。
2.首先安裝Caffe-GPU
$ sudo apt install caffe-cuda
3.基本依賴庫的安裝
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
$ sudo apt-get install 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
4.下載源碼的過程和上面一樣陷揪,只要是文件的配置更改稍有不同惋鸥,參考如下:
/#修改Makefile.config的配置文件
1.將#USE_CUDNN:= 1
取消注釋
2.將#OPENCV_VERSION := 3
取消注釋
3.將#compute_20刪掉,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
4.將#BLAS:= atlas注釋
換成BLAS := open
5.將Python2環(huán)境注銷,換成Anaconda3下的Python環(huán)境悍缠,最后效果:
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6m/site-packages/numpy/core/include
6.將#PYTHON_LIB:= /usr/lib注釋
取消PYTHON_LIB:= $(ANACONDA_HOME)/lib的注釋
7.將#INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
改為
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
/#
/#修改Makefile的配置文件
1將#NVCCFLAGS+= -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
修改為NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
2.將:
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
3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35 #py35需要改為你自己的python版本揩慕,如py34,py33
/#
/#
5.進(jìn)入到caffe主目錄下的python目錄,安裝Python的必要項( -i https://pypi.tuna.tsinghua.edu.cn/simple可以極大提高pip的下載速度)
$ for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done
這一步可能會出現(xiàn)一些紅色報錯扮休,按照下面的方法解決
(1).ERROR: After October 2020 you may experience errors when installing or updating packages
$ pip install python-openstackclient python-glanceclient python-neutronclient -i https://pypi.tuna.tsinghua.edu.cn/simple --use-feature=2020-resolver
(2).錯誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
$ sudo pip install --upgrade python-dateutil
#或者
$ sudo gedit requirements.txt
將#python-dateutil>=1.4,<2
改為python-dateutil
直到for req in $(cat requirements.txt); do pip install -i語句執(zhí)行不出現(xiàn)任何紅色字體并正確執(zhí)行迎卤。
6.進(jìn)入caffe的根目錄下進(jìn)行編譯
$ sudo make clean
$ sudo make all -j4
$ sudo make test -j8
$ sudo make runtest -j8
這些步驟中只要沒提示報錯信息,就代表執(zhí)行成功了玷坠。一般runtest會報錯蜗搔,參見參考文章中Anaconda3配置Caffe的第五篇,比較常見的是錯誤三八堡。
最后樟凄,sudo make pycaffe -j4 //配置pycaffe即可。
參考文章
無Anaconda3配置Caffe
1.Ubuntu18.04 Caffe 安裝步驟記錄(超詳盡)
2.error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法
Anaconda3配置Caffe
1.Ubuntu18.04LTS下基于 Anaconda3 安裝 Caffe-GPU及 Python3.6 + Pycharm + Mnist例子教程(超詳細(xì))
2.ERROR: After October 2020 you may experience errors when installing or updating packages
3.錯誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
4.pycaffe編譯后的配置問題(ModuleNotFoundError: No module named 'caffe'
5.Ubuntu18.04 LTS下Caffe-GPU版本安裝常見錯誤
python降級的靈感來源
1.ubuntu18——ModuleNotFoundError: No module named 'caffe._caffe'
2.Ubuntu 16.04下安裝Caffe解決 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
其他文章
1.完美解決pip下載慢兄渺、下載超時問題(含鏡像網(wǎng)站缝龄,代碼)
2.清華大學(xué)開源軟件鏡像站
3.恢復(fù)anaconda環(huán)境, 卸載anaconda, 重裝anaconda
4.Boost Python 的安裝配置以及示例 (支持python3.x)
5.Linux 編譯boost (for python3)