Dream Driven Development。夢を形にしよう!

衝撃的に安い AI開発向け シングルボードコンピュータ Jetson Nano 2GB セットアップ

衝撃的に安い
AI開発向け
シングルボードコンピュータ
Jetson Nano 2GB
セットアップ


2020年10月6日に発表になった7,000円以下で買えるAIシングルボードコンピュータ「NVIDIA Jetson Nano 2GB」のセットアップ記事です。
安いですねー。7,000円以下でAI/CUDA環境が手軽に試せるなんて。。。ということで、発表当日にポチッと買ってしまいました。
10月の終わり頃にようやく届いたのでセットアップ手順を紹介します。基本的にラズパイと変わらない感じで簡単です。

仕様

Jetson Nano 2GB
「Jetson Nano 2GB」はホビーユーザーにも手に届くNVIDIA GPUの入ったシングルボードコンピュータです。
AI向けのライブラリやカメラポートなどが用意されていて簡単にAI開発を体験することができます。
もちろんNVIDIAのGPUが内蔵されているためAI演算の高速化も期待できます。
小型シングルボードコンピュータサイズなので「超高速」というわけではありませんがビデオストリームをリアルタイム処理するくらいのことはできるようです。(僕はまだ試していません)
コミュニティに上がっているプロジェクト例はここで確認できます
スペック(抜粋)は以下のようになっています。

項目
GPU 128-core NVIDIA Maxwell™
CPU Quad-core ARM® A57 @ 1.43 GHz
Memory 2 GB 64-bit LPDDR4 25.6 GB/s
AI Performance
fp16
472 GFLOPs

web Jetson Nano 2GB Developer Kit | NVIDIA Developer
推論性能で比べると「Raspberry Pi 3 + Intel Neural Compute Stick 2」より早くて「Google Edge TPU Dev Board」より遅いというくらいのようです。
ただ、「Jetson Nano 2GB」は推論だけでなく学習もできるしCUDAアプリの開発もできるので一概に比較はできなさそうです。

入手方法

今はAmazonとかには無いので、以下の菱洋エレクトロのサイトから買うのが良いでしょう。
web NVIDIA Jetson Nano 2GB 開発者キット 商品・個数選択

セットアップ

セットアップ方法はGetting Started with Jetson Nano 2GB Developer Kit | NVIDIA Developerに書いてあるとおりですが、それだと元も子もないのでざっと流れを書きます。

準備するもの

流れ

macの場合は以下のような感じになります。($のところがコマンド)

$ diskutil list | fgrep '/dev/disk'
#ここでsdカード挿入
$ diskutil list | fgrep '/dev/disk'
#増えたデバイス=sdカード
$ sudo diskutil partitionDisk /dev/disk2 1 GPT "Free Space" "%noformat%" 100%
Started partitioning on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Finished partitioning on disk2
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *63.9 GB    disk2
   1:                        EFI EFI                     209.7 MB   disk2s1
$ /usr/bin/unzip -p ~/Desktop/jetson-nano-2gb-jp441-sd-card-image.zip | sudo /bin/dd of=/dev/rdisk2 bs=1m
0+219728 records in
0+219728 records out
14400094208 bytes transferred in 880.006687 secs (16363619 bytes/sec)))

ヘッドレス時の接続

ヘッドレスmicroUSB接続でJetson Nanoにログインする場合は以下のようになります(mac)

#USBモデムの場所を確認
$ ls /dev/cu.usbmodem*
/dev/cu.usbmodem2413
#確認したモデムを使って接続
$ sudo screen /dev/cu.usbmodem2413 115200
System Configuration
 ┌────┤ License For Customer Use of NVIDIA Software ├─────┐
 │                                                        │
 │ Welcome to Jetson Initial Configuration                │
 │                                                        │

指示に従ってIPアドレス、ユーザーなどをセットアップします。
セットアップはこれで終わりです。簡単ですね!

ログインと確認とアップグレード

ログインしてアップグレードしておきます。

ssh user@>xxx.xxx.xxx.xxx
$ uname -a
Linux jetson1 4.9.140-tegra #1 SMP PREEMPT Fri Oct 16 12:32:46 PDT 2020 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
#バージョンアップしておく
$ sudo apt update
$ sudo apt upgrade

Ubuntu18.04ベースですね。慣れている人にとっては使いやすいですね。

VNCセットアップ

