Ubuntu 16.04下利用Anaconda的沙盒环境安装GPU版本caffe

 最近因为需要跑MobileNetV2-SSDLite的模型,用到的开源代码是基于caffe写的,所以需要在服务器上安装caffe,经过几天的安装与debug,终于安装成功,特此记录。


GPU环境

 由于安装的是GPU版本的caffe,需要cuda和cudnn的支持,因为服务器上已经安装好,所以不再重复操作,没有安装好的可以自行上网查找相关教程。然后这里使用的是cuda8.0.61+cudnn5.1.10。

创建沙盒环境

 通过创建沙盒环境避免安装caffe过程中安装的包影响到base环境,因为使用python2.7,所以使用以下命令创建一个caffe专用沙盒环境:

conda create --name caffe-py27 python=2.7

下载caffe

 进入上一步创建的沙盒环境,根据需要下载官方或经过修改的caffe版本,我这里下载的是weiliu89版本的caffe。

cd ~/anaconda3/envs/caffe-py27/
git clone https://github.com/weiliu89/caffe.git

 如果后面要用到SSD,需要在这里使用以下命令以切换到ssd分支:

git checkout ssd

 此时应该可以在examples文件夹里面找到一个名为ssd的文件夹。

激活环境、安装opencv

 一开始我直接使用conda install opencv安装opencv,导致后面出现版本问题,所以最好一开始就指定安装3.1.0版本的opencv。

conda activate caffe-py27
conda install opencv=3.1.0

制作Makefile.config文件

 因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config。

cd caffe
cp Makefile.config.example Makefile.config

 然后接下来需要对Makefile.config的内容作以下修改:

 a.因为需要使用cudnn,所以去掉对应注释:

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

 b.因为使用的opencv版本为3,所以去掉对应注释:

# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3

 c.根据cuda版本删去/注释掉CUDA_ARCH :=这里对应的行

 像我的话这里就删去了两行:

-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \

 d.因为要使用anaconda,需要注释掉默认使用的python2.7,然后将对应使用anaconda的注释去掉,并将ANACONDA_HOME修改为自己的anaconda地址。

# 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/chenjiarong/anaconda3/envs/caffe-py27
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		  $(ANACONDA_HOME)/include/python2.7 \
		  $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

 同时需要修改

# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

 e.若要使用python来编写layer,可以去掉对应注释:

# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

 f.使用Ubuntu的话需要修改以告诉caffe你的hdf5的地址:

# Whatever else you find you need goes here.
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

 g.如果后面有error出现try using -rpath or -rpath-link的提示的话,可以增加:

LINKFLAGS := -Wl,-rpath,$(ANACONDA_HOME)/lib

修改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

编译caffe

 现在完成了前期工作,开始编译caffe:

make all -j8
make test -j8
make runtest -j8

 成功的话最后可以看到诸如以下的输出:

[ RUN      ] ArgMaxLayerTest/0.TestCPUMaxValTopK
[       OK ] ArgMaxLayerTest/0.TestCPUMaxValTopK (1 ms)
[----------] 12 tests from ArgMaxLayerTest/0 (45 ms total)

[----------] Global test environment tear-down
[==========] 2101 tests from 277 test cases ran. (992402 ms total)
[  PASSED  ] 2101 tests.

 如果前面切换到ssd分支的话应该会输出:

[ RUN      ] Im2colLayerTest/2.TestGradientForceND
[       OK ] Im2colLayerTest/2.TestGradientForceND (3773 ms)
[----------] 8 tests from Im2colLayerTest/2 (33252 ms total)

[----------] Global test environment tear-down
[==========] 2361 tests from 309 test cases ran. (719642 ms total)
[  PASSED  ] 2361 tests.

 至此就说明caffe编译成功了。

配置环境

 编译pycaffe

make pycaffe -j8

 加入环境变量

echo export PYTHONPATH="/home/chenjiarong/anaconda3/envs/caffe-py27/caffe/python" >> ~/.bashrc

 保存退出

source ~/.bashrc

测试

 进入caffe环境

conda activate caffe-py27

 打开python

python

 导入caffe

>>>import caffe

 若不报错则表示caffe的python接口已正确编译,当然通常不会这么好运,这是我导入时出现的错误:

ImportError: No module named skimage.io

 所以使用

conda install scikit-image

 再次导入,出现错误:

AttributeError: 'module' object has no attribute 'nancumprod'

 猜测还是因为一些依赖库没有安装,直接使用:

conda install cython scikit-image protobuf scikit-learn ipython pandas jupyter tqdm lxml pillow

 一股脑将所有依赖库统统给安装了,那其实前一步直接使用这个就行了。。。

 然后可以验证一下:

python -c "import caffe;print caffe.__version__"

 我这里输出的是1.0.0(前面切换到ssd分支的话这里输出1.0.0-rc3),终于成功安装了caffe!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值