NVIDIA® Jetson Nano 初體驗(一)安裝與測試

撰寫/攝影 CH.Tseng
部落格 https://chtseng.wordpress.com/
Facebook https://www.facebook.com/chenghsun.tseng

Nvidia Jetson是Nvidia為Embedded system所量身打造的運算平台,包含了TK1、TX1、TX2、AGX Xavier以及最新也最小的「Nano」開發板。這一系列的Jetson平台皆包含了一顆NVidia為隨身裝置所開發,內含ARM CPU、NVida GPU、RAM、南北橋等,代號為Tegra的SoC處理器。

Jetson家族比較

TK1 TX1 TX2 AGX Xavier Nano
GPU cores 192 Core 256 Core 256 Core 512 Core 128 Core
CPU 4 core 4 core 6 core 8 core 4 core
Memory 2GB DDR3 4GB DDR4 4GB DDR48GB DDR4

二種版本

16GB DDR4 4GB DDR4
Storage 16GB eMMC 16GB eMMC 32GB eMMC 32GB eMMC SD(開發板)16GB eMMC

(二種版本)

Video Encode 1080p@30 4K@30 (3x) 4K@30 (4x) 4Kp60 / (8x) 4Kp30 4K@30
Video Decode 1080p@60 4K@60 (2x) 4K@60 (2x) 8Kp30 / (6x) 4Kp60 4K@60
WI-FI O O O O X
Bluetooth X O O O X
Power 5W 10W / 15W 7.5W / 15W 10W / 15W / 30W 10W
USB USB 3.0 USB 3.0 + USB 2.0 USB 3.0 + USB 2.0 USB 3.0 + USB 2.0 USB 3.0 + USB 2.0

 

Jetson Nano & Raspberry Pi

下圖可見Jetson Nano與樹莓派在尺寸上差異,雖然兩者都面向maker市場,但功能及配備上有著不小的差異。樹莓派雖然在運算效能上遠遠落後,但是內建WIFI、Bluetooh、Audio,更為小巧的體積及電源耗用,在較為嚴苛的環境仍有其優勢。

Jetson Nano Raspberry Pi
CPU 64-bit Quad-core ARM A57 (1.43 GHz) 1.4 GHz 64-bit quad-core ARM Cortex-A53
GPU 128-Core Nvidia Maxwell Broadcom VideoCore IV
RAM 4GB DDR4 1GB DDR2
WIFI X 802.11ac
Bluetooth X LE 4.2
Ethernet Gigbit Gigbit (300Mbps max)
GPIO 40 pin 40 pin
USB USB 2.0 x 3USB 3.0 x 1 USB 2.0 x 4
Audio X Audio jack
Power 5~10W 400 mA (2.0W)
Price $99 $35
算力 472 Gflops 24 Gflop

 

Jetson Nano的電源供應

目前網路上已經有不少的開箱文及影片了,因此就略過不提。不過,如果您在購買時沒有額外購買電源供應器,僅透過一般PC上的USB port來供電,那麼當Jetson Nano在執行較多的運算或程式時,有極高的機率會直接當機或開不起來。官方建議是Adafruit此款2.5A電源供應器(USD $7.5):https://www.adafruit.com/product/1995

5V 2.5A Switching Power Supply with 20AWG MicroUSB Cable

我在露天找到此款便宜又大碗的4A電源僅TWD $240(接頭為5.5 x 2.1-2.5mm),目前用起來還沒有什麼問題:

Jetson Nano的Power jack可支援到5V 4A的輸入,因此改用Power jack而不使用Micro-USB,在電源供應上會比較穩定,也讓你的Jetson Nano執行起來比較讓人放心,不過記得J48要插上jumper後才會轉為由Power jack來供電(如下圖紅圈)。

下載Image檔及開機

請準備一片16GB以上的SD卡,接著從此網頁下載原廠的image檔(目前 release 2019/07/16),下載後使用Win32 Disk Imager寫入SD卡,插入Jetson Nano後開機便可直接使用了。

SD卡從下圖方向插入,跟樹莓派的前代一樣有彈簧卡榫,但不會有不小心按到彈出的缺點。

