Jetson Nano Developer Kit を入手しました。Jetson Nano は Tegra X1 を搭載した SBC です。各種インターフェースを搭載した I/O ボードがセットになっています。そのため見た目は Raspberry Pi のような印象を受けますが、上に載ってる Compute Module のような小さいカードの方が本体です。
Nano は Jetson シリーズの中でも低価格で入手しやすくなっています。その代わり搭載されている Tegra X1 のアーキテクチャは少々古い世代のもので、GPU も GeForce でいえば 900 シリーズの Maxwell に相当します。また同じ X1 を使用している Jetson TX1 や SHILED TV (Android TV) よりも Shader Core 数が半減しています。公式ページに書かれている 472 GFLOPS は fp32 ではなく AI 向け fp16 のものです。
Tegra X1 Device | CPU clock | Shader | GPU clock | GPU fp32 | GPU fp16 |
---|---|---|---|---|---|
TX1/SHIELD TV | A57 1.9GHz | 256 sp | 1000 MHz | 512 GFLOPS | 1024 GFLOPS |
Jetson Nano | A57 1.4GHz | 128 sp | 922 MHz | 236 GFLOPS | 472 GFLOPS |
Tegra X1 には Cortex-A53 含めて CPU が 8 core 搭載されているのですが、過去の Tegra 同様省電力 core が見えない仕様のようです。8 core 同時稼働ができないため、実質 4 core 相当となっています。
Nano にはパフォーマンス重視の big core A57 が載っているので、同じ Quad core でも Little core のみだった Raspberry Pi 2/3 より CPU 性能は高くなります。ただし最近リリースされた Raspberry Pi 4 では big core (Coretex-A72) に置き換わったため、この点での優位性はなくなりました。
Device | CPU core | clock | IA | RAM | 価格 |
---|---|---|---|---|---|
Raspberry Pi 2(旧) | Cortex-A7 Little | 0.9 GHz | ARMv7A | 1GB | $35 |
Raspberry Pi 2(新) | Cortex-A53 Little | 0.9 GHz | ARMv8.0A | 1GB | $35 |
Raspberry Pi 3 | Cortex-A53 Little | 1.2 GHz | ARMv8.0A | 1GB | $35 |
Raspberry Pi 3+ | Cortex-A53 Little | 1.4 GHz | ARMv8.0A | 1GB | $35 |
Raspberry Pi 4 | Cortex-A72 big | 1.5 GHz | ARMv8.0A | 1-4GB | $35-55 |
Jetson Nano DevKit | Cortex-A57 big | 1.4 GHz | ARMv8.0A | 4GB | $99 |
似たようなボードのスペックをいくつかまとめてみました。より詳しい表は wiki の方に載せています。メモリ速度に結構違いがあります。
Device | SoC | CPU core | clock | RAM | MEM B/W | TPU/GPU |
---|---|---|---|---|---|---|
Jetson Nano | Tegra X1 | A57 x 4 | 1.4GHz | 4GB | 25.6GB/s | 472 GF@fp16 |
Coral Dev Board | NXPi.MX 8M | A53 x 4 | 1.5GHz | 1GB | 12.8GB/s | 4 TOPS@int |
Raspberry Pi 4 | BCM2711 | A73 x 4 | 1.5GHz | 4GB | 9.6GB/s | |
Raspberry Pi 3+ | BCM2837B0 | A53 x 4 | 1.4GHz | 1GB | 3.6GB/s | 28.8 GF@fp32 |
Dragonboard 410c | Snapdragon410 | A53 x 4 | 1.2GHz | 1GB | 4.2GB/s |
OS は Ubuntu Desktop が用意されています。ARM で最初から GPU が有効なものはなかなか触れないので貴重です。OpenGL ES だけでなく OpenGL が使えますし、Vulkan、CUDA にも対応してます。
いつものように ARM 環境でコンパイル速度を調べようとしたのですが、clang の Version によって速度に違いがあることに気が付きました。あらためてデータを取り直してみました。clang の Version が上がるほどビルド速度が遅くなっているようです。
Device | v3.5 | v3.9 | v4.0 | v5.0 | v6.0 | v7.0 | v8.0 |
---|---|---|---|---|---|---|---|
PC Core i7-4790K | — | — | — | — | 30 | 33 | 31 |
Pixel 3 SDM845 | — | — | — | — | — | — | 35 |
Mac i7-3615QM | — | — | — | — | — | 42 | — |
PC A10-7870K | — | 64 | 69 | 70 | 74 | 79 | 69 |
Mac i5-3210M | — | — | — | — | — | 98 | — |
ZenFone3 ZC553KL | — | — | — | — | — | — | 97 |
Chromebook C101PA | — | 96 | 95 | — | — | — | — |
Jetson Nano | — | 108 | 113 | 113 | 118 | 125 | 121 |
PC Celeron J1900 | — | 174 | 189 | 192 | 202 | 216 | 207 |
Chromebook 2955U | — | 191 | 207 | 216 | 225 | 248 | 231 |
PC x7-Z8700 | — | — | — | — | 274 | 304 | 297 |
Raspberry Pi 3B | 148 | 194 | — | — | 331 | 351 | — |
Raspberry Pi 2B | 314 | 395 | — | — | 752 | 820 | — |
・横軸は clang の Version。数値は秒で値が小さい方が高速。
Windows 上の WSL だと素の Linux より遅くなるため上の表からは除いてあります。wiki の方には WSL 含めたデータを載せています。ストレージ速度など、必ずしも条件が一定ではないので予めご了承ください。
コンパイル時間は core 数や Thread 数が多い方が速くなります。Nano は 8 thread のハイエンドスマートフォンには敵いませんが、RAM も多いし big core なので Raspberry Pi 2/3 より数倍速く、Celeron (Atom) 搭載 PC と比べても半分近い時間でコンパイルが完了しています。
TensorFlow も普通に CUDA で動きます。PC と同じコードがそのまま走るので、メモリ容量の制限はあるものの学習も可能です。TensorFlow をソースからビルドしなおすことで、Python だけでなく C言語 API も使うことができました。
関連ページ
・Compile Benchmark
・Jetson Nano
関連エントリ
・Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
・Snapdragon 845 の浮動小数点演算速度
・ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
・ARM CPU 上の開発環境とコンパイル時間の比較
・AMD CPU Ryzen とコンパイル時間の比較 (2)
・AMD CPU Ryzen とコンパイル時間の比較
・ARM CPU の浮動小数点演算能力まとめ