[Jetson TK1]caffe工具环境搭建

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)安装过程中遇到的一些问题及解决方法

  • Cudnn报错,这是因为caffe采用的是最新的版本而cudnn采用的是旧版本里面有些核函数有变动所以不能编译成功,所以需要安装适合arm核的最新版的cudnn工具,可以参考NVIDIA Jetson TK1学习与开发——安装cudnn与caffe,更换cudnn工具以及其相对应的lib库后(注意backup)就可以成功执行make all命令了。
  • 在编译过程中遇到了unsupported gpu architecture compute_60这个问题,这是由于安装的cuda版本的计算能力不能达到要求(在新版本的caffe中可能会出现)。此时可以编辑Makefile.config文件,在CUDA_ARCH选项中,注释掉
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'

  • 如果在执行make runtest时出现undefined symbol: _ZN6google16SetVersionStringERKSs的错误,如下所示:
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.
  • 安装新版本的protobuf时首先要执行make clean清除掉以前的编译信息重新编译。可以参考深度学习工具caffe详细安装指南中的protobuf安装方法。
  • 安装了新的protobuf后出现error while loading shared libraries: libprotoc.so.9: cannot open shared object file: No such file or directory的错误,证明是lib路径的缺失,可以参考Ubuntu14.04编译caffe问题记录。注意在autogen.sh文件中需要从google下载一个文件gtest-1.5.0.tar.bz2,注释掉curl行,并可能需要修改压缩文件内的文件名以保证正确的解压和拷贝。
  • 重新编译make all时又遇到了新的问题error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file,这是lib库中某些lib文件缺失,此时可以参考error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file。一共遇到了四个lib文件缺失libcudart.so.6.5,libcublas.so.6.5,libcurand.so.6.5,libcudnn.so.4只需要copy到对应的lib文件夹下并执行ldconfig即可。
  • 在执行make runtest时又出现新的问题Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0) CUDNN_STATUS_NOT_INITIALIZED 此问题可能是cudnn和caffe的版本不对应,参考:Digits Error (code 11) #223以及CUDNN_STATUS_NOT_INITIALIZED when using Caffe with cuDNN暂时修改Makefile.config文件,将USE_CUDNN:=1注释掉,不采用CUDNN加速。此时再重新make一次。
  • 当出现warning:clock skew detected. Your build may be incomplete时,可按照lock skew detected. Your build may be incomplete的方法解决。
find . -type f | xargs -n 5 touch
make clean
make all -j4
  • 当出现has modification time in xxxs the future时表示系统时间被修改过了 过去修改时的系统时间和现在的系统时间不统一所以会报出warning。此问题的出现是由于TK1板没有接入wifi信号,此时的系统时钟和上一次编译时记录的系统时钟发生冲突而形成的。
  • 当出现caffe: libgflags.so.0 missing (error while loading shared libraries)的错误时,通过搜索(whereis libgflags.so.0)可以看到该文件其实是存在的,所以只需要将其所在目录添加到所需的环境变量即可。
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 ***
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容