您的位置:首页 > Web前端

ubuntu16.04下,安装caffe+cuda8.0+cudnn5.1(附各种错误解决)

2017-05-05 11:27 375 查看
所需文件及程序

1,caffe

2,cuda8.0

3,cudnn5.1

1,NIVIDA显卡驱动安装

先禁用nouveau驱动:(本机只有独显,GTX780Ti,如果是独显+核显的可能不一样)

先去 /etc/modprobe.d/blacklist.conf中

最后一行加上 blacklist nouveau,保存

然后 sudo update-initramfs -u

重启,输入lsmod | grep nouveau

如果没有输出,表明禁用成功

然后ctrl+alt+f2,登录,sudo service lightdm stop
然后安装驱动sudo sh nvidia.run(具体可网上搜索linux nvidia驱动安装)

2017.7.31 更新:

如果装了显卡驱动后发现无法登录图形界面,黑屏或者登不进去,则重新安装驱动,注意把命令改为

sudo ./nvidia.run –no-x-check –no-nouveau-check –no-opengl-files

三个参数说明如下:

–no-x-check 安装驱动时关闭X服务

–no-nouveau-check 安装驱动时禁用nouveau

–no-opengl-files 只安装驱动文件,不安装OpenGL文件(双显卡情况下,如果安装,会覆盖负责GUI显示那块显卡的,导致不工作,参考这:有没有双显卡笔记本在Ubuntu下使用cuda的解决方案?

参考:【解决】Ubuntu安装NVIDIA驱动后桌面循环登录问题

2,安装cuda8.0

里面有个安装显卡驱动打选项,跳过

其他默认

解压cudnn文件,

进入里面打include目录

sudo cp cudnn.h /usr/local/cuda/include/

切换到lib目录:cd ~/cuda/lib64 
sudo cp lib* /usr/local/cuda/lib64/

(下面这些更新链接可以不用做)

更新链接:

cd /usr/local/cuda/lib64/

我的cudnn链接文件是libcudnn.so.5.1.10

先把libcudnn.so libcudnn.so.5删除

 sudo rm libcudnn.so libcudnn.so.5

然后创建链接

sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5

sudo ln -s libcudnn.so.5 libcudnn.so

(确保libcudnn.so链接的是cudnn文件夹里面打那个文件!)

设置环境变量

sudo vim /etc/profile

末尾加入

export PATH="/usr/local/cuda/bin:$PATH"

保存;

创建链接文件

sudo vim /etc/ld.so.conf.d/cuda.conf

输入

/usr/local/cuda/lib64

保存;

sudo ldconfig使链接生效

3.生成cuda samples测试

切换到samples文件夹下

cd /home/hy/NVIDIA_CUDA-8.0_Samples

sudo make all -j8

我电脑是8核所以用-j8

完成之后,切换到

/home/hy/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release

运行deviceQuery

./deviceQuery

出现如下信息

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 780 Ti"

  CUDA Driver Version / Runtime Version          8.0 / 8.0

  CUDA Capability Major/Minor version number:    3.5

  Total amount of global memory:                 3013 MBytes (3159031808 bytes)

  (15) Multiprocessors, (192) CUDA Cores/MP:     2880 CUDA Cores

  GPU Max Clock rate:                            1150 MHz (1.15 GHz)

  Memory Clock rate:                             3500 Mhz

  Memory Bus Width:                              384-bit

  L2 Cache Size:                                 1572864 bytes

  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)

  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers

  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers

  Total amount of constant memory:               65536 bytes

  Total amount of shared memory per block:       49152 bytes

  Total number of registers available per block: 65536

  Warp size:                                     32

  Maximum number of threads per multiprocessor:  2048

  Maximum number of threads per block:           1024

  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)

  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)

  Maximum memory pitch:                          2147483647 bytes

  Texture alignment:                             512 bytes

  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)

  Run time limit on kernels:                     Yes

  Integrated GPU sharing Host Memory:            No

  Support host page-locked memory mapping:       Yes

  Alignment requirement for Surfaces:            Yes

  Device has ECC support:                        Disabled

  Device supports Unified Addressing (UVA):      Yes

  Device PCI Domain ID / Bus ID / location ID:   0 / 2 / 0

  Compute Mode:

     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX 780 Ti

Result = PASS

成功

4.安装python

我安装的是Anaconda3-4.2.0-Linux-x86_64.sh,里面已经带了很多包了

如果是用系统自带的python,还需要安装很多模块

5.编译caffe

安装依赖:

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 libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install libatlas-base-dev

修改配置文件:

cd /home/hy/caffe-master 

cp Makefile.config.example Makefile.config 

将USE_CUDNN := 1 取消注释

在INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include后面打上一个空格

然后添加/usr/include/hdf5/serial

在/usr/lib/x86_64-linux-gnu目录下,

sudo ln libhdf5_serial.so.10.1.0 libhdf5.so

sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

否则会提示:

/usr/bin/ld: 找不到 -lhdf5_hl

/usr/bin/ld: 找不到 -lhdf5

如果编译python接口:

在配置文件里找到python相关,我用的是anaconda:

# 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.5m \

                  $(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include

#注意,上面打HOME变量是系统默认的/home/用户名

这一行取消注释

# Uncomment to support layers written in Python (will link against Python libs)

WITH_PYTHON_LAYER := 1

如果是python3编译,需要取消注释

PYTHON_LIBRARIES := boost_python3 python3.5m

否则会报错:/python/caffe/_caffe.so: undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

python3编译打话,还要改一个(不推荐python3):

cd x86_64-linux-gnu/

sudo ln -s libboost_python-py35.so libboost_python3.so

否则会报以下错误:

/usr/bin/ld: 找不到 -lboost_python3

collect2: error: ld returned 1 exit status

如果要编译matlab接口:

 MATLAB_DIR := /home/hy/MATLAB/R2016b #取消注释,改为你的matlab路径

开始编译:

cd /home/hy/caffe

make all -j8

make test -j8

make runtest

编译python接口

make pycaffe

pycaffe编译成功后,把caffe的python接口目录添加到python的搜索路径中,我的方法是

在/home/hy/~/.bashrc文件中声明:

export PYTHONPATH="/home/hy/caffe-master/python:$PYTHONPATH"

编译matcaffe接口

make matcaffe

6.编译主程序时的问题:

1,make runtest出现:

error while loading shared libraries: libhdf5_hl.so.10: cannot open shared object file: No such file or directory

或者

error while loading shared libraries: libhdf5.so.10: cannot open shared object file: No such file or directory

系统没有这个东西,anaconda3里面有,复制到系统那边:

cd /home/hy/anaconda3/lib

sudo cp libhdf5_hl.so.10.1.0 /usr/lib/x86_64-linux-gnu/

sudo cp libhdf5.so.10.2.0 /usr/lib/x86_64-linux-gnu/

cd /usr/lib/x86_64-linux-gnu

sudo ln -s libhdf5_hl.so.10.1.0 libhdf5_hl.so.10

sudo ln -s libhdf5.so.10.2.0 libhdf5.so.10

保存

sudo ldconfig

如果系统里有,直接 sudo ldconfig

2,使用时发现找不到caffe.pb.h

fatal error: caffe/proto/caffe.pb.h: 没有那个文件或目录

cd /home/hy/caffe-master/src/caffe/proto

protoc --cpp_out=./ caffe.proto

这样就生成那两个文件了

3,Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0)  CUDNN_STATUS_INTERNAL_ERROR

我这里的原因是,刚刚用syder跑了一下tensorflow,显卡被占用了没关,我关掉spyder就好了

4, 一直报未定义引用的问题

.build_release/lib/libcaffe.so: undefined reference

先把Makefile.config中的python编译注释掉

后面再编译,否则和anaconda的一些包冲突了


7.python中 import caffe的几个问题:


1,../lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/hy/caffe-master/python/caffe/../../build/lib/libcaffe.so.1.0.0-rc5)

切换到这个文件目录, 用 strings libstdc++.so.6 | grep GLIBC 查看版本

再到/usr/lib/x86_64-linux-gnu中查看版本

我这里是anaconda那个比较旧,就把系统那个链接文件复制过去

然后更新链接:

cd /usr/lib/x86_64-linux-gnu

cp libstdc++.so.6.0.21 /home/hy/anaconda3/lib/

cd /home/hy/anaconda3/lib/

sudo rm libstdc++.so.6

sudo ln -s libstdc++.so.6.0.21 libstdc++.so.6

2,../lib/libgomp.so.1: version `GOMP_4.0' not found (required by /usr/lib/x86_64-linux-gnu/libsoxr.so.0)

和上面同理,把/usr/lib/x86_64-linux-gnu中那个文件复制到anaconda中,更新链接

cd /usr/lib/x86_64-linux-gnu

sudo cp libgomp.so.1.0.0 /home/hy/anaconda3/lib/

cd /home/hy/anaconda3/lib/

sudo rm libgomp.so.1 

sudo rm libgomp.so

sudo ln -s libgomp.so.1.0.0 libgomp.so.1

sudo ln -s libgomp.so.1.0.0 libgomp.so

3,Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.

安装mkl模块即可,我用anaconda,所以
conda install mkl

如果还不行

conda install nomkl

(参考:https://github.com/BVLC/caffe/issues/3884)

4,import caffe出现了

python   ibcaffe.so.1.0.0-rc5: ZNK6google8protobuf7Message11GetTyp

之类的错误,然而在系统的python可以用

解决:

把anaconda的protobuf删除了,文件夹里面的protobuf.so.10相关的也删除了,复制系统的protobuf.so.9相关的

然后出现了

Cannot load libmkl_avx2.so or libmkl_def.so

的错误,解决:

conda install nomkl numpy scipy scikit-learn numexpr

conda remove mkl mkl-service


8.make matcaffe问题


MEX-file 'caffe/matlab/+caffe/private/caffe_.mexa64' 无效:

caffe/matlab/+caffe/private/caffe_.mexa64: undefined

symbol: _ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE。

 

出错 caffe.set_mode_cpu (line 5)

caffe_('set_mode_cpu');

 

出错 caffe.run_tests (line 6)

caffe.set_mode_cpu();

解决:

注意到其中的symbol_ZN2cv8imencodeERKNSt7_,可以看出错误是和方法imencoder相关的,而这个方法来自OpenCV库。

Caffe在编译的时候需要指定OpenCV的版本和位置,这个时候Caffe的库是链接到系统安装的OpenCV库的;使用make matcaffe命令编译Caffe的MATLAB接口的时候却是链接到MATLAB自带的OpenCV库。

解决办法是首先将MATLAB自带的OpenCV中的三个软符号链接文件备份,其次删除这三个软符号链接文件,再次重新建立这三个软符号链接文件:

libopencv_core.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9

libopencv_highgui.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9

libopencv_imgproc.so.2.4 -> /usr/lib/x86_64-linux-gnu/libopencv_imgpro

参考:http://cs2.swfc.edu.cn/~zyl/?p=2524

如果出现一种奇怪的错误,忘记记录了,好像是makefile.config中的matlab依赖与python依赖冲突了,

这时可以先编译python后,再把makefile.config的python相关注释

再编译matlab!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: