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

xiaoxiao2021-02-28  108

所需文件及程序 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!
转载请注明原文地址: https://www.6miu.com/read-19218.html

最新回复(0)