NVIDIA Jetson Nano — 01 環境安裝、最詳細燒錄教學

張家銘
13 min readJul 7, 2020

--

1. 燒錄官方的image檔案:

官方網站教學

  • 下載 Image 檔案,預設版本為最新的版本, 這篇是使用 JetPack 4.4.1的版本,若要下載更舊的版本請參考 JetPack Archive
  • 準備一張 microSD 卡,建議至少為 64GB,使用官方推薦的 Etcher 將 Image 檔案 (壓縮檔即可) 燒進 microSD 卡裡,以 28 MB/s 的速度 Flash、 40 MB/s 的速度 Validate 總共大約需要 15 分鐘。
  • 請注意,燒完 SD 卡後會變為 ext4 格式,如果想要重燒 windows 會讀不到 SD卡,但是還是可以用 Etcher 讀到,並重新燒錄。

2. 開啟 NVIDIA Jetson Nano

  • NVIDIA Jetson Nano 供電來源有兩種:Micro-USB 與 DC 5V 4A 變壓器,若使用DC 5V 4A 變壓器要在 J48 位置插上 Jumper 後,才會轉由變壓器供電
  • 如果你有螢幕可以直接將 HDMI 連接 Jetson Nano,並進行初次設定,設定完即可看到 ubuntu 的桌面,如下圖,並跳到第 4 步進行網路的設定,如果沒有螢幕可以看第 3 步進行 Headless 的操作
  • 並跳到第 4 步進行網路的設定,如果沒有螢幕可以看第 3 步進行 Headless 的操作

3. 使用 Putty 與 Jetson Nano 進行連線 (如果你有螢幕可以使用就不用那麼麻煩,可以跳到第 4 步)

  • 使用 micro-usb 連接筆電與 Jetson Nano,如果有成功連到會出現一個磁碟區 L4T-README
  • 打開裝置管理員 → 連接埠 (COM 和 LPT) → USB 序列裝置 (COM4) 並查看是否是不是這個 COM,可以依靠右鍵內容 → 詳細資料 → 屬性那選擇硬體識別碼,查看它的值是否為 (VID: 0955, PID: 7020)
  • 在筆電中下載並安裝 Putty
  • 打開 Putty,在 Connection type 選擇 Serial,並在Serial line 輸入剛剛查到的 COM 連接埠,在這邊是 COM4,按下 open 以 Serial 方式連結 Jetson Nano,並進行個人設定
  • 連接成功,並開始依照個人需求設定
  • 到設定網路那邊先隨便選一個,他會說找不到,可以先選 Do not configure the network at this time,待會會設定網路
  • 設定完後它會自動斷掉,接著就可以用剛剛設定完的帳密試著登入看看,成功登入我們來開始設定網路

4. 將 NVIDIA Jetson Nano 連接網路

由於 NVIDIA Jetson Nano 沒有內建無線網路,因此可以使用網路線讓筆電 (或電腦主機) 共享網路給 Jetson Nano ,也可以使用無線網卡讓 Jetson Nano 有網路:

(i) 有線網路

  • 將筆電 (或電腦主機) 與 Jetson Nano 用網路線連接 → 在筆電開啟網路和網際網路設定 → 變更介面卡選項 → Wi-Fi 按右鍵 → 內容 → 共用 → 將”允許其他網路使用者透過這台電腦的網際網路連線來連線”打勾 → 完成網路共享
  • 可以使用以下指令查看是否有連到網路,使用有線網路的話,IP 位址會在 eth0: 的 inet 後面
$ ifconfig

(ii) 無線網卡

  • 由於 NVIDIA Jetson Nano 沒有內建無線網卡,因此需要另外買,經網友測試無線網卡 EDIMAX EW-7811UN 可以正常使用,但是原廠沒出產了,所以要小心不要買到 V2 的版本。另外會有連線不佳的問題,可參考此github rtl8192cu-fixes 使用以下指令修理
# 先用這個指令讓網路能使用
$ echo options rtl8xxxu ht40_2g=1 dma_aggregation=1 | sudo tee /etc/modprobe.d/rtl8xxxu.conf
$ sudo reboot
# 再安裝完整版本
$ sudo apt-get update
$ sudo apt-get install git linux-headers-generic build-essential dkms
$ git clone https://github.com/pvaret/rtl8192cu-fixes.git
$ sudo dkms add ./rtl8192cu-fixes
$ sudo dkms install 8192cu/1.11
$ sudo depmod -a
$ sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/
$ sudo reboot
https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/me/wireless_adapters_n150/ew-7811un/
  • 有了網路後即可在 NVIDIA Jetson Nano 上使用此指令查詢 IP 位址
$ ifconfig
  • 使用無線網路的話,IP 位址會在 wlan0: 的 inet 後面

5. 使用 SSH 連線

  • 接著就可以用剛剛查到的 IP 位址進行 SSH 連線,以方便安裝及更新套件,首先可以先在筆電上安裝 Putty (原本是在第 3 步用 micro-usb 連線的,先拔掉 micro-usb 並嘗試用 IP 位址進行 SSH 連線)
  • 在 Host Name (or IP address) 的地方輸入剛剛找到的 IP 位址,然後按下 open 以 SSH 方式連結 Jetson Nano (如下圖所示)

6. 使用 VNC 遠端連線

使用 VNC 連線方便沒有螢幕的人也可以看到 ubuntu 的桌面,之後在使用 camera 進行深度學習任務時 (可以參考: NVIDIA Jetson Nano — 02 執行深度學習範例:影像辨識、物件偵測、影像分割、人體姿勢預測) 才可以看到 camera 畫面,當然如果你直接使用螢幕的話就可以不用 VNC

  • 更新套件
$ sudo apt-get update
$ sudo apt-get upgrade

跑到一半它會要你安裝 gdm3 或 lightdm,這邊我們選擇裝 gdm3

  • 使用 gsettings 來調整 GNOME 桌面設定,將 Vino 的 promptenabled(啟用提示)以及 require-encryption(需要加密)都設為 false,讓 VNC 遠端連線不需要經過認證階段。
$ gsettings set org.gnome.Vino prompt-enabled false
$ gsettings set org.gnome.Vino require-encryption false
  • 安裝 nano 文字編譯器
$ sudo apt-get install nano
  • 改為自動登入,將 AutomaticLogin 的 user1 改為自己的 user name
$ sudo nano /etc/gdm3/custom.conf
  • 調整遠端時所看到的解析度
$ sudo nano /etc/X11/xorg.conf
  • 將以下文字在加到最下面 (Virtual 1920 1080,這樣的解析度可能會有點 Lag,可以自己調整到 1280 720 會順很多)
Section "Screen" 
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Default Device"
SubSection "Display"
Depth 24
Virtual 1920 1080
EndSubSection
EndSection
  • 重新啟動,並開啟 VNC 連線,有出現下方畫面代表成功運行
$ sudo reboot
$ export DISPLAY=:0
$ /usr/lib/vino/vino-server
  • 在自己電腦上下載 VNC Viewer,打開 VNC Viewer ->File -> New connection… 在 VNC Server 的地方輸入 IP 位址 按 OK,點兩下會跳出視窗,按 Continue 即可使用 VNC 連接到 Jetson nano,登入後即可看到 Jetson nano 的桌面
  • 我們想將 VNC 設為只要開機就會自動啟動,因此在左上角的 search 輸入 startup 並打開 Startup Applications Preferences 進行下列設定
Name: Vino
Command: /usr/lib/vino/vino-server
Comment: VNC Server
  • 重開啟,並試試看能不能使用 VNC 連線

7. 開始環境安裝

  • 調整功耗模式
# 鎖住功率使其不過載
$ sudo jetson_clocks
# 顯示當前模式
$ sudo nvpmodel -q
# 預設為高效能模式(10W),此功率需用 DC 5V 4A 供電,不然會突然關機
$ sudo nvpmodel -m 0
# 若使用 Micro-USB 供電需切換到 5W 模式
$ sudo nvpmodel -m 1
  • 調整 SWAP 空間,在這裡預設為 6 GB 的記憶體
$ git clone https://github.com/JetsonHacksNano/installSwapfile
$ ./installSwapfile/installSwapfile.sh
# 重開機
$ sudo reboot
  • 使用 nano 編輯器,並設定 CUDA 環境變數
# 使用nano編輯環境檔案
$ sudo nano ~/.bashrc
# 最後面加入以下內容:
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH
# 完成後,使其生效:
$ source ~/.bashrc
# 測試是否有生效
$ nvcc -V
  • 在 Jetson Nano 中有一個非常好用的工具就是 jtop,可以同時 查看 CPU 資源與 GPU 資源,另外也可以看目前 CPU 與 GPU 的 溫度與功耗,另外他還有貼心的服務,就是將你目前的 library show 出來。
# 安裝 pip3 工具
$ sudo apt-get install python3-pip python3-dev build-essential
$ sudo -H pip3 install --upgrade pip
$ sudo -H pip3 install jetson-stats
$ sudo systemctl restart jetson_stats.service
# 執行Jtop監控工具,可查看CPU與GPU的相關資訊,也可將目前安裝的library顯示出來
$ sudo jtop
  • 安裝 AI 常用套件

安裝 pycuda 是之後要使用 TensorRT 優化模型所需要的套件,而 onnx (Open Neural Network Exchange) 則是一種模型格式,之後在轉換模型的時候也會用到,安裝以下套件需要 1至 2 個小時。

$ sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran qtbase5-dev python3-matplotlib# 安裝 pycuda 是為了能用 python 將 onnx 模型轉成 trt 模型
$ pip3 install pycuda
# 安裝 onnx 前需要先安裝 protobuf-3.8.0,我們使用 bash 檔安裝
$ wget https://raw.githubusercontent.com/jkjung-avt/jetson_nano/master/install_protobuf-3.8.0.sh
$ bash install_protobuf-3.8.0.sh
# 接著安裝 onnx 1.4.1 版本
$ pip3 install onnx==1.4.1

若想另外安裝一些常用的框架例如 TensorFlow、PyTorch 可以參考 Jetson zoo 的網站,可以先不用急著安裝。

  • 關閉桌面只留終端機的指令,可節省一些記憶體,但若有用到 camera 進行 Real-time 推論時還是需要桌面去執行,否則會報錯,所以建議還是開啟桌面模式
# 開啟終端機模式
$ sudo systemctl set-default multi-user.target
# 開啟桌面模式
$ sudo systemctl set-default graphical.target
# 查看當前的模式
$ sudo systemctl get-default

8. 設定 Jupyter lab

為了方便使用,可以安裝 Jupyter lab,並用自己的電腦直接使用 Jetson Nano 非常方便,詳細操作請參考此篇:

NVIDIA Jetson Nano — 使用 Jupyter lab 進行連線

--

--