Jetson Nano 2GBを常にディスプレイに挿して使う人は必要ないですが、リモートで作業する人はコマンドラインだけでなくVNC接続をできるようにしておくことで画像を使う開発を便利に行うことができます。

VNCのセットアップ方法は以下のサイトにあります。
web Setting Up VNC | NVIDIA Developer

#jetson上
$ mkdir -p ~/.config/autostart
$ cp /usr/share/applications/vino-server.desktop ~/.config/autostart/.
$ gsettings set org.gnome.Vino prompt-enabled false
$ gsettings set org.gnome.Vino require-encryption false
$ gsettings set org.gnome.Vino authentication-methods "['vnc']"
$ gsettings set org.gnome.Vino vnc-password $(echo -n '<パスワード>'|base64)
$ sudo reboot

デスクトップにログインしていないとvncがオンにならないので、デスクトップでログイン(ヘッドレスセットアップしても結局ここでディスプレイとかキーボードとか必要になる)してからユーザ設定でauto loginに変更する必要があります。
ユーザのauto login設定

また、このまま接続すると解像度が640x480ととても低くなってしまうのでjetson上の/etc/X11/xorg.confに以下のscreenセクション追記します。

#jetson上
Section "Screen"
   Identifier    "Default Screen"
   Monitor        "Configured Monitor"
   Device        "Default Device"
   SubSection "Display"
       Depth    24
       Virtual 1280 800
   EndSubSection
EndSection

できましたか?

Jetson デスクトップ

dockerコンテナセットアップ

Jetsonにログインして直接いじっても良いのですが、今どきはコンテナを作ってその中で開発し、終わったらコンテナごと消して環境をクリーンに保つのが当たり前になってきました。

NVIDIAもJetson向けにdockerコンテナイメージを作ってくれているのでそれをダウンロードして起動するだけで開発環境が一気に揃います。

NVIDIAが提供しているJetson nano向けのコンテナイメージは以下のリンクでリストアップされています。
web Catalog | NVIDIA NGC
今回はそのうち2つを紹介します。

L4T Base

基本となるコンテナがL4T Baseとなります。ツール類はあとから自分でapt等でインストールしていくものになります。
CUDAサンプル等をコンパイルして動かす場合などはこのBaseイメージが良いでしょう。
以下でCUDAサンプル(nbody)を動かすまでの手順を書いていきます。(CUDAサンプルアプリのソースはJetson内/usr/local/cuda/samplesに入っています)
CUDAサンプルを走らせるときはGUIを使うのでdesktop環境で実施してください。

#イメージのダウンロード
$ sudo docker pull nvcr.io/nvidia/l4t-base:r32.4.4
#イメージ確認
$ sudo docker image ls
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
nvcr.io/nvidia/l4t-base   r32.4.4             10faffedd5fa        2 weeks ago         634MB
$ sudo xhost +
$ sudo docker run -it --rm --net=host --runtime nvidia -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/l4t-base:r32.4.4
#以下dockerコンテナ内
$ apt-get update && apt-get install -y --no-install-recommends make g++
#サンプルをホストからコピーしてコンパイル
$ cp -r /usr/local/cuda/samples /tmp
$ cd /tmp/samples/5_Simulations/nbody
$ make
#実行
$ ./nbody 

L4T ML

L4T MLは、L4T BaseにPytorchやJupyter Lab等のAI開発に必要な環境がごっそり入ったイメージです。
入っているパッケージリストは以下の通り。

JupyterLabも入っているので起動したらリモートでブラウザから操作することが可能になります。

$ sudo docker pull nvcr.io/nvidia/l4t-ml:r32.4.4-py3
$ sudo docker run -it --rm --runtime nvidia --network host nvcr.io/nvidia/l4t-ml:r32.4.4-py3
#ホストのディレクトリをマウントしたい場合は以下
$ sudo docker run -it --rm --runtime nvidia --network host -v /host/location/:/jetson/direcory/ nvcr.io/nvidia/l4t-ml:r32.4.4-py3

ブラウザでアクセスしてみましょう。

http://<ip address>:8888 (パスワードはnvidia)  

ログインできたでしょうか?
Jetson JupyterLab画面
ちゃんとtorch.cuda.is_available()Trueになってますね!
もちろんPytorchをちゃんと使って画像認識等もできます。
Jetson JupyterLab画面

まとめ

カメラを繋いでの物体認識とかシングルボードコンピュータの利点を生かしていろいろ使えそうです。
これを機会にAIをかじってみましょう!
enjoy

|

お気に入りサイト