caffe--1--TX2中安装caffe的详细步骤与教程(易报错点)

版权声明:本博客所有内容以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,谢谢! https://blog.csdn.net/qq_33869371/article/details/87945613

一、TX2中caffe的安装

平台:英伟达NVIDIA TX2开发板  环境:Ubuntu16.04, python2.7,cuda8.0,cudnn6.0.2.  OpenCV 2.4.13.1

准备工作:

1. 了解TX2。最重要的一点是:它用的arm结构,是aarch-linux,不是x86_64-linux,也不是i386-linux。这里附官方简介:

http://www.nvidia.cn/object/embedded-systems-dev-kits-modules-cn.html

安装过程:

1. 安装各种包以及依赖

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install libatlas-base-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-de
2. 安装python

sudo apt-get install python-pip 安装pip 
这里我们用pip安装一些python需要的依赖包,不过为了避免各种问题,也可以通过apt-get安装,反正我这两种方式都安装了一遍(-.-)
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

3. 安装Opencv(TX2已经自带,检查后可跳过这一步)

查看opencv版本:

pkg-config --modversion opencv
若没有跳出opencv的版本,则需安装opencv:

sudo apt-get install -y libopencv-dev

4. 安装Cuda(TX2已经自带,检查后可跳过这一步)

查看cuda版本:

cat /usr/local/cuda/version.txt
若没有跳出cuda的版本,则需手动安装cuda:

这里附安装连接:https://blog.csdn.net/jonms/article/details/79318566

5. 安装Cudnn(需要手动安装,不可跳过)

A. 确定已经安装的Cuda版本,以Cuda9.0为例,到官网https://developer.nvidia.com/rdp/cudnn-download下载相应的库文件(下载前需要登录网站,因此需要进行注册)PS:一定要去官网下载对应的版本,不要图省事去什么网盘之类的,只有才是最安全的。

B. 进入下载目录并解压

cd /home/nvidia/Downloads
sudo tar xvf cudnn-9.0-linux-x64-v7.1.tgz
C. 复制头文件和动态链接库
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/* /usr/local/cuda/lib64/
cd /usr/local/cuda/lib64/
ls -a(查看libcudnn版本;很多地方需要根据文件的版本然后操作,后面不再提示)
sudo chmod +r libcudnn.so.7.1.2
后面很多地方需要查看文件名称。学会使用 ls -a(查看当前目录下所有文件)
D. 创建软连接
sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig

6. 安装Caffe


A. 下载caffe

cd ~
mkdir git  //在home下新建一个git文件夹,用来存放那些从github上git下来的文zong件
git clone https://github.com/BVLC/caffe.git    //从github上git caffe


B. 开始安装
cd caffe    //打开到刚刚git下来的caffecp Makefile.config.example Makefile.config 
//将Makefile.config.example的内容复制到Makefile.config
//因为make指令只能make   Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子
 

修改Makefile.config文件(根据技术选型和系统硬件):

1)去掉USE_CUDNN := 1 前面的注释

2)去掉USE_OPENCV := 0 前面的注释,并将0修改为1

3)去掉OPENCV_VERSION := 2.7前面的注释

4)去掉CUSTOM_CXX := g++ 前面的注释

5)在CUDA_ARCH := 后前两行即有*_20和*_21的两行前面添加#最终效果为


//重要的一项
将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS :=  $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
//这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改 

修改Makefile文件

打开Makefile文件,做如下修改,将:

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC$(COMMON_FLAGS)

替换为:

425行:   NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -shared -Xcompiler -fPIC $(COMMON_FLAGS)
-shared -Xcompiler 各自前面都要加空格,否则会出错

在Makefile文件中找到:
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5 hl hdf5
把它改成:
181行:  LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial


 

C. 为hdf5创建链接

\\首先执行下面这句话:
cd /usr/lib/aarch64-linux-gnu
\\这里笔者被坑了很多次,网上几乎所有的教程都是x86_64,给出的是cd /usr/lib/x86_64-linux-gnu,然而TX2并没有这个文件,浪费了笔者很多时间;
笔者没有找到用aarch架构的caffe安装文章,故写下了此博客
\\然后根据情况执行下面两句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:这里的10.1.0和10.0.2根据不同的系统可能对应的数字会不同,比如在ubuntu15.10中其数字就是8.0.2.
\\具体的数字可以在打开的文件中查看对应文件后面跟的数字
PS:查看当前目录下文件,用ls -a
D. Make各种文件

cd ..   \\此时位置应该处于caffe文件夹下
make all -j8  //j4代表计算机cpu有4个核,因此可以多线程一起make,这样make的速度会快很多。
make test -j8
make runtest -j8  (运行出现下图:)


make pycaffe   //如果以后用python来开发的话必须执行这一句,一般不管你是否用python,都会执行这一句

export PYTHONPATH=~/caffe/python:$PYTHONPATH


make distribute


如果执行到这里,那恭喜你,caffe安装完毕;如果没有执行到这里,那很正常,遇到问题不要怕,认真阅读报错信息,多百度谷歌,笔者也遇到了很多问题,卡在了make all -j4上,下面贴出可能会遇到的问题。

caffe安装错误汇总
1. opencv出问题

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
先检查你的opencv版本:

pkg-config --modversion opencv

这种问题很有可能是你的系统中使用的是opencv3,但是你的Makefile.config中没有将OPENCV_VERSION := 3这一句取消注释。
其次,取消注释后还没有解决,则可能是opencv_imgcodecs链接的问题,比较有效的解决方案如下:
把opencv需要的lib添加到Makefile文件中,找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 上面)并修改为:

LIBRARIES += glog gflags protobuf leveldb snappy \        
   lmdb boost_system hdf5_hl hdf5 m \         
   opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

2. Hdf5出问题

LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/ld: cannot find -lhdf5
/usr/bin/ld: cannot find -lhdf5_hl
collect2: error: ld returned 1 exit status
Makefile:567: recipe for target '.build_release/lib/libcaffe.so.1.0.0-rc3' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error  
Lhdf5出问题有很多原因,需要逐一排查:
a. Makefile.config

认真核对Makefile.config里面的内容,尽量不要手敲,直接复制

将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS :=  $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
//这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改 


c. 软连接
软连接创建出错,只需打开对应目录,创建移除原有链接,创建新链接即可:

find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
cd /usr/lib/aarch64-linux-gnu
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:这里的10.1.0和10.0.2根据不同的系统可能对应的数字会不同,比如在ubuntu15.10中其数字就是8.0.2.
\\具体的数字可以在打开的文件中查看对应文件后面跟的数
Ps:学会用dpkg -S libhdf5.so查看看是否有libhdf5.so;没有需安装:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
3. Cudnn出问题

/sbin/ldconfig.real: /usr/local/lib/libcudnn.so.6.5 is not a symbolic link
/sbin/ldconfig.real: /usr/local/lib64/libcudnn.so.6.5 is not a symbolic link
这是软连接创建有问题,libcudnn.so.不是一个符号链接,打开对应目录,创建移除原有链接,创建新链接即可

sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
或者出现这个问题:
NVCC src/caffe/layers/deconv_layer.cu
NVCC src/caffe/layers/cudnn_conv_layer.cu
src/caffe/layers/cudnn_conv_layer.cu(81): error: argument of type "cudnnAddMode_t" is incompatible with parameter of type "const void *"
 detected during instantiation of "void caffe::CuDNNConvolutionLayer<Dtype>::Forward_gpu(const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &, const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &) [with Dtype=float]" 
这是cudnn没有安装成功,原因可能是:
没有去官网下载与cuda版本相对应的cudnn,建议去官网重新下载,按照上面教程重新进行安装;

也有可能是软连接的问题,移除原有软连接重新创建即可。

上述所有方案都不行的话,可以试一试这个:

cd home/nvidia/Downloads
cd cuda/include
sudo cp *.h /usr/local/include/
cd ../lib64
sudo cp lib* /usr/local/lib/
cd /usr/local/lib
sudo chmod +r libcudnn.so.7.1.2
sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
 
4. cuda计算能力警告
如果在编译时产生了CUDA计算能力的警告,解决的方式是将Makefile.config文件的CUDA_ARCH的前两行去掉。

参考:

https://blog.csdn.net/dhaduce/article/details/80155121

https://www.jianshu.com/p/e78c5c321248?tdsourcetag=s_pcqq_aiomsg

猜你喜欢

转载自blog.csdn.net/qq_33869371/article/details/87945613