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

撰寫/攝影CH.Tseng
部落格https://chtseng.wordpress.com/
Facebookhttps://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家族比較

TK1TX1TX2AGX XavierNano
GPU cores192 Core256 Core256 Core512 Core128 Core
CPU4 core4 core6 core8 core4 core
Memory2GB DDR34GB DDR44GB DDR48GB DDR4

二種版本

16GB DDR44GB DDR4
Storage16GB eMMC16GB eMMC32GB eMMC32GB eMMCSD(開發板)16GB eMMC

(二種版本)

Video Encode1080p@304K@30(3x) 4K@30(4x) 4Kp60 / (8x) 4Kp304K@30
Video Decode1080p@604K@60(2x) 4K@60(2x) 8Kp30 / (6x) 4Kp604K@60
WI-FIOOOOX
BluetoothXOOOX
Power5W10W / 15W7.5W / 15W10W / 15W / 30W10W
USBUSB 3.0USB 3.0 + USB 2.0USB 3.0 + USB 2.0USB 3.0 + USB 2.0USB 3.0 + USB 2.0

 

Jetson Nano & Raspberry Pi

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

Jetson NanoRaspberry Pi
CPU64-bit Quad-core ARM A57 (1.43 GHz)1.4 GHz 64-bit quad-core ARM Cortex-A53
GPU128-Core Nvidia MaxwellBroadcom VideoCore IV
RAM4GB DDR41GB DDR2
WIFIX802.11ac
BluetoothXLE 4.2
EthernetGigbitGigbit (300Mbps max)
GPIO40 pin40 pin
USBUSB 2.0 x 3USB 3.0 x 1USB 2.0 x 4
AudioXAudio jack
Power5~10W400 mA (2.0W)
Price$99$35
算力472 Gflops24 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,可以點此連結 瀏覽更多文章喔~

發佈留言

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