LoginSignup
36
32

More than 3 years have passed since last update.

Jetson Xavier NX インストールメモ (※随時更新)

Last updated at Posted at 2020-05-16

はじめに

2020 年 5 月 14 日 Jetson Xavier NX が発表され、翌日 (5 月 15 日) に発売となりました。
菱洋エレクトロとマクニカ (スイッチサイエンス) で取り扱いが開始され、5 月 15 日 に注文し、翌日 (5 月 16 日) にスイッチサイエンスから入手できました。

開封の儀

開封しようとしたら、案の定、既に開封されている状態でした。
マクニカからのお知らせが同梱され、AC アダプタにシールが貼られていました。

一つだけ注意点は、付属している AC アダプタとケーブルは 3P 仕様のため、一般家庭のコンセントに挿す場合は別途、3P → 2P の変換ケーブル、または、変換アダプタが必要になります。

本体の大きさは Jetson Nano とほぼ同じですが、Jetson Nano との大きな違いは、AC アダプタ、冷却ファン、無線 LAN / Bluetooth カードが標準で付属されていることです。
ディスプレイ、USB キーボード、マウスを接続するだけです。(有線 LAN は必要に応じて使用)

(上が Jetson Nano、下が Jetson Xavier NX)

裏面に無線 LAN / Bluetooth カードが実装されています。いわゆる技適マークも基板に印刷されています。

SD カードイメージをダウンロードして使用する場合 (後述) は、お知らせに記載されている日本語マニュアルのダウンロードは不要でした。

SD カード作成

Jetson Download Center から SD カードイメージをダウンロードします。
5 月 16 日時点では JetPack 4.4 Developer Preview でした。
nv-jetson-nx-sd-card-image-r32.4.2.zip (約 6 GB)
Jetson Nano 用と分かれているので注意が必要です。

Etcher を使用して SD カード (32GB を使用) に書き込みを行いました。

初期セットアップ

SD カードを挿して Jetson Xavier NX を起動します。
キーボード、言語、タイムゾーン、無線 LAN 接続などを設定して再起動します。

デフォルトの動作モードは 10W 2CORE で、5 種類の中から選択できます。

ソフトウェアアップデート

デスクトップ上でマウスの右クリックを押し、Open Terminal を選択します。

$ sudo apt update
$ sudo apt upgrade

Jetson stats のインストール

CPU / GPU の使用率やメモリの使用量などをグラフィカルに確認できる jtop コマンドをインストールします。

$ sudo apt install python3-pip
$ sudo -H pip3 install -U jetson-stats
$ sudo jtop



CUDA サンプルデモの実行

Jetson Nano との比較のため、書籍「Jetson Nano 超入門」の Part 4-2 に沿って GPU を使用する CUDA プラットフォームのデモを動かしてみます。

$ cd /usr/local/cuda-10.2/samples

fluidsGL

$ cd 5_Simulations/fluidsGL
$ sudo make
$ sudo ./fluidsGL

nbody

$ cd 5_Simulations/nbody
$ sudo make
$ sudo ./nbody

oceanFFT

$ cd 5_Simulations/oceanFFT
$ sudo make
$ sudo ./oceanFFT

smokePartiicles

$ cd 5_Simulations/smokeParticles
$ sudo make
$ sudo ./smokeParticles

VisionWorks サンプルデモの実行

Jetson Nano との比較のため、書籍「Jetson Nano 超入門」の Part 4-3 に沿って カメラ等で撮影した映像をリアルタイム解析して情報を付加するデモを動かしてみます。

$ cd /usr/share/visionworks/sources
$ sudo make
$ cd bin/aarch64/linux/release

Feature Tracker

$ sudo ./nvx_demo_feature_tracker

Object Tracker

$ sudo ./nvx_sample_object_tracker_nvxcu

motion estimation

$ sudo ./nvx_demo_motion_estimation

マルチコンテナデモの実行

Cloud-Nativeのデモです。別途、M.2 スロットに接続する NVMe SSD (128GB を用意) とマイク付きヘッドセット (自然言語処理 BERT のデモ用) が必要です。
https://github.com/NVIDIA-AI-IOT/jetson-cloudnative-demo

以下、jetson ユーザーでコマンドを実行する前提です。
(ユーザー名が異なる場合、ホームディレクトリ名が異なります。)

NVMe SSD をフォーマット、マウントします。

$ sudo mkfs.ext4 /dev/nvme0n1
$ sudo mkdir nvme
$ sudo mount /dev/nvme0n1 /home/jetson/nvme

起動時に NVMe SSD をマウントする設定を追加します。

$ sudo vi /etc/fstab
/etc/fstab
/dev/nvme0n1 /home/jetson/nvme ext4 defaults 0 1

docker レジストリを NVMe SSD へ移動します。

$ sudo mv /var/lib/docker /home/jetson/nvme/
$ sudo ln -s /home/jetson/nvme/docker /var/lib/

ZRAM (メモリ圧縮) 機能を無効化します。

$ cd /etc/systemd
$ sudo mv nvzramconfig.sh nvzramconfig.sh.orig

NVMe SSD 上にスワップファイルを作成します。

$ sudo fallocate -l 32G /home/jetson/nvme/swapfile
$ sudo chmod 600 /home/jetson/nvme/swapfile
$ sudo mkswap /home/jetson/nvme/swapfile
$ sudo swapon /home/jetson/nvme/swapfile

スワップの状態を確認します。(追加したスワップファイル swapfile が表示されることを確認します。)

$ swapon -s

起動時にスワップファイルをマウントする設定を追加します。

$ sudo vi /etc/fstab
/etc/fstab
/home/jetson/nvme/swapfile swap swap defaults 0 0

一度、再起動します。

$ sudo reboot

4 つのコンテナイメージをダウンロードします。(サイズが大きいのでダウンロードに時間がかかります。)

$ sudo docker pull nvcr.io/nvidia/deepstream-peopledetection:r32.4.2
$ sudo docker pull nvcr.io/nvidia/jetson-pose:r32.4.2
$ sudo docker pull nvcr.io/nvidia/jetson-gaze:r32.4.2
$ sudo docker pull nvcr.io/nvidia/jetson-voice:r32.4.2

コンテナイメージを確認します。

$ sudo docker images
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
nvcr.io/nvidia/deepstream-peopledetection   r32.4.2             5eb53ed0c347        4 weeks ago         2.96GB
nvcr.io/nvidia/jetson-voice                 r32.4.2             115264c7375d        4 weeks ago         12.2GB
nvcr.io/nvidia/jetson-pose                  r32.4.2             e30178601a5f        4 weeks ago         3.47GB
nvcr.io/nvidia/jetson-gaze                  r32.4.2             c078fdeb5872        4 weeks ago         4.62GB

以上で準備が整いましたので、最後にデモを動かします。

$ git clone https://github.com/NVIDIA-AI-IOT/jetson-cloudnative-demo
$ sudo apt-get install xdotool
$ cd jetson-cloudnative-demo
$ sudo ./run_demo.sh

個別にデモを動かすこともできます。

$ sudo ./run_peopleDetect.sh
$ sudo ./run_pose.sh
$ sudo ./run_gaze.sh
$ sudo ./run_trtis.sh
$ sudo ./run_voice.sh

people detection

pose detection

gaze detection


speech recognition and Natural Language Processing


ベンチマークデモの実行

ベンチマーク

$ cd nvme
$ git clone https://github.com/NVIDIA-AI-IOT/jetson_benchmarks.git
$ cd jetson_benchmarks
$ mkdir models

必要な Python モジュールをインストールします。

$ sudo sh install_requirements.sh

モデルをダウンロードします。

$ python3 utils/download_models.py --all --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --save_dir /home/jetson/nvme/jetson_benchmarks/models/

最後にベンチマークを実行します。

$ sudo python3 benchmark.py --all --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

実行結果は以下のとおりです。(全部動かすと 2 時間かかると脅されます。笑)

Please close all other applications and Press Enter to continue...
Setting Jetson xavier-nx in max performance mode
gpu frequency is set from 114750000 Hz --> to 1109250000 Hz
dla frequency is set from 1100800000 Hz --> to 1100800000 Hz
Running all benchmarks.. This will take at least 2 hours...
------------Executing inception_v4------------

--------------------------

Model Name: inception_v4 
FPS:300.15 

--------------------------

Wall Time for running model (secs): 714.0217275619507

------------Executing vgg19_N2------------

--------------------------

Model Name: vgg19_N2 
FPS:61.19 

--------------------------

Wall Time for running model (secs): 409.49467253685

------------Executing super_resolution_bsd500------------

--------------------------

Model Name: super_resolution_bsd500 
FPS:141.83 

--------------------------

Wall Time for running model (secs): 260.71988797187805

------------Executing unet-segmentation------------

--------------------------

Model Name: unet-segmentation 
FPS:140.45 

--------------------------

Wall Time for running model (secs): 434.53681230545044

------------Executing pose_estimation------------

--------------------------

Model Name: pose_estimation 
FPS:237.03 

--------------------------

Wall Time for running model (secs): 337.3893702030182

------------Executing yolov3-tiny-416------------

--------------------------

Model Name: yolov3-tiny-416 
FPS:511.38 

--------------------------

Wall Time for running model (secs): 392.12764382362366

------------Executing ResNet50_224x224------------

--------------------------

Model Name: ResNet50_224x224 
FPS:793.35 

--------------------------

Wall Time for running model (secs): 388.17510437965393

------------Executing ssd-mobilenet-v1------------

--------------------------

Model Name: ssd-mobilenet-v1 
FPS:854.21 

--------------------------

Wall Time for running model (secs): 423.615553855896

                Model Name         FPS
0             inception_v4  300.154714
1                 vgg19_N2   61.191951
2  super_resolution_bsd500  141.831304
3        unet-segmentation  140.447409
4          pose_estimation  237.027765
5          yolov3-tiny-416  511.377979
6         ResNet50_224x224  793.352630
7         ssd-mobilenet-v1  854.207239

個別にデモを動かすこともできます。

Inception V4

$ sudo python3 benchmark.py --model_name inception_v4 --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

VGG19

$ sudo python3 benchmark.py --model_name vgg19 --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

Super Resolution

$ sudo python3 benchmark.py --model_name super_resolution --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

UNET Segmentation

$ sudo python3 benchmark.py --model_name unet --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

Pose Estimation

$ sudo python3 benchmark.py --model_name pose_estimation --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

Tiny-YOLO-V3

$ sudo python3 benchmark.py --model_name tiny-yolov3 --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

ResNet-50

$ sudo python3 benchmark.py --model_name resnet --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

SSD-MobileNet-V1 Segmentation

$ sudo python3 benchmark.py --model_name ssd-mobilenet-v1 --csv_file_path /home/jetson/nvme/jetson_benchmarks/benchmark_csv/nx-benchmarks.csv --model_dir /home/jetson/nvme/jetson_benchmarks/models/

ルートファイルシステムを NVMe SSD ドライブへ変更する

最初、SD カードからの起動は変わりませんが、systemd によるシステム起動シーケンスで initrd からルートファイルシステムへの chroot 先を SD カードから NVMe SSD ドライブへ切り替えることにより起動時間が早くなります。
systemd-analyze の結果で、33.2 秒 → 17.3 秒へ短縮されました。

$ systemd-analyze plot > result.svg

左: SD カード、右: NVMe SSD ドライブ (result.svg の表示例)
systemd_analyze.png

手順

パーティションを作成します。

$ sudo fdisk /dev/nvme0n1

Command (m for help): n ← n を入力

Select (default p): p ← p を入力
Partition number (1-4, default 1): (改行) ← Enter を入力
First sector (2048-250069679, default 2048): (改行) ← Enter を入力
Last sector, +sectors or +size{K,M,G,T,P} (2048-250069679, default 250069679): (改行) ← Enter を入力

Command (m for help): w ← w を入力

ファイルシステムを ext4 でフォーマットします。

$ sudo mkfs -t ext4 /dev/nvme0n1p1

JetsonHacks のスクリプトをダウンロードして実行します。

$ git clone https://github.com/jetsonhacks/rootOnNVMe.git
$ cd rootOnNVMe/
$ ./copy-rootfs-ssd.sh
$ ./setup-service.sh

最後に再起動します。

$ sudo reboot

カーネルのビルド時間が劇的に短くなりました!

$ ./makeKernel.sh
real    111m40.689s
user    44m39.048s
sys     3m40.908s
↓
real    22m50.904s
user    92m5.668s
sys     8m16.444s

$ ./makeModules.sh
real    207m34.403s
user    108m12.652s
sys     9m6.864s
↓
real    27m43.071s
user    123m45.088s
sys     10m5.556s

注意点

JetsonHacks にも記載されていますが、カーネルやカーネルモジュールを更新した場合は SD カードへの反映も必要になります。
スクリーンショット 2020-06-06 21.44.21.png

カーネルビルド後に SD カードへ反映するコマンドです。
( < UUID> の部分は デバイス毎に変わるため mount や df コマンド等で確認)

$ sudo rsync -av /boot/ /media/jetson/<UUID>/boot/
$ sudo rsync -av /lib/modules/4.9.140-tegra/ /media/jetson/<UUID>/lib/modules/4.9.140-tegra/

(続く)

36
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
32