NVIDIA Jetson Nano開発キット入手

NVIDIAが最近発売したAIエッジコンピューティング向けのボードコンピュータJetsonNano開発キットを入手しました。

ラズパイブームもあって関心が高いのか、予約待ちの状態が続いています。価格は定価$99で、ラズパイの2倍強という感じ。

この製品のウリは、CUDAというNVIDIAが開発・提供しているGPU向けの汎用並列コンピューティングプラットフォームのコアを搭載しており、この小さなコンピュータでもディープラーニングのGPU処理ができることです。

ラズパイでもNEONに最適化したコードで、何とかリアルタイムの画像処理をトライしているプロジェクトがありますが、ちょっとだけかじってみましたが、やはりまだ荷が重い感じでした。

2倍強の価格でどれくらいのパフォーマンスが出るのか気になっているので、近いうちにこの当たりの評価したいと思います。

Jetson Nano 開発キット

しっかりしたパッケージに梱包されています。簡単な説明書と本体しか入ってないです。付属品一切なし。

jetson-20190522-01

左からBeagleBone、JetsonNano、Arudinoを並べています。ラズパイがないですが、どのボードよりも一回り以上大きくて、JetsonNanoモジュールに搭載されているヒートシンクがデカいです。

jetson-20190522-02

この開発キットは、JetsonNanoモジュール開発ボードがセットになって販売されています。JetsonNano本体はちょうどノートパソコン用のメモリとほぼ同じ大きさで、そこにCPU、GPU、メモリ、SDカードスロットなどが組み込まれており、全体をヒートシンクで覆われています。それが開発ボードのスロットに差し込んでねじ止めされている構成です。

GPIO、キーボードやマウスを接続するUSB、モニタに接続するHDMI、カメラ用のCSI(ラズパイカメラV2が接続できる)、M.2インターフェイス、電源用マイクロUSB、外形5.5mmの電源アダプタソケットなどは開発ボード側に搭載されています。

jetson-20190522-02

  • 注意点

最近のマイコンボードで当たり前のように搭載しているWifiとBluetoothモジュールがないです。開発ボードにはM.2インタフェースがあるので、Wifi・Bluetoothモジュールを刺すことができそうです。Linuxが動くので、USB接続の無線インタフェースでいいかもしれないですが。

jetson-20190522-02

あと、電源は5Vで動作しますが、USBマイクロからの給電では、せいぜい2A程度で、カメラを接続してGPUをぶん回すと電力が足りないらしいです。なので、5V・4A程度を供給できるアダプタを別途用意したほうがいいです。(投稿の一番下にアダプタのリンクがあります)

jetson-20190522-06-1

しかも、電源アダプタを利用する場合、J48ピンをジャンパーピンでショートさせる必要があるらしいです。この仕様はちょっと微妙ですね。。ジャンパーピンなんて電子工作しない限り誰も持ってない。。

GPUぶん回す目的でみんなこれを購入するので、最初からアダプタ給電がデフォルトで良かったのではと思います。

jetson-20190522-02

J48をピンでショートさせた状態。まぁショートさせるだけなので、導線をグルグル巻きでもいいかも。

jetson-20190522-02

とりあえず慣れるまでは、モニタに接続して触ってみるので、モニタ、マウス、キーボードに接続してセットアップを進めていきます。(OSは画面見ながら初期設定するので)

jetson-20190522-02

Jetson NanoにOSをインストールする

SDカードのサイズと規格ですが、最低でも16GB UHS-1が必要みたいです。ここでボトルネックになると元も子もないので、ちょっと奮発して64GB UHS-2ぐらいはあったほうがいいです。

Prepare for Setup

jetson-20190522-02

OSは以下から入手します。ラズパイだとRaspbian以外にも選択肢がいくつかありますが、Jetsonは一択です。Ubuntu18.04にドライバやら開発環境一式がプリインストールされているイメージがNVIDIAのサイトに公開されています。

いろんなチューニングが施されている可能性があるので、素直にこれ入れたほうがいいでしょう。Ubuntuに開発環境を構築するときにパッケージインストールするであろうアプリはほぼすべて入っていました。(buid-essential, git, docker, python2, python3..)

Write Image to the microSD Card

まず、ラズパイみたいにOSを入手してSDカードに焼きます。Win10でEtcherを使ってイメージをSDに焼きました。これが一番楽です。

jetson-20190522-02

SDにOSを焼いたらセットアップして電源ONすると普通のPCみたいに起動して下図の画面がでます。ここからウィザード形式で初期設定していきます。

jetson-20190522-02

かなりあっけないです。

jetson-20190522-02

デスクトップ画面のイメージがない。。。まぁ普通のUbuntu18.04です。デスクトップが少し古かった気がしますがまぁ気にするほどではないです。

インストール直後の情報

インストール直後でおおよそ10GBほど消費しています。(SDカードは64GB)

> df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  9.7G   47G  18% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G  4.0K  2.0G   1% /dev/shm
tmpfs           2.0G   28M  2.0G   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M   12K  396M   1% /run/user/120
tmpfs           396M  132K  396M   1% /run/user/1000
/dev/loop0       16M   22K   16M   1% /media/neutral3d/L4T-README

CPU情報

> lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               1
Model name:          Cortex-A57
Stepping:            r1p1
CPU max MHz:         1428.0000
CPU min MHz:         102.0000
BogoMIPS:            38.40
L1d cache:           32K
L1i cache:           48K
L2 cache:            2048K
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32

メモリは4GBです。

> free -h
              total        used        free      shared  buff/cache   available
Mem:           3.9G        1.7G        633M         49M        1.5G        2.1G
Swap:            0B          0B          0B

とりあえずベンチマークしてみる

  • CPUベンチマーク(Unix-Bench)

過去にRaspberry Pi3 Model A+のベンチマークの投稿でラズパイ3のベンチマークを測定しましたが、それと同じ内容です。

これは主にCPUのベンチマークになりますが、シングルコアの測定だと、ラズパイ3に負けてしまう結果になりました。マルチコアの計測だとJetsonのほうがスコアが高いという結果に。プロセッサーの種類が違うので特徴が出ているのでしょうか?まぁあんまり変わらないです。

> git clone https://github.com/kdlucas/byte-unixbench
> cd byte-unixbench/UnixBench
> ./Run

:

------------------------------------------------------------------------
Benchmark Run: 水  5月 22 2019 07:58:10 - 08:26:14
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       13127380.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1437.5 MWIPS (9.9 s, 7 samples)
Execl Throughput                                666.5 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        177459.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           50118.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        505691.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              312315.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  48155.7 lps   (10.0 s, 7 samples)
Process Creation                                662.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2800.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    847.2 lpm   (60.1 s, 2 samples)
System Call Overhead                         347207.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   13127380.0   1124.9
Double-Precision Whetstone                       55.0       1437.5    261.4
Execl Throughput                                 43.0        666.5    155.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     177459.5    448.1
File Copy 256 bufsize 500 maxblocks            1655.0      50118.9    302.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     505691.2    871.9
Pipe Throughput                               12440.0     312315.8    251.1
Pipe-based Context Switching                   4000.0      48155.7    120.4
Process Creation                                126.0        662.2     52.6
Shell Scripts (1 concurrent)                     42.4       2800.5    660.5
Shell Scripts (8 concurrent)                      6.0        847.2   1412.1
System Call Overhead                          15000.0     347207.0    231.5
                                                                   ========
System Benchmarks Index Score                                         332.8

------------------------------------------------------------------------
Benchmark Run: 水  5月 22 2019 08:26:14 - 08:54:19
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       52443010.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5730.8 MWIPS (9.9 s, 7 samples)
Execl Throughput                               2470.5 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        272670.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           72047.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        818417.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1247776.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 157490.4 lps   (10.0 s, 7 samples)
Process Creation                               8557.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6731.7 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    935.7 lpm   (60.2 s, 2 samples)
System Call Overhead                        1322180.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   52443010.5   4493.8
Double-Precision Whetstone                       55.0       5730.8   1042.0
Execl Throughput                                 43.0       2470.5    574.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     272670.8    688.6
File Copy 256 bufsize 500 maxblocks            1655.0      72047.3    435.3
File Copy 4096 bufsize 8000 maxblocks          5800.0     818417.6   1411.1
Pipe Throughput                               12440.0    1247776.4   1003.0
Pipe-based Context Switching                   4000.0     157490.4    393.7
Process Creation                                126.0       8557.8    679.2
Shell Scripts (1 concurrent)                     42.4       6731.7   1587.7
Shell Scripts (8 concurrent)                      6.0        935.7   1559.5
System Call Overhead                          15000.0    1322180.4    881.5
                                                                   ========
System Benchmarks Index Score                                         966.7

Jetsonのウリは前述してますが、CUDAコア搭載していることですので、CPUの優劣は正直どうでもいいのかもしれないです。デスクトップ操作していてもメモリが4GBと多いのもあってヌルヌル動作しています。中古PC買ってUbuntu入れるぐらいなら、Jetsonのほうがいいです。

次回以降に本題に入っていく予定ですが、まずはJetsonのサイトにあるディープラーニングのチュートリアルを進めていこうかと思います。全部英語で辛そう。。