Nvidia Jetson是Nvidia為Embedded system所量身打造的運算平台,包含了TK1、TX1、TX2、AGX Xavier以及最新也最小的「Nano」開發板。這一系列的Jetson平台皆包含了一顆NVidia為隨身裝置所開發,內含ARM CPU、NVida GPU、RAM、南北橋等,代號為Tegra的SoC處理器。
Jetson家族比較
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:
一般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空間了。
由於重開機後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
更改後存檔,執行 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,可以
點此連結
瀏覽更多文章喔~
Post Views:
653
Related Posts
Addr: 4 F., No. 1, Ningbo E. St., Zhongzheng Dist., Taipei City 100029, Taiwan (R.O.C.)
Office: (02)23062900
business hours 9:30-18:30, Mon-Fri