開機後的一些設定畫面,由於網路上教學已經很多,因此在此先略過不提。

目前NVidia Jetson系列所使用的Linux OS稱為Linux4Tegra,源碼是修改自Ubuntu 18.04版並針對Nvidia硬體作優化,預裝好了JetPack、cuda、cudnn、openc等軟體,不需要另行安裝。

Virtualenv安裝及設定

[pastacode lang=”markup” manual=”sudo%20apt-get%20install%20virtualenv%20-y%0A%0Amkdir%20envs%3B%20cd%20envs%0A%0Avirtualenv%20%E2%80%93p%20python3%20AI%0A%0Asource%20~%2Fenvs%2FAI%2Fbin%2Factivate%0A%0Aecho%20’%20source%20~%2Fenvs%2FAI%2Fbin%2Factivate%20’%20%3E%3E%20~%2F.bashrc” message=”” highlight=”” provider=”manual”/]

設定OpenCV

已內建安裝了OpenCV,因此並不需要重新安裝,但是需要在python virtual environment中link到site-packages。

[pastacode lang=”markup” manual=”sudo%20find%20%2F%20-name%20%22cv2*%22%0A%0A%5Bsudo%5D%20password%20for%20pi%3A%0A%0Afind%3A%20%E2%80%98%2Frun%2Fuser%2F1000%2Fgvfs%E2%80%99%3A%20Permission%20denied%0A%0A%2Fusr%2Flib%2Fpython2.7%2Fdist-packages%2Fcv2.so%0A%0A%2Fusr%2Flib%2Fpython3.6%2Fdist-packages%2Fcv2.cpython-36m-aarch64-linux-gnu.so%0A%0Acd%20~%2Fenvs%2FAI%2Flib%2Fpython3.6%2Fsite-packages%2F%0A%0Aln%20-s%20%2Fusr%2Flib%2Fpython3.6%2Fdist-packages%2Fcv2.cpython-36m-aarch64-linux-gnu.so” message=”” highlight=”” provider=”manual”/]

測試看看:

看來OpenCV預裝的3.3.1版本不太新,且該版本未支援Deep Neural Networks的DNN模組,不過由於NVidia GPU也尚未支援OpenCV DNN,因此影響不大。

安裝常用的模組

[pastacode lang=”markup” manual=”sudo%20apt-get%20update%0A%0Asudo%20apt-get%20upgrade%0A%0Asudo%20apt-get%20install%20libfreetype6-dev%20pkg-config%20-y%0A%0Asudo%20apt-get%20install%20zlib1g-dev%20zip%20libjpeg8-dev%20libhdf5-dev%20-y%0A%0Asudo%20apt-get%20install%20libssl-dev%20libffi-dev%20python3-dev%20-y%0A%0Asudo%20apt-get%20install%20libhdf5-serial-dev%20hdf5-tools%20-y%0A%0Asudo%20apt-get%20install%20libblas-dev%20liblapack-dev%0Asudo%20apt-get%20install%20%20libatlas-base-dev%20-y%0A%0Asudo%20apt-get%20install%20build-essential%20cmake%20libgtk-3-dev%20libboost-all-dev%20-y%0A%0Asudo%20apt-get%20install%20nano%20-y%0A%0Apip%20install%20matplotlib%0A%0Apip%20install%20scikit-build%0A%0Apip%20install%20imutils%0A%0Apip%20install%20pillow” message=”” highlight=”” provider=”manual”/]

安裝Scipy, Scikit-learn, Keras, Jupyter notebook

想到能夠在GPU上執行這些常用的AI軟體就非常興奮,雖然只是在小小的Jetson Nano上。

[pastacode lang=”markup” manual=”pip%20install%20scipy%0A%0Apip%20install%20keras%0A%0Apip%20install%20scikit-learn%0A%0Apip%20install%20jupyter%20notebook” message=”” highlight=”” provider=”manual”/]

安裝Tensorflow

查看目前支援的Tensorflow版本:https://developer.nvidia.com/embedded/downloads#?search=TensorFlow

