NVIDIAが最近発売したAIエッジコンピューティング向けのボードコンピュータJetsonNano開発キットを入手しました。
ラズパイブームもあって関心が高いのか、予約待ちの状態が続いています。価格は定価$99で、ラズパイの2倍強という感じ。
この製品のウリは、CUDAというNVIDIAが開発・提供しているGPU向けの汎用並列コンピューティングプラットフォームのコアを搭載しており、この小さなコンピュータでもディープラーニングのGPU処理ができることです。
ラズパイでもNEONに最適化したコードで、何とかリアルタイムの画像処理をトライしているプロジェクトがありますが、ちょっとだけかじってみましたが、やはりまだ荷が重い感じでした。
2倍強の価格でどれくらいのパフォーマンスが出るのか気になっているので、近いうちにこの当たりの評価したいと思います。
Jetson Nano 開発キット
しっかりしたパッケージに梱包されています。簡単な説明書と本体しか入ってないです。付属品一切なし。
左からBeagleBone、JetsonNano、Arudinoを並べています。ラズパイがないですが、どのボードよりも一回り以上大きくて、JetsonNanoモジュールに搭載されているヒートシンクがデカいです。
この開発キットは、JetsonNanoモジュールと開発ボードがセットになって販売されています。JetsonNano本体はちょうどノートパソコン用のメモリとほぼ同じ大きさで、そこにCPU、GPU、メモリ、SDカードスロットなどが組み込まれており、全体をヒートシンクで覆われています。それが開発ボードのスロットに差し込んでねじ止めされている構成です。
GPIO、キーボードやマウスを接続するUSB、モニタに接続するHDMI、カメラ用のCSI(ラズパイカメラV2が接続できる)、M.2インターフェイス、電源用マイクロUSB、外形5.5mmの電源アダプタソケットなどは開発ボード側に搭載されています。
- 注意点
最近のマイコンボードで当たり前のように搭載しているWifiとBluetoothモジュールがないです。開発ボードにはM.2インタフェースがあるので、Wifi・Bluetoothモジュールを刺すことができそうです。Linuxが動くので、USB接続の無線インタフェースでいいかもしれないですが。
あと、電源は5Vで動作しますが、USBマイクロからの給電では、せいぜい2A程度で、カメラを接続してGPUをぶん回すと電力が足りないらしいです。なので、5V・4A程度を供給できるアダプタを別途用意したほうがいいです。(投稿の一番下にアダプタのリンクがあります)
しかも、電源アダプタを利用する場合、J48ピンをジャンパーピンでショートさせる必要があるらしいです。この仕様はちょっと微妙ですね。。ジャンパーピンなんて電子工作しない限り誰も持ってない。。
GPUぶん回す目的でみんなこれを購入するので、最初からアダプタ給電がデフォルトで良かったのではと思います。
J48をピンでショートさせた状態。まぁショートさせるだけなので、導線をグルグル巻きでもいいかも。
とりあえず慣れるまでは、モニタに接続して触ってみるので、モニタ、マウス、キーボードに接続してセットアップを進めていきます。(OSは画面見ながら初期設定するので)
Jetson NanoにOSをインストールする
SDカードのサイズと規格ですが、最低でも16GB UHS-1が必要みたいです。ここでボトルネックになると元も子もないので、ちょっと奮発して64GB UHS-2ぐらいはあったほうがいいです。
OSは以下から入手します。ラズパイだとRaspbian以外にも選択肢がいくつかありますが、Jetsonは一択です。Ubuntu18.04にドライバやら開発環境一式がプリインストールされているイメージがNVIDIAのサイトに公開されています。
いろんなチューニングが施されている可能性があるので、素直にこれ入れたほうがいいでしょう。Ubuntuに開発環境を構築するときにパッケージインストールするであろうアプリはほぼすべて入っていました。(buid-essential, git, docker, python2, python3..)
Write Image to the microSD Card
まず、ラズパイみたいにOSを入手してSDカードに焼きます。Win10でEtcherを使ってイメージをSDに焼きました。これが一番楽です。
SDにOSを焼いたらセットアップして電源ONすると普通のPCみたいに起動して下図の画面がでます。ここからウィザード形式で初期設定していきます。
かなりあっけないです。
デスクトップ画面のイメージがない。。。まぁ普通の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のサイトにあるディープラーニングのチュートリアルを進めていこうかと思います。全部英語で辛そう。。