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

转载自:http://blog.csdn.net/ying86615791/article/details/71194209

所需文件及程序
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)/anaconda3PYTHONINCLUDE:= (ANACONDA_HOME)/include \
                  (ANACONDAHOME)/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)<br>
切换到这个文件目录, 用 strings libstdc&#43;&#43;.so.6 | grep GLIBC 查看版本<br>
再到/usr/lib/x86_64-linux-gnu中查看版本<br>
我这里是anaconda那个比较旧,就把系统那个链接文件复制过去<br>
然后更新链接:<br>
cd /usr/lib/x86_64-linux-gnu<br>
cp libstdc&#43;&#43;.so.6.0.21 /home/hy/anaconda3/lib/<br>
cd /home/hy/anaconda3/lib/<br>
sudo rm libstdc&#43;&#43;.so.6<br>
sudo ln -s libstdc&#43;&#43;.so.6.0.21 libstdc&#43;&#43;.so.6<br>
<br>
<br>
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!

猜你喜欢

转载自blog.csdn.net/Xiongchao99/article/details/79099173