[pastacode lang=”markup” manual=”pip%20install%20–extra-index-url%20https%3A%2F%2Fdeveloper.download.nvidia.com%2Fcompute%2Fredist%2Fjp%2Fv42%20tensorflow-gpu%3D%3D1.13.1%2Bnv19.4″ message=”” highlight=”” provider=”manual”/]

測試看看,版本為1.13.1:

開啟SWAP

預設並沒有設定SWAP,所以Jetson Nano一run超過記憶體就立即當機了。

先輸入下方的指令看看,顯示沒有設定任何的SWAP:

[pastacode lang=”markup” manual=”sudo%20swapon%20%E2%80%93show” message=”” highlight=”” provider=”manual”/]

一般idle情況下就只有2.6G可用。

SD卡空間目前剩下約17G可用。

理想的SWAP size應是RAM的二倍,但由於SD空間不是很充裕,先設定4G SWAP。

[pastacode lang=”markup” manual=”sudo%20fallocate%20-l%204G%20%2Fswapfile%0A%0Asudo%20chmod%20600%20%2Fswapfile%0A%0Als%20-lh%20%2Fswapfile” message=”” highlight=”” provider=”manual”/]

建立並啟用SWAP。

[pastacode lang=”markup” manual=”sudo%20mkswap%20%2Fswapfile%0A%0Asudo%20swapon%20%2Fswapfile%0A%0Asudo%20swapon%20%E2%80%93show” message=”” highlight=”” provider=”manual”/]

輸入free -h確認已經有4G SWAP空間了。

[pastacode lang=”markup” manual=”free%20%E2%80%93h” message=”” highlight=”” provider=”manual”/]

由於重開機後SWAP設定便會跑掉,因此,把SWAP加到fstab設定檔中。

[pastacode lang=”markup” manual=”sudo%20cp%20%2Fetc%2Ffstab%20%2Fetc%2Ffstab.bak%0A%0Aecho%20’%2Fswapfile%20none%20swap%20sw%200%200’%20%7C%20sudo%20tee%20-a%20%2Fetc%2Ffstab” message=”” highlight=”” provider=”manual”/]

安裝DLIB

讓我們也能在Jetson GPU上使用Dlib的機器學習、計算機視覺、圖像處理等函式庫。

您可採用下列的方式從source安裝,亦可簡單的透過 php install dlib來安裝,但注意使用pip此法安裝無法使用到GPU。

[pastacode lang=”markup” manual=”mkdir%20temp%3B%20cd%20temp%0A%0Agit%20clone%20https%3A%2F%2Fgithub.com%2Fdavisking%2Fdlib.git%0A%0Acd%20dlib%0A%0Amkdir%20build%3B%20cd%20build%0A%0Acmake%20..%20-DDLIB_USE_CUDA%3D1%20-DUSE_AVX_INSTRUCTIONS%3D1%0A%0Acmake%20–build%20.%0A%0Acd..%0A%0Apython%20setup.py%20install%0A%0Asudo%20ldconfig” message=”” highlight=”” provider=”manual”/]

安裝過程中,DLIB會自動偵測已安裝的CUDA版本(Nnao為10.0)。

如果過程中有碰到如下的error:

fatal error: Python.h: No such file or directory 的error message

請找到Python.h的path後,再設定CPLUS_INCLUDE_PATH環境變數,重新安裝即可。

sudo find / -name “Python.h”

/usr/include/python3.6m/Python.h

/usr/include/python2.7/Python.h

export CPLUS_INCLUDE_PATH=/usr/include/python3.6m

安裝Darknet

Darknet framework,讓Jetson Nano可訓練或透過Darknet推論YOLO model。

將下列兩行加到 ~/.bashrc後方

[pastacode lang=”markup” manual=”export%20PATH%3D%24%7BPATH%7D%3A%2Fusr%2Flocal%2Fcuda%2Fbin%0A%0Aexport%20LD_LIBRARY_PATH%3D%24%7BLD_LIBRARY_PATH%7D%3A%2Fusr%2Flocal%2Fcuda%2Flib64%0A%0Agit%20clone%20https%3A%2F%2Fgithub.com%2Fpjreddie%2Fdarknet%0A%0Acd%20darknet%2F%0A%0Anano%20Makefile” message=”” highlight=”” provider=”manual”/]

將Makefile中的下列參數內容更改為1

[pastacode lang=”markup” manual=”GPU%3D1%0A%0ACUDNN%3D1%0A%0AOPENCV%3D1″ message=”” highlight=”” provider=”manual”/]

更改後存檔,執行 make 即完成。

安裝YOLO3-4-Py

讓Jetson Nano可透過Python在GPU推論YOLO model。

[pastacode lang=”markup” manual=”export%20GPU%3D1%0A%0Apip%20install%20yolo34py-gpu” message=”” highlight=”” provider=”manual”/]

安裝Jetson.GPIO

讓我們能透過Python操控Jetson Nano上的40組GPIO接腳。

[pastacode lang=”markup” manual=”pip%20install%20Jetson.GPIO%0A%0Asudo%20groupadd%20-f%20-r%20gpio%0A%0A%23%E8%AB%8B%E5%B0%87%E4%B8%8B%E6%96%B9%E7%9A%84pi%E6%94%B9%E7%82%BA%E4%BD%A0%E8%87%AA%E5%B7%B1%E7%9A%84account%0A%0Acd%20practicesudo%20usermod%20-a%20-G%20gpio%20pi%0A%0Asudo%20cp%20%2Fopt%2Fnvidia%2Fjetson-gpio%2Fetc%2F99-gpio.rules%20%2Fetc%2Fudev%2Frules.d%2F” message=”” highlight=”” provider=”manual”/]

最後,請重開機或執行

[pastacode lang=”markup” manual=”sudo%20udevadm%20control%20–reload-rules%20%26%26%20sudo%20udevadm%20trigger” message=”” highlight=”” provider=”manual”/]

安裝Jetson stats

這是一套非常好用、針對NVIDIA Jetson系列所開發的資源監控工具。

[pastacode lang=”markup” manual=”git%20clone%20https%3A%2F%2Fgithub.com%2Frbonghi%2Fjetson_stats.git%0A%0Acd%20jetson_stats%2F%0A” message=”” highlight=”” provider=”manual”/]

執行ntop,可看到CPU、GPU、memory、Disk的耗用情況、以及電量、溫度等資訊。

執行jetson_release可顯示本環境中所安裝的NVIDIA Jetson各項版本資訊。

 

使用Keras+Jupyter notebook訓練 CIFAR 10

訓練時Jetson Nano的GPU使用率約在60~80%之間,每個epoch執行時間約30秒,訓練過程及結果請參考:https://github.com/ch-tseng/jetson_nano_test/blob/master/CIFAR10-Training-on-a-Jetson_Nano.ipynb 。

CIFAR10 訓練時的資源秏用:

坦白說,這速度並不很讓人滿意,使用i7 7600K每個epoch的速度約8秒,仍遠勝Jetson Nano的128 GPU Cores,看來將Nano用來作為training用途是不太實際的想法。

執行Tensorflow models

TensorRT是NVidia推出專用於模型推理的一種神經網路推理加速器,可透過優化模型來加速推論時的速度,尤其應用於Jetsosn系列,速度可提昇至8~15倍以上。不過,為了實際感受Jetson Nano 128 Core GPU的速度,在下方的範例我都沒有使用TensorRT而是直接使用TF Frozen Graph,因此FPS的數字看來並不是想像中那麼美好,不過以$99美元的開發板來說,這速度和樹莓派比較起來已經相當超質了。(請注意Nano全速運轉時,上面那一大塊散熱板可作為烤肉盤使用)

自己訓練的指尖/手掌偵測模型(SSD-MobileNet V2)

透過OpenCV+Python call Tensorflow-gpu 執行。

速度:7.5 FPS

YOLOV3-Tiny + COCO Dataset

使用darknet程式直接執行,未透過python。

速度:9-11 FPS

YOLOV3-Tiny + 自己訓練的行車道路缺陷偵測模型

使用darknet程式直接執行,未透過python。

速度:5~6 FPS

想了解更多CH.Tseng,可以點此連結 瀏覽更多文章喔~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *