Jetson Nano Developer KitはNVIDIAが提供するエッジAI向けの
公式にUbuntuをサポートしている開発ボード
Ubuntu Weekly Topicsの2019年3月22日号でも紹介しているように、
Raspberry Piよりも
ただしJetson Nano本体はSO-DIMMタイプのスロットに刺せるモジュールボードとして提供され、
本連載としてのポイントは、
さっそく公式の手順を参考に試してみましょう。
機材の準備
Jetson Nano Developer Kitは、
あらかじめJetson Nano以外に次のハードウェアを用意しておいてください。
- 給電用Micro USBケーブル
(5V2A以上) -
Jetson Nanoの電源コネクタとしてRaspberry Piなどと同じようにMicro-Bタイプのケーブルを繋ぐUSBポートが用意されています。Jetson Nanoの要件としては5V2A以上が必要になっているようです。NVIDIAはAdafruitの5V2.
5AのACアダプター で動作確認しているとのことでした。ちなみに内径2.1mm、 外径5. 5mm、 奥行き9. 5mmのセンタープラスな電源ジャックも搭載しています。それに適合する電源プラグを搭載した電源アダプター (たとえばAdfruitの5V4Aの電源アダプター) があればそれを使用することも可能です。電源ジャック側から給電したい場合は、 J25ピンをショートさせてください [2]。 - microSD
-
16GB以上UHS-Iに対応したmicroSDカードが必要です。インストール用のイメージの時点で12GiBほど使用します。また、
ルートファイルシステムはインストール直後で9GiBほど、 もろもろ設定したあとだと12GiBほど使用しているため、 32GBぐらいあったほうが安心かもしれません。ちなみにmicroSDXCのサポートの有無についてはドキュメントには記載がありませんでした。手元で試す限り、 認識はするもののブートローダーでうまく起動できないことがあるようです。どうしても大きなストレージが必要なら、 M. 2スロットにSSDを載せるか、 USB 3. 0の先に外付けのストレージを用意することになります。 - HDMIもしくはDisplayPortのケーブルとディスプレイ
-
初回起動はUbuntuのOEM Configが走ります。つまりデスクトップ画面でユーザーアカウントなどを登録することになるため、
初回起動時はディスプレイが必須です。HDMIとDisplayPortのポートが用意されています。 - USB接続のキーボードとマウス
-
同じく初回起動時のOEM Config時に必要です。USB 3.
0 Type Aのポートが4つ搭載されていますので、 そこに接続してください。 - LANケーブル
-
WiFiは搭載されていないので、
ネットワークを使いたいならRJ45の口に有線のLANケーブルを接続する必要があります。
microSDカードの準備
機材が揃っていることを確認したら、
NVIDIAの開発者向けダウンロードサイトにアクセスすると、
3月30日時点でのファイル名は
ファイルサイズは5.
公式で紹介している書き込み手順では第488回でも紹介しているEtcherかddコマンドを使う方法を採用しています。Etcherならダウンロードしたzipファイルをグラフィカルに書き込めますが、
ddの場合は次のようにunzipしながら書き込みます。ここで
$ unzip -p jetson-nano-sd-r32.1-2019-03-18.zip | sudo dd of=/dev/sdb bs=1M status=progress
実際に書き込まれるパーティションは次のとおりです。
セクタサイズ (論理/物理): 512B/512B パーティションテーブル: gpt ディスクフラグ: 番号 開始 終了 サイズ ファイルシステム 名前 フラグ 2 1049kB 1180kB 131kB TBC 3 2097kB 2556kB 459kB RP1 4 3146kB 3736kB 590kB EBT 5 4194kB 4260kB 65.5kB WB0 6 5243kB 5439kB 197kB BPF 7 6291kB 6881kB 590kB TOS 8 7340kB 7406kB 65.5kB EKS 9 8389kB 9044kB 655kB LNX 10 9437kB 9896kB 459kB DTB 11 10.5MB 10.6MB 131kB RP4 12 11.5MB 11.6MB 81.9kB BMP 1 12.6MB 12.9GB 12.9GB ext4 APP
よくわからない名前のパーティションがいくつかあります。中身を見てもよくわかりませんでした。LNXはLinuxカーネルイメージ、
ストレージの末尾にあるPartition 1がルートファイルシステムとなります。サイズは12GiB
いずれにせよmicroSDカードに書き込めたら、
初回起動(OEM Config)
microSDカードに書き込んだイメージは、





アカウント情報を入力して
ログイン画面での注意事項
最初にログインするときは注意が必要です。そのままだとUbuntu 18.


どうやらJetson Nanoのイメージは、
Unity 7はコミュニティでの開発は継続しているため、

これでGNOME Shell版の新しいUbuntuのUIになりました
日本語環境の構築
NVIDIAのイメージは日本語関連パッケージがインストールされていません。日本語UIや日本語入力が必要な場合は、
まずデスクトップ左にあるLauncherから歯車アイコンのシステム設定を起動します。起動した画面の左端から
インストールが完了したら、
入力ソースの切換が面倒な場合はシステム設定の
日本語環境の構築と合わせてパッケージの更新もしておくと良いかもしれません。
すべての設定が完了したら、
Jetson Nanoのテスト
NVIDIAのイメージの便利な点は、
ということで、
CUDAのサンプルコード
CUDAのサンプルコードは
$ cp -a /usr/local/cuda-10.0/samples/ ~/
サンプルコードのトップディレクトリでmakeを実行すればひととおりビルドしてくれます。時間がかかるのが嫌なら、
まずは第456回でも試したように、
$ cd ~/samples/1_Utilities/deviceQuery $ make $ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA Tegra X1" CUDA Driver Version / Runtime Version 10.0 / 10.0 CUDA Capability Major/Minor version number: 5.3 Total amount of global memory: 3957 MBytes (4148756480 bytes) ( 1) Multiprocessors, (128) CUDA Cores/MP: 128 CUDA Cores GPU Max Clock rate: 922 MHz (0.92 GHz) Memory Clock rate: 13 Mhz Memory Bus Width: 64-bit L2 Cache Size: 262144 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 32768 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: Yes Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: No Supports Cooperative Kernel Launch: No Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1 Result = PASS
期待通りに動いているようですね。ビルドしたバイナリはmake時に
CUDAのサンプル:oceanFFT
oceanFFTはCUDAの高速フーリエ変換ライブラリcuFFTを利用して、
$ cd ~/samples/5_Simulations/oceanFFT/ $ make $ ./oceanFFT

ひたすら海が波打つ様子を眺めて世の中の面倒なことを忘れたいものの、
CUDAのサンプル:smorkeParticles
smorkeParticlesは体積をもった粒子をシミュレートすることにより、
$ cd ~/samples/5_Simulations/smokeParticles/ $ make $ ./smokeParticles

「個性」
CUDAのサンプル:nbody
nbodyはランダムな初期値を元にN体計算を行います。
$ cd ~/samples/5_Simulations/nbody/ $ make $ ./nbody

あんなに一緒だった粒子たちが、
VisionWorksのサンプルコード
GPUを利用したより実践的なデモとして、
まずはサンプルコードを適当なディレクトリにコピーしておきましょう。
$ /usr/share/visionworks/sources/install-samples.sh ~/visionworks/
VisionWorksのサンプル:ハフ変換
ハフ変換のサンプルは、
$ cd ~/visionworks/VisionWorks-1.6-Samples/demos/hough_transform/ $ make $ ~/visionworks/VisionWorks-1.6-Samples/bin/aarch64/linux/release/nvx_demo_hough_transform

人間は結局物事の外側だけを見て判断しているんだなってことがわかるデモです。
VisionWorksのサンプル:移動予測
移動予測のサンプルは、
$ cd ~/visionworks/VisionWorks-1.6-Samples/demos/motion_estimation/ $ make $ ~/visionworks/VisionWorks-1.6-Samples/bin/aarch64/linux/release/nvx_demo_motion_estimation

どんなに探してもウォーリーは見つからないデモです。
UARTへ接続する方法
公式イメージを使用する限りあまりお世話になることはないはずですが、
UARTのピンはJ44としてキャリアボードのほうに搭載されています。具体的にはUSBのポートが手前になるように配置したときの、
たとえば3.
あらかじめホストマシンでシリアルコンソールアプリケーションを起動しておきましょう。シリアルコンソールアプリケーションはscreen、
$ screen /dev/ttyUSB0 115200
dialoutグループに入っていたら、