Jetson Nano 開発者キット B01のセットアップ
最近、Jetson Nano 開発者キット B01
で遊んでいる。基本的な内容が掴めるまではJetson AI Specialist
のインストラクション動画を見ながら進めるのがわかりやすいが、最初のセットアップができあがるまでで少しつまづいたのでその内容についてまとめておく。
# JETSON AI COURSEについて
JETSON AI COURSES AND CERTIFICATIONS (opens new window)
詳細は上記のページにある。
基本的には下記のように動画で解説されているので、その通りに進めていけばよい。
動画は英語だが、日本語の字幕も表示できるので困ることはあまりないと思う。
私自身、コース内容に集中したかったので日本語字幕付きで進めたが、日本語字幕が時々ん?と思うことがあったので、英語が苦にならないなら英語の解説をそのまま聞くか英語字幕にしたほうが良いかもしれない。
# 前準備
# Jetson Nanoのケース組み立て
Jetson Nanoは購入時の箱にそのまま乗せることができるのだけれど、そのままでは基盤が剥き出しなのと、いずれにせよ冷却用のファンが欲しいと思ったので、下記のケースを購入した。
組み立ては難しくはないのだが、説明書などは付属していないので、向きなどで結構悩んだ。
下記のようなパーツが入っている。
保護フィルムを外すと下記のようなアクリル板となっている。
最終的に組み立てるとこうなる。
また、組み立て終わってからACアダプター用のジャックピンの設置が必要になったりカメラモジュールを取り付けていなかったりで、ネジを緩めてフタを開けることになったので、自信がない場合はフタのネジはしばらく締めずにおいたほうが良いかも知れない。
私自身はJetson AI Specialistの受講が終わったらカメラモジュールを外すかも知れないので、左側のパネルは外したままでネジを締めない状態にしている。
(カメラを取り付けた写真は後述)
# 必要な機器の接続
Jetson Nanoに接続が必要なのは下記。
- マウス(初回起動時のみ必要)
- キーボード(初回起動時のみ必要)
- モニタ(初回起動時のみ必要)
- 冷却ファン(必須ではないがあったほうがよい)
- カメラモジュール(使わないなら不要)
- LANケーブル(Dockerコンテナダウンロードにネット接続が必要)
- マイクロSDカード
- ケーブル(PC本体との接続に必要。Jetson Nano側はmicro USB Type-B端子)
初回起動時にマウス、キーボード、モニタが必要となる。
初回起動以外はSSHなどで接続すれば特に必要ないのだが、私自身は何かあった時のために接続したままにしている。
また、カメラモジュールは使わないなら不要だが、Jetson AI Specialist
を受講するなら必要。
最終的に必要なものを接続するとこうなる。
少し見づらいがJatson Nano B01本体に対して、下記の機器を接続している。
- (左の白い帯)カメラモジュール(1枚目未接続)
- (前、左から順に)ACアダプタ(2枚目未接続)
- キーボード
- マウス
- LANケーブル
- USBケーブル(MAC本体と接続)
- (右のケース内部の赤いコード)冷却ファン
- (写真からは見えないが)後ろの右側にマイクロSDを挿す箇所がある
*ACアダプターを指すと自動的に起動するので、後述するイメージファイルの書き込まれたSDカードを先にセットしておく必要がある。
写真からはほぼ見えないが、ACアダプターから電源を供給するためにジャンパーピンを指す必要がある。私の場合は付属していたので購入の必要がなかったが(むしろ念のために購入して無駄になってしまった)ネットをあれこれ検索したところ、ない場合もあるようである。
なお右に見える白い接続機器はMac OS本体の外部接続用なので、今回のJetson Nanoとは関係がない。
ちなみに私が利用しているMac Book Airの場合、SDカードの差込口はないが、OSのイメージファイルをマイクロSDに書き込む必要があるので、別途、SDカードリーダー・ライターが必要になる。
# Jetson Nanoの起動
上記の準備ができたらJetson NanoでDockerコンテナを起動する。
大まかな手順は下記の通り。
- マイクロSDにイメージデータを書き込み(この時点ではまだJetson Nanoは使わない)
- イメージデータを書き込んだマイクロSDをJetson Nanoに挿入して起動し、初期設定を行う。
- スワップ領域の拡張
- Dockerコンテナの生成、起動
ここまでがAIプログラム開発の前準備となるわけだが、Dockerの設定に関しては下記の条件を満たす必要がある。
- カメラが接続済みであること
- Jetson Nano自体がネット接続されていること
基本的にはカメラモジュールとLANケーブルを指すだけで特別な設定は必要ない(はず)。
# マイクロSDにイメージデータの書き込み
マイクロSDに書き込むためのイメージファイルをNvidiaのJetson Nano developer Kitのサイト (opens new window)のJETPACK SDK (opens new window)からダウンロードする。
現時点では下記の箇所の左側のボタンとなる(変わるかもしれないので適宜参照のこと)。
インストラクション動画でも触れられているが、6GBほどあるので数十分ほどかかった。
さらにSDカードをフォーマットした上でダウンロードしたイメージファイルを書き込む。
動画ではSDカードへの書き込みにEtcherというソフトを使用しているが、Mac OSであればコマンドのみでもいける。
参考までに下記に私自身の実行ログを残しておくが、間違えると必要なデータが消えてしまったりなど色々大変なことになる可能性があるので、よくわからないようであれば動画の案内通り、GUIのソフトを使ったほうが安全かも知れない。
# 該当のディスクを確認する
$ diskutil list external | fgrep '/dev/disk'
$ df
# /dev/disk4 の4部分は都度、変わる。
# 番号を間違えると、他のディスクのデータを消去することになってしまうので、よく確認すること。
$ sudo diskutil partitionDisk /dev/disk4 1 GPT "Free Space" "%noformat%" 100%
$ /usr/bin/unzip -p ~/Downloads/jetson-nano-jp46-sd-card-image.zip | sudo /bin/dd of=/dev/rdisk4 bs=1m
2
3
4
5
6
7
8
いずれにせよファイルが大きいので、書き込みにはそこそこ時間がかかる。
# マイクロSDを差し込んでJetson Nanoを起動する
マイクロSDをJetson Nanoの後ろ側?に差し込んで電源を供給すれば自動的に起動する。
Jetson Nanoには電源ボタン等はないので、電源を挿すだけで起動するが、ACアダプタで起動する場合、ジャックピンと呼ばれる部品をセットする必要がある。私が設定した時は最初、電源がつかずに少し悩んでしまい、一度組み立てたケースを開けてジャンパーピンを差し込むことになってしまった。
ACアダプタを差し込むと勝手に起動するので、通常のデスクトップPC同様、最初に規約に同意したり、言語を選択したりする。
私自身は言語はEnglish(US)、場所(タイムゾーンに影響する)はTokyoを選択した。日本語もあったのでおそらくそれでも大丈夫なはず。
さらにユーザー情報を聞かれる。インストラクション動画では「nvidia」としていたが、ここはなんでもよい。
このあたりは迷うことはあまりないと思うが、基本的に英語なので、不安な場合はJetson Nanoのインストラクション動画を見るのが間違いないかと思う。
一通り必要な情報を入力し、やたらとかっこいいデスクトップが表示されれば無事、初期化完了である。
デスクトップ左側のアイコンの中にターミナルへのショートカットが存在する。
基本的にはなんの変哲もない普通のUbuntuっぽい。
$ ls -al
total 108
drwxr-xr-x 17 kaz kaz 4096 7月 22 04:39 .
drwxr-xr-x 3 root root 4096 7月 22 04:01 ..
-rw------- 1 kaz kaz 175 7月 22 04:11 .bash_history
-rw-r--r-- 1 kaz kaz 220 7月 22 04:01 .bash_logout
-rw-r--r-- 1 kaz kaz 3771 7月 22 04:01 .bashrc
drwx------ 10 kaz kaz 4096 7月 22 04:29 .cache
drwx------ 14 kaz kaz 4096 7月 22 04:04 .config
drwxr-xr-x 2 kaz kaz 4096 7月 22 04:02 Desktop
drwxr-xr-x 2 kaz kaz 4096 7月 22 04:02 Documents
drwxr-xr-x 2 kaz kaz 4096 7月 22 04:02 Downloads
〜(略)
$ pwd
/home/kaz
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# スワップ領域の拡張
これも基本的にインストラクション動画の通りだが、メモリを確認し、4GBのスワップファイルを作成する。
# スワップ容量確認
$ free -m
# 拡張
$ sudo systemctl disable nvzramconfig
$ sudo fallocate -l 4G /mnt/4GB.swap
$ sudo chmod 600 /mnt/4GB.swap
$ sudo mkswap /mnt/4GB.swap
$ sudo su
$ echo '/mnt/4BG.swap swap swap defaults 0 0' >> /etc/fstab
# 再起動してスワップ容量が拡張されているか確認
$ reboot
$ free -m
2
3
4
5
6
7
8
9
10
11
12
13
14
# PCからSSH接続
ここまで進めていまさらながら、Nvidia公式サイトの Getting Started with AI on Jetson Nano
コースに登録する必要があることに気がついたので、とりあえず登録する。
Getting Started with AI on Jetson Nano (opens new window)
登録後、上記のページに戻って、上部のタブの「Course」→「Setting up your Jetson Nano」→「Headless Device Mode」へと進む。
ここのページを下に進んでいくと、手元のPCからJetson Nanoにログインするための方法や、Dockerコンテナの設定方法などが詳細に書かれている。
基本的にはこのページの手順に従ってコマンドを設定していけばよい。
とりあえず手元のMacのターミナルから接続する。
$ ssh kaz@192.168.55.1
ちなみに(これはJetson Nano関係なくSSH自体の仕様だが)別のSDカードに別のOSイメージを設定した場合、同じIPアドレスであるにもかかわらずknown_hosts
に登録されるSSH鍵が変わるので接続できなくなる。この場合は known_hosts を手動で修正するか、/etc/hosts
などで別のホスト名を割り当てる必要がある。
いずれにせよ、ここからはMac OSからSSHでJetson Nanoに接続して進めていく。
# Dockerコンテナ生成
さらに公式サイトの説明にそって進め、Dockerコンテナをセットする。
基本的には書いてあるコマンドの通りなので悩むことはないと思うが、下記の条件を満たしていないと正常に処理されないので注意。
- LANケーブルを接続しているか、wifiを設定するなどして外部に接続されていること
- カメラモジュールが認識されていること
通常はカメラモジュールが認識されると通常は /etc/video0
というデバイス名としてパスに追加されるが、もし異なる場合はコマンド内のデバイスパスを修正する必要がある。
$ mkdir -p ~/nvdli-data
# create a reusable script
echo "sudo docker run --runtime nvidia -it --rm --network host \
--volume ~/nvdli-data:/nvdli-nano/data \
--device /dev/video0 \
nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.6.1" > docker_dli_run.sh
# make the script executable
chmod +x docker_dli_run.sh
# run the script
./docker_dli_run.sh
2
3
4
5
6
7
8
9
10
11
12
13
初回起動時はDockerのイメージファイルをダウンロードするので少し時間がかかるが、次回以降、docker_dli_run.sh
を実行するだけでDockerコンテナを起動できる。