2020年10月6日に発表になった7,000円以下で買えるAIシングルボードコンピュータ「NVIDIA Jetson Nano 2GB」のセットアップ記事です。
安いですねー。7,000円以下でAI/CUDA環境が手軽に試せるなんて。。。ということで、発表当日にポチッと買ってしまいました。
10月の終わり頃にようやく届いたのでセットアップ手順を紹介します。基本的にラズパイと変わらない感じで簡単です。
仕様
「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に書いてあるとおりですが、それだと元も子もないのでざっと流れを書きます。
準備するもの
- micro SDカード: 64GB UHS-1以上を推奨
- USB-C電源 (5V - 3A)
- デスクトップ環境でセットアップする人は以下
- ディスプレイとHDMIケーブル
- USBキーボードとマウス
- ヘッドレスセットアップ(リモートセットアップ)する人は以下
- micro USB ケーブル(Jetson Nano - PC間)
流れ
- サイトからosイメージのzipファイルダウンロード
web osイメージ場所 - イメージをSDカードに展開(展開方法はwindows/mac/linuxで異なります)
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)))
- microSDカードをJetson Nanoに挿入してディスプレイ等を接続して電源ケーブル挿入
ヘッドレスインストールの人はmicroUSBとPCを接続して電源ケーブル挿入 - Gigabit EtherコネクタにLANケーブルを刺す
ヘッドレス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に変更する必要があります。
また、このまま接続すると解像度が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
できましたか?
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開発に必要な環境がごっそり入ったイメージです。
入っているパッケージリストは以下の通り。
- TensorFlow 1.15
- PyTorch v1.6.0
- torchvision v0.7.0
- torchaudio v0.6.0
- onnx 1.7.0
- CuPy 8.0.0
- numpy 1.19.2
- numba 0.51.2
- pandas 1.1.3
- scipy 1.5.3
- scikit-learn 0.23.2
- JupyterLab 2.2.8
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)
ログインできたでしょうか?
ちゃんとtorch.cuda.is_available()
がTrue
になってますね!
もちろんPytorchをちゃんと使って画像認識等もできます。
まとめ
カメラを繋いでの物体認識とかシングルボードコンピュータの利点を生かしていろいろ使えそうです。
これを機会にAIをかじってみましょう!
enjoy