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安裝及設定

sudo apt-get install virtualenv -y

mkdir envs; cd envs

virtualenv –p python3 AI

source ~/envs/AI/bin/activate

echo ' source ~/envs/AI/bin/activate ' >> ~/.bashrc

設定OpenCV

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

sudo find / -name "cv2*"

[sudo] password for pi:

find: ‘/run/user/1000/gvfs’: Permission denied

/usr/lib/python2.7/dist-packages/cv2.so

/usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so

cd ~/envs/AI/lib/python3.6/site-packages/

ln -s /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so

測試看看:

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

安裝常用的模組

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install libfreetype6-dev pkg-config -y

sudo apt-get install zlib1g-dev zip libjpeg8-dev libhdf5-dev -y

sudo apt-get install libssl-dev libffi-dev python3-dev -y

sudo apt-get install libhdf5-serial-dev hdf5-tools -y

sudo apt-get install libblas-dev liblapack-dev
sudo apt-get install  libatlas-base-dev -y

sudo apt-get install build-essential cmake libgtk-3-dev libboost-all-dev -y

sudo apt-get install nano -y

pip install matplotlib

pip install scikit-build

pip install imutils

pip install pillow

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

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

pip install scipy

pip install keras

pip install scikit-learn

pip install jupyter notebook

安裝Tensorflow

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

pip install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.4

測試看看,版本為1.13.1:

開啟SWAP

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

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

sudo swapon –show

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

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

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

sudo fallocate -l 4G /swapfile

sudo chmod 600 /swapfile

ls -lh /swapfile

建立並啟用SWAP。

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon –show

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

free –h

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

sudo cp /etc/fstab /etc/fstab.bak

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

安裝DLIB

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

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

mkdir temp; cd temp

git clone https://github.com/davisking/dlib.git

cd dlib

mkdir build; cd build

cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1

cmake --build .

cd..

python setup.py install

sudo ldconfig

安裝過程中,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後方

export PATH=${PATH}:/usr/local/cuda/bin

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64

git clone https://github.com/pjreddie/darknet

cd darknet/

nano Makefile

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

GPU=1

CUDNN=1

OPENCV=1

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

安裝YOLO3-4-Py

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

export GPU=1

pip install yolo34py-gpu

安裝Jetson.GPIO

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

pip install Jetson.GPIO

sudo groupadd -f -r gpio

#請將下方的pi改為你自己的account

cd practicesudo usermod -a -G gpio pi

sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/

最後,請重開機或執行

sudo udevadm control --reload-rules && sudo udevadm trigger

安裝Jetson stats

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

git clone https://github.com/rbonghi/jetson_stats.git

cd jetson_stats/

執行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,可以點此連結 瀏覽更多文章喔~

發佈留言

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