背景
Android + Vulkan 開発案件, aarch64 で機械学習やグラフィックス(可視化, レンダリング, 描画)開発案件などがある.
AWS などのクラウドでは, グラフィックスの確認が困難(画像を転送して手元で確認しなくてはならない).
エミュレータでは実行が遅すぎる.
性能のよい x86 でクロスコンパイルする手もあるが, いろいろなライブラリの cross-compile がめんどい.
RockPro64 は 4 core a72 + 2 core で CPU 性能はそこそこ良いが, Vulkan 対応していない(GLES も mesa の llvmpipe で CPU 実行?)
Raspberry Pi 4 も Vulkan 非対応(GLES は HW 対応らしいが).
いずれにせよ, 両者ともグラフィックス開発マシンとしてはメモリが少なく(4GB)コンパイルが out-of-memory でこけやすい.
Jetson AGX Xaviar developer kit は 8 core ARMv8.2(A72 相当?) + メモリ 16GB + Volta グラフィックス(Vulkan 対応)があるのでよい.
AGX Xavier の廉価版(?) Jetson Xavier NX が 2020/03 くらいから販売予定ですが, メモリ 8GB です.
そのうち RTX core 搭載 Xavier 出てほしいですね(優秀な小学生さま向けレイトレーシング学習キット用, リアルタイムレイトレーシングで自律運転用)
HW まとめ情報
利点
- 8 core AARCH64 + 16 GB mem で開発(C++ コンパイル)が快適なことが予想される
- Vulkan 1.1 が使える
- 一応 NVIDIA が定期的にドライバアップデートなどしてくれているので, 2,3 年くらいは使えそう.
- 2019/12/02 時点では, 税込み 10 万円以下で買えるので, 消耗品費として扱えよい.
欠点, 注意事項
- 内臓 eMMC(?) は 32 GB しかないので, 開発用領域などに M.2 あたりで SSD 追加必須.
- アップデートで OS 更新すると disk 初期化されてしまうので注意
- M.2 スロットは NVMe SSD に対応. SATA ではないので注意 > Install NVMe SSD on NVIDIA Jetson AGX Developer Kit https://www.jetsonhacks.com/2018/10/18/install-nvme-ssd-on-nvidia-jetson-agx-developer-kit/
- M.2 を挿した場合でも, x16 PCIex スロットと共有できるとは思われる(x16 スロットが x8 接続, M.2 が x4 接続と思われる) https://developer.nvidia.com/embedded/develop/hardware
- USB ポートが少ない(A 一つ. USB-type C 一つ)
- PCI-ex は x16 Gen4(!)ですが, RTX 20180 Ti などの NVIDIA GPU 挿して dGPU として使うのはできません(今後予定はあるようですが... https://devtalk.nvidia.com/default/topic/1063568/jetson-agx-xavier/what-card-can-i-insert-on-jetson-xavier-pcie-/)
セットアップ
初期状態では, 4 コアのみで有効クロック低め(1.2 GHz)なので, リミットを外します.
Jetson Xavier を動かしてみた。
http://takesan.hatenablog.com/entry/2018/09/13/233334
を参考にします.
$ sudo nvpmodel -m 0
# optional
sudo jetson_clocks
jetson_clocks は optional です. 設定すると最高性能モード(?)になるようですが, そのかわり URL 先のようにファンがうるさくなります.
nvpmodel -m 0
だけでもいいかもしれません. 冬場だとほんのりあったかで多少 Jetson 暖房としても活用できます.
Vulkan
vulkaninfo で version 1.1.70 でした.
また, vulkan-smoketest が動作するのを確認しました.
ただし, 使える NV 拡張はさほど多くはありません.
アップデート
そのままでは CUDA などが入っておらず, firmware も古いので,
開発を始める前にまずはアップデートをおすすめします.
GUI があるのでアップデートは楽です.
ただ, OS image をアップデートする場合, 内臓 disk 初期化されてしまいますのでご注意ください
コンパイル速度
embree-aarch64 を Release でコンパイルしてみました.
RockPro64 : 5 分ほど
AGX Xavier : 2 分ほど(4 コア低消費電力モードだと 10 分)
なかなか良いのではないでしょうか.
ちなみに Threadripper 1900X(8 cores)だと 42 秒でした.
NVMe 速度
Crucial SSD M.2 1000GB P1(1 TB. Gen3 x 4)を追加しました.
hdparm でテストしてみます.
$ sudo hdparm -t /dev/nvme0n1
/dev/nvme0n1:
Timing buffered disk reads: 4038 MB in 3.00 seconds = 1345.92 MB/sec
1.3 GB/s でした. 仕様上は read 2 GB/s ですのでいくらか遅いようですが, 実務上は十分な速度かと思います. NVMe(SSD)に適した計測ツール変えたらより正確に速度を算出できるかもしれません.
TODO
- 最新ドライバ, 最新 JetPack インストール
- Sascha 先生の Vulkan サンプル https://github.com/SaschaWillems/Vulkan など, 各種 Vulkan アプリの動作検証
- 今後のドライバアップデートで Vulkan cooperative matrix にもし対応したら, Vulkan から Tensor core を叩けるか試す
-
Jetson PyTorch(arm64 + CUDA 対応) を試す
- とりあえず動くの確認しました.
-
PyTorch のコンパイルを試す
- non-CUDA ビルドは確認しました.