撰寫/攝影 | CH.Tseng |
部落格 | https://chtseng.wordpress.com/ |
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安裝及設定
設定OpenCV
已內建安裝了OpenCV,因此並不需要重新安裝,但是需要在python virtual environment中link到site-packages。
測試看看:
看來OpenCV預裝的3.3.1版本不太新,且該版本未支援Deep Neural Networks的DNN模組,不過由於NVidia GPU也尚未支援OpenCV DNN,因此影響不大。
安裝常用的模組
安裝Scipy, Scikit-learn, Keras, Jupyter notebook
想到能夠在GPU上執行這些常用的AI軟體就非常興奮,雖然只是在小小的Jetson Nano上。
安裝Tensorflow
查看目前支援的Tensorflow版本:https://developer.nvidia.com/embedded/downloads#?search=TensorFlow
測試看看,版本為1.13.1:
開啟SWAP
預設並沒有設定SWAP,所以Jetson Nano一run超過記憶體就立即當機了。
先輸入下方的指令看看,顯示沒有設定任何的SWAP:
一般idle情況下就只有2.6G可用。
SD卡空間目前剩下約17G可用。
理想的SWAP size應是RAM的二倍,但由於SD空間不是很充裕,先設定4G SWAP。
建立並啟用SWAP。
輸入free -h確認已經有4G SWAP空間了。
由於重開機後SWAP設定便會跑掉,因此,把SWAP加到fstab設定檔中。
安裝DLIB
讓我們也能在Jetson GPU上使用Dlib的機器學習、計算機視覺、圖像處理等函式庫。
您可採用下列的方式從source安裝,亦可簡單的透過 php install dlib來安裝,但注意使用pip此法安裝無法使用到GPU。
安裝過程中,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後方
將Makefile中的下列參數內容更改為1
更改後存檔,執行 make 即完成。
安裝YOLO3-4-Py
讓Jetson Nano可透過Python在GPU推論YOLO model。
安裝Jetson.GPIO
讓我們能透過Python操控Jetson Nano上的40組GPIO接腳。
最後,請重開機或執行
安裝Jetson stats
這是一套非常好用、針對NVIDIA Jetson系列所開發的資源監控工具。
執行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,可以點此連結 瀏覽更多文章喔~