[Jetson TK1]caffe工具環(huán)境搭建

Caffe在不同的環(huán)境中進(jìn)行移植的時(shí)候需要重新編譯袍嬉,所以在TK1板上安裝caffe時(shí)需要在此armv7(uname -a查詢)和cuda及cudnn環(huán)境下進(jìn)行授嘀〈蠡牵可搜索到的教程最好的為發(fā)明Caffe工具的Yangqing Jia所寫的Jetson TK1教程賈揚(yáng)清寫的TK1上安裝caffe的教程给郊。根據(jù)教程我們可以一步步的來配置Caffe開發(fā)環(huán)境菩浙。
(1)run Nvidia’s installer

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

當(dāng)Reboot成功之后就可以開始安裝一些Caffe環(huán)境所需要的軟件包:

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包纹安,并配置環(huán)境變量:

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的版本有對應(yīng)的關(guān)系尤辱,所以需要小心的選擇和配置。 可以根據(jù)caffe版本和cudnn版本的對應(yīng)關(guān)系下載
caffe versions
cudnn下載
cudnn安裝教程
此處Cuda和Cudnn工具就都配置好了厢岂,可以使用命令nvcc -V查詢安裝的cuda版本光督。
(3)opencv安裝
接著要配置Tegra版本的opencv工具,在上面的cuda6.0工具包 和cuda6.5工具包中都有對應(yīng)的opencv的工具包塔粒,可以根據(jù)需要安裝结借。此處由于我們安裝的是cuda6.0工具,所以下載兩個(gè)opencv工具包 libopencv4tegra_2.4.8.2_armhf.deblibopencv4tegra-dev_2.4.8.2_armhf.deb,然后安裝這兩個(gè)軟件包,這樣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

但是這樣存在一個(gè)問題,就是上面提到的cudnn和caffe工具存在一定的對應(yīng)關(guān)系圃酵,如果直接下載最新的caffe工具包柳畔,有些編譯的軟件包不能向下兼容或者有可能函數(shù)缺失,這樣在安裝和編譯的過程中會帶來不少的問題郭赐。因此還是在上面提到的對應(yīng)關(guān)系處手工下載caffe工具包薪韩。當(dāng)下載好之后進(jìn)入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ìn)行編譯(-j 4表示采用的cpu核數(shù)為4)

make clean  //每一次make失敗之后重新make都需要該命令進(jìn)行清除
make -j 4 all
make -j 4 runtest

當(dāng)編譯成功之后會出現(xiàn)一串的RUN OK 和 PASSED,即為編譯成功捌锭。
(5)安裝過程中遇到的一些問題及解決方法

  • Cudnn報(bào)錯(cuò)俘陷,這是因?yàn)閏affe采用的是最新的版本而cudnn采用的是舊版本里面有些核函數(shù)有變動(dòng)所以不能編譯成功,所以需要安裝適合arm核的最新版的cudnn工具观谦,可以參考NVIDIA Jetson TK1學(xué)習(xí)與開發(fā)——安裝cudnn與caffe拉盾,更換cudnn工具以及其相對應(yīng)的lib庫后(注意backup)就可以成功執(zhí)行make all命令了。
  • 在編譯過程中遇到了unsupported gpu architecture compute_60這個(gè)問題坎匿,這是由于安裝的cuda版本的計(jì)算能力不能達(dá)到要求(在新版本的caffe中可能會出現(xiàn))。此時(shí)可以編輯Makefile.config文件雷激,在CUDA_ARCH選項(xiàng)中替蔬,注釋掉
CUDA_ARCH = ...
            ...
#  -gencode arch=compute_60,code=sm_60 \
#  -gencode arch=compute_61,code=sm_61 \
#  -gencode arch=compute_61,code=sm_61 

此時(shí)重新執(zhí)行make all -j2就可以重新編譯了∈合荆可參考Error when Building GPU docker image for caffe: Unsupported gpu architecture 'compute_60'

  • 如果在執(zhí)行make runtest時(shí)出現(xiàn)undefined symbol: _ZN6google16SetVersionStringERKSs的錯(cuò)誤承桥,如下所示:
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的包進(jìn)行編譯(此處我根據(jù)建議下載和編譯的是gflags-2.0版本)根悼,然后再次運(yùn)行make runtest凶异。如果不通過make runtest則在執(zhí)行examples庫中的例子時(shí)就會出現(xiàn)上面同樣的錯(cuò)誤而不能夠再執(zhí)行下去蜀撑。如果安裝了gflags-2.0版本的還是出現(xiàn)這個(gè)問題,則安裝gflags-1.4版本的剩彬,重新編譯酷麦,然后在make runtest時(shí)不會再報(bào)這個(gè)錯(cuò)誤。如果安裝了gflags-1.4版后make runtest雖然通過但是在轉(zhuǎn)換數(shù)據(jù)類型以及訓(xùn)練時(shí)遇到了如下所示flag缺失的問題喉恋,再更新成gflags-2.0版本的即可(這是gflag版本太低 此時(shí)又安裝gflag2.0版本沃饶,然后重新編譯,passed轻黑。)糊肤。

//
Creating lmdb...
ERROR: unknown command line flag 'backend'
ERROR: unknown command line flag 'backend'
Done.
  • 安裝新版本的protobuf時(shí)首先要執(zhí)行make clean清除掉以前的編譯信息重新編譯∶ケ桑可以參考深度學(xué)習(xí)工具caffe詳細(xì)安裝指南中的protobuf安裝方法馆揉。
  • 安裝了新的protobuf后出現(xiàn)error while loading shared libraries: libprotoc.so.9: cannot open shared object file: No such file or directory的錯(cuò)誤,證明是lib路徑的缺失抖拦,可以參考Ubuntu14.04編譯caffe問題記錄升酣。注意在autogen.sh文件中需要從google下載一個(gè)文件gtest-1.5.0.tar.bz2,注釋掉curl行,并可能需要修改壓縮文件內(nèi)的文件名以保證正確的解壓和拷貝蟋座。
  • 重新編譯make all時(shí)又遇到了新的問題error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file拗踢,這是lib庫中某些lib文件缺失,此時(shí)可以參考error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file向臀。一共遇到了四個(gè)lib文件缺失libcudart.so.6.5巢墅,libcublas.so.6.5,libcurand.so.6.5券膀,libcudnn.so.4只需要copy到對應(yīng)的lib文件夾下并執(zhí)行l(wèi)dconfig即可君纫。
  • 在執(zhí)行make runtest時(shí)又出現(xiàn)新的問題Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0) CUDNN_STATUS_NOT_INITIALIZED 此問題可能是cudnn和caffe的版本不對應(yīng),參考:Digits Error (code 11) #223以及CUDNN_STATUS_NOT_INITIALIZED when using Caffe with cuDNN暫時(shí)修改Makefile.config文件芹彬,將USE_CUDNN:=1注釋掉蓄髓,不采用CUDNN加速。此時(shí)再重新make一次舒帮。
  • 當(dāng)出現(xiàn)warning:clock skew detected. Your build may be incomplete時(shí)会喝,可按照lock skew detected. Your build may be incomplete的方法解決。
find . -type f | xargs -n 5 touch
make clean
make all -j4
  • 當(dāng)出現(xiàn)has modification time in xxxs the future時(shí)表示系統(tǒng)時(shí)間被修改過了 過去修改時(shí)的系統(tǒng)時(shí)間和現(xiàn)在的系統(tǒng)時(shí)間不統(tǒng)一所以會報(bào)出warning玩郊。此問題的出現(xiàn)是由于TK1板沒有接入wifi信號肢执,此時(shí)的系統(tǒng)時(shí)鐘和上一次編譯時(shí)記錄的系統(tǒng)時(shí)鐘發(fā)生沖突而形成的。
  • 當(dāng)出現(xiàn)caffe: libgflags.so.0 missing (error while loading shared libraries)的錯(cuò)誤時(shí),通過搜索(whereis libgflags.so.0)可以看到該文件其實(shí)是存在的译红,所以只需要將其所在目錄添加到所需的環(huán)境變量即可预茄。
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,重新執(zhí)行一篇編譯,記得之前要make clean梧田。
最后再重新走一遍編譯流程:

make clean
make -j 4 all
make -j 4 runtest
//出現(xiàn)一串RUN OK以及最后的PASSED即為成功淳蔼!

此時(shí)如果出現(xiàn)一串RUN OK以及最后的PASSED即為成功!通過以下命令可以測試cpu訓(xùn)練和開啟cudnn加速的gpu訓(xùn)練所用時(shí)長對比,可以從Average時(shí)間看出gpu訓(xùn)練比使用cpu訓(xùn)練縮短了很多時(shí)間裁眯!

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 ***
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹉梨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子穿稳,更是在濱河造成了極大的恐慌存皂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逢艘,死亡現(xiàn)場離奇詭異旦袋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)它改,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門疤孕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人央拖,你說我怎么就攤上這事祭阀。” “怎么了鲜戒?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵专控,是天一觀的道長。 經(jīng)常有香客問我遏餐,道長伦腐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任失都,我火速辦了婚禮柏蘑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粹庞。我一直安慰自己咳焚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布信粮。 她就那樣靜靜地躺著黔攒,像睡著了一般趁啸。 火紅的嫁衣襯著肌膚如雪强缘。 梳的紋絲不亂的頭發(fā)上督惰,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音旅掂,去河邊找鬼赏胚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛商虐,可吹牛的內(nèi)容都是我干的觉阅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秘车,長吁一口氣:“原來是場噩夢啊……” “哼典勇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叮趴,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤割笙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后眯亦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伤溉,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年妻率,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乱顾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宫静,死狀恐怖走净,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囊嘉,我是刑警寧澤温技,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扭粱,受9級特大地震影響舵鳞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琢蛤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一蜓堕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧博其,春花似錦套才、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春傻寂,著一層夾襖步出監(jiān)牢的瞬間息尺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工疾掰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搂誉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓静檬,卻偏偏與公主長得像炭懊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子拂檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容