Deep LearningNVIDIA Jetson TX2(TX1)

[Jetson TK1]caffe工具环境搭建

2017-04-14  本文已影响1792人  Ericzhang922

Caffe在不同的环境中进行移植的时候需要重新编译,所以在TK1板上安装caffe时需要在此armv7(uname -a查询)和cuda及cudnn环境下进行。可搜索到的教程最好的为发明Caffe工具的Yangqing Jia所写的Jetson TK1教程贾扬清写的TK1上安装caffe的教程。根据教程我们可以一步步的来配置Caffe开发环境。
(1)run Nvidia’s installer

sudo NVIDIA-INSTALLER/installer.sh
sudo shutdown -r now

当Reboot成功之后就可以开始安装一些Caffe环境所需要的软件包:

sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install libprotobuf-dev protobuf-compiler gfortran \
libboost-dev cmake libleveldb-dev libsnappy-dev \
libboost-thread-dev libboost-system-dev \
libatlas-base-dev libhdf5-serial-dev libgflags-dev \
libgoogle-glog-dev liblmdb-dev gcc-4.7 g++-4.7

(2)Cuda和Cudnn工具安装
此处有官方的安装教程Jetson/Installing CUDA可以参考,然后下载Cuda6.0 for Arm。
cuda6.0工具包
cuda6.5工具包
下载deb包成功之后,我们需要接着安装此deb包,并配置环境变量:

sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-6-0
sudo usermod -a -G video $USER
echo "# Add CUDA bin & library paths:" >> ~/.bashrc
echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc

Cudnn的版本也和Caffe的版本有对应的关系,所以需要小心的选择和配置。 可以根据caffe版本和cudnn版本的对应关系下载
caffe versions
cudnn下载
cudnn安装教程
此处Cuda和Cudnn工具就都配置好了,可以使用命令nvcc -V查询安装的cuda版本。
(3)opencv安装
接着要配置Tegra版本的opencv工具,在上面的cuda6.0工具包 和cuda6.5工具包中都有对应的opencv的工具包,可以根据需要安装。此处由于我们安装的是cuda6.0工具,所以下载两个opencv工具包 libopencv4tegra_2.4.8.2_armhf.deblibopencv4tegra-dev_2.4.8.2_armhf.deb,然后安装这两个软件包,这样opencv工具就配置好了。

sudo dpkg -i libopencv4tegra_2.4.8.2_armhf.deb
sudo dpkg -i libopencv4tegra-dev_2.4.8.2_armhf.deb

(4)caffe工具安装
最便捷的方法就是利用git直接下载最新的caffe工具包,如下所示:

sudo apt-get install -y git
git clone https://github.com/BVLC/caffe.git

但是这样存在一个问题,就是上面提到的cudnn和caffe工具存在一定的对应关系,如果直接下载最新的caffe工具包,有些编译的软件包不能向下兼容或者有可能函数缺失,这样在安装和编译的过程中会带来不少的问题。因此还是在上面提到的对应关系处手工下载caffe工具包。当下载好之后进入caffe主目录:

cd caffe && git checkout dev
cp Makefile.config.example Makefile.config
sed -i "s/# CUSTOM_CXX := g++/CUSTOM_CXX := g++-4.7/" Makefile.config

然后使用命令进行编译(-j 4表示采用的cpu核数为4)

make clean  //每一次make失败之后重新make都需要该命令进行清除
make -j 4 all
make -j 4 runtest

当编译成功之后会出现一串的RUN OK 和 PASSED,即为编译成功。
(5)安装过程中遇到的一些问题及解决方法

CUDA_ARCH = ...
            ...
#  -gencode arch=compute_60,code=sm_60 \
#  -gencode arch=compute_61,code=sm_61 \
#  -gencode arch=compute_61,code=sm_61 

此时重新执行make all -j2就可以重新编译了。可参考Error when Building GPU docker image for caffe: Unsupported gpu architecture 'compute_60'

ubuntu@tegra-ubuntu:~/work/caffe$ make -j 4 runtest
.build_release/tools/caffe
.build_release/tools/caffe: symbol lookup error: .build_release/tools/caffe: undefined symbol: _ZN6google14FlagRegistererC1IiEEPKcS3_S3_PT_S5_
make: *** [runtest] Error 127

证明gflags还是没有安装正确,可以参考caffe安装指南,在schuhschuh/gflags处下载gflags的包进行编译(此处我根据建议下载和编译的是gflags-2.0版本),然后再次运行make runtest。如果不通过make runtest则在执行examples库中的例子时就会出现上面同样的错误而不能够再执行下去。如果安装了gflags-2.0版本的还是出现这个问题,则安装gflags-1.4版本的,重新编译,然后在make runtest时不会再报这个错误。如果安装了gflags-1.4版后make runtest虽然通过但是在转换数据类型以及训练时遇到了如下所示flag缺失的问题,再更新成gflags-2.0版本的即可(这是gflag版本太低 此时又安装gflag2.0版本,然后重新编译,passed。)。

//
Creating lmdb...
ERROR: unknown command line flag 'backend'
ERROR: unknown command line flag 'backend'
Done.
find . -type f | xargs -n 5 touch
make clean
make all -j4
export LD_LIBRARY_PATH=/usr/local/lib
I am also using Ubuntu 32 bit and got this error. Changing the 1099511627776 to 1073741824 in examples/mnist/convert_mnist_data.cpp fixed it.

可以参考这篇文章Problems with MDB in the mnist example然后需要reboot,重新执行一篇编译,记得之前要make clean。
最后再重新走一遍编译流程:

make clean
make -j 4 all
make -j 4 runtest
//出现一串RUN OK以及最后的PASSED即为成功!

此时如果出现一串RUN OK以及最后的PASSED即为成功!通过以下命令可以测试cpu训练和开启cudnn加速的gpu训练所用时长对比,可以从Average时间看出gpu训练比使用cpu训练缩短了很多时间!

CPU-only test 
terminal:./build/tools/caffe time --model=models/bvlc_alexnet/deploy.prototxt
I0413 16:40:36.283255  3707 caffe.cpp:271] Average Forward pass: 6130.44 ms.
I0413 16:40:36.283291  3707 caffe.cpp:273] Average Backward pass: 5817.8 ms.
I0413 16:40:36.283329  3707 caffe.cpp:275] Average Forward-Backward: 11948.8 ms.
I0413 16:40:36.283367  3707 caffe.cpp:277] Total Time: 597442 ms.
I0413 16:40:36.283406  3707 caffe.cpp:278] *** Benchmark ends ***

VS

GPU-only test
terminal:./build/tools/caffe time --model=models/bvlc_alexnet/deploy.prototxt --gpu=0
I0413 16:44:23.592217  6929 caffe.cpp:271] Average Forward pass: 262.872 ms.
I0413 16:44:23.592285  6929 caffe.cpp:273] Average Backward pass: 244.351 ms.
I0413 16:44:23.592348  6929 caffe.cpp:275] Average Forward-Backward: 508.663 ms.
I0413 16:44:23.592429  6929 caffe.cpp:277] Total Time: 25433.1 ms.
I0413 16:44:23.592506  6929 caffe.cpp:278] *** Benchmark ends ***
上一篇下一篇

猜你喜欢

热点阅读