您的位置:首页 > Web前端

Caffe安装笔记

2016-01-17 16:18 525 查看
本文记录了两种情况下的Caffe 安装,一是在已经装了Centos和cuda的机器上安装,二是从裸机开始。前者由于各个软件版本兼容问题出错较多,后者则相当顺利。

安装1

系统环境

CentOS release 6.4 (Final)

gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

cuda-5.5

必要项安装

按照官网步骤进行安装,安装中卡的时间比较长的一个问题:

执行cmake .. 出现错误:

Could NOT find Atlas (missing: Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY

Atlas_LAPACK_LIBRARY)

解决方案是修改变量BLAS的值,该变量在CMakeFiles.txt中有定义。

cmake -DBLAS=open ..

安装软件包(部分)的版本为:

python
Python 2.7.11 :: Anaconda 2.4.1 (64-bit)


可选项安装项

opencv

为了使用caffe中的ImageData,则必须要设置Makefile.config中的USE_OPENCV=1,此时需要安装opencv.

参考官方安装指南

其中,
yum install ffmpeg ffmpeg-devel
报错
package not found
解决方案为: 在 /etc/yum.repos.d 下新建源dag.repo,内容如下

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1


然后,

yum install ffmpeg ffmpeg-devel


详见这里

安装opencv

下载opencv-2.4.9.zip,解压后执行

cd opencv-2.4.9 && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -D WITH_V4L=ON ..
make -j8
sudo make install


执行make 时报如下的错误:

../../lib/libopencv_highgui.so.2.4.9: undefined reference to `png_set_longjmp_fn'
collect2: ld 返回 1
make[2]: *** [bin/opencv_perf_imgproc] 错误 1
make[1]: *** [modules/imgproc/CMakeFiles/opencv_perf_imgproc.dir/all] 错误 2
make: *** [all] 错误 2


查到png_set_longjmp_fn 是动态链接库libpng.so中的一个函数

ldd libopencv_highgui.so.2.4.9
得到

...
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007f9939b64000)
libpng16.so.16 => /usr/lib64/libpng.so(0x00007f9939922000)
libtiff.so.3 => /usr/lib64/libtiff.so.3 (0x00007f99396bd000)
libjasper.so.1 => /usr/lib64/libjasper.so.1 (0x00007f9939464000)
...


找到被libopencv_highgui.so.2.4.9需要的libpng.so链接库的位置,并执行

readelf -s libpng.so #读取链接库的头文件


发现没有函数字段
png_set_longjmp_fn
,所以做一个硬连接

ln ~/anaconda2/lib/libpng16.so.16  /usr/lib64/libpng.so


这样上述
undefined reference to png_set_longjmp_fn
问题就不会出现。

这里给出一个顺利安装的示例)

安装成功后,将opencv中的cv2.so拷贝到Python的安装目录下,以便可以在Python中导入,否则将出现
ImportError: No module named cv2


cp /usr/local/lib/python2.7/site-packages/cv2.so ~/anaconda2/lib/python2.7/site-packages


python
>>> import cv2
>>> print cv2.__version__
>>>img=cv2.imread("0_Karen_160.png",0)
>>> print img [[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
...,
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]]


如果img是none的话则说明opencv安装有问题,可能是opencv中的libpng包有问题,读取.jpg得到none可能是libjpg有问题,还有一种说法为debug和release的包混合了(详见这里),反正都需要重新安装opencv,安装RELESE版本的设置变量CMAKE_BUILD_TYPE=RELEASE .

至此,opencv 基本安装成功(如果在Python )。在caffe-master目录下的Makefile.config中设置
USE_OPENCV := 1
,并不用取消注释
#OPENCV_VERSION := 3
,否则重新编译caffe到make all时ld将会找opencv 3的一个库
libopencv_imgcodecs.so
,找不到时会报错如下

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so
/usr/bin/ld: cannot find -lopencv_imgcodecs


安装CUDA

因为实验机器上已经安装了CUDA driver 6.0,nvcc 5.5,虽然不是caffe推荐的最佳配置,但是通过注释掉出错的行(不推荐)勉强编译通过。

在Makefile.config文件中
1.注释掉CPU_ONLY := 1
2.更改CUDA_DIR
在caffe-master下执行
make clean
mkdir build && cd build
cmake -DBLAS=open -DUSE_OPENCV=0 ..
make VERBOSE=1 all -j4
make test -j4
make runtest -j4


在执行
make all
时因为cuda版本低报出如下错误:

src/caffe/parallel.cpp:131: 错误:‘struct cudaDeviceProp’没有名为‘isMultiGpuBoard’的成员
src/caffe/parallel.cpp:131: 错误:‘struct cudaDeviceProp’没有名为‘isMultiGpuBoard’的成员
...


解决方法是直接将
src/caffe/parallel.cpp
文件中的相关行注释掉,之后可以顺利编译通过。

注:如果在编译过程中显示检测到的设备数量为0,且出现
Check failed: error == cudaSuccess (3 vs. 0) initialization error
之类的错误则很可能是cuda sdk 和cuda driver 的版本不匹配的问题。

重新编译caffe

更改Makefile.config文件之后需要重新编译caffe

cd caffe-master
rm -rf build
cd build
cmake -DBLAS=open ..
make all -j4
make install -j4
make test -j4
make runtest -j4


源码学习

使用nsight(CUDA Toolkit的一部分)学习caffe源代码

用nsight打开源代码时出错,

java: cairo-misc.c:380:_cairo_operator_bounded_by_source: Assertion `NOT_REACHED’ failed.

原因是没有安装 Cairo Graphics,解决办法是打开时添加参数

nsight -vmargs -Dorg.eclipse.swt.internal.gtk.cairoGraphics=”false”

安装2

先在裸机上装了ubuntu-mate-14.04.2-LTS-desktop-amd64,之后apt-get安装了必要的工具,然后开始安装caffe,出奇地顺利。

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


2.安装cuda

2.1选择cuda版本



2.1执行安装命令

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda


详见cuda官网

3.安装BLAS

sudo apt-get install libatlas-base-dev


4.安装Python (anaconda3)

下载Anaconda3-4.1.0-Linux-x86_64.sh,并执行即可

5.ubuntu其他的依赖

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev


6.安装OPENCV

按照OPENCV官网步骤安装即可

7.编译caffe

7.1先下载caffe,之后修改Makefile.config文件,针对上面的配置的Makefile.config文件见这里

7.2编译安装命令(使用cmake)

cd caffe
mkdir build && cd build
cmake ..
make all -j8
#编译Python接口
make pycaffe
make install -j8
make test -j8
make runtest -j8
make pytest


到此可以去执行caffe example中的例子了。

此外,在python中使用caffe,需要向PYTHONPATH中添加“/path/to/caffe/python”路径。

注:

如果之后修改了Makefile.config文件,则需要重新编译,此时只需要在cmake前面加一条make clean即可。

我在上述过程中,修改了Makefile.config文件而没有进行make clean,导致:

在执行
make runtest -j8
时出现错误:

Check failed: error == cudaSuccess (77 vs. 0)  an illegal memory access was encountered
*** Check failure stack trace: ***


在GPU模式下执行caffe example中的程序时,出现错误:

status == CUBLAS_STATUS_SUCCESS (14 vs. 0) CUBLAS_STATUS_INTERNAL_ERROR.


这些错误在进行
make clean
,然后重新编译就消失了。

参考

1.http://blog.csdn.net/xuanyuansen/article/details/46786597

2.caffe官网:http://caffe.berkeleyvision.org/install_yum.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息