Qualcomm NPUベンチマーク
紹介
- Microsoftは、QualcommのArmベースSoCで動作するWindowsを搭載したSurfaceタブレットを提供している。
- このタブレットはAI PCとして宣伝されており、他のシステムよりも高速かつ効率的に機械学習モデルを実行できるとされている。
- Qualcommのハードウェア、特にNPUに強い関心があり、このプラットフォームにサードパーティ製アプリを移植するために多くの時間とリソースを投じた。
- しかし、外部開発者が素早く結果を得るためのコード例やベンチマークがほとんどなかったため、性能を示す独立プロジェクトを構築した。
- 期待していたより性能が低かったため、レイテンシ削減のアイデアを得る目的でベンチマークを公開した。
インストール
Python
- テストスクリプトを実行するためにPythonを使用する。
- Microsoft Store版のPythonはArmアーキテクチャをサポートしていないため、公式のPython.orgインストーラーの使用を推奨する。
- 報告された結果ではPython 3.11.9を使用している。
Cmake
- Onnxをコンパイルするためにcmakeビルドツールが必要。
- Powershellで
winget install cmakeコマンドを実行する。
Visual Studio
- コンパイラのためにVisual Studioが必要。
- Visual Studio Community Editionをダウンロードしてインストールする際に、
Desktop C++ Developmentワークロードを選択する。
Pipパッケージ
- 必要なPythonパッケージは
py -m pip install -r requirements.txtコマンドでインストールできる。
- Qualcomm Onnx Runtimeと互換性のあるOnnxバージョン1.16を使用する。
ベンチマーク
実行
- ベンチマークの実行:
py benchmark_matmul.py
出力の見方
- Onnxランタイムは初期ログの大量出力を行う。
- ベンチマーク結果では、CPUとNPUの数値結果が一致することを確認している。
- CPUは821 Gigaops、1つ目のNPUアプローチは225 Gigaops、2つ目は573 Gigaopsの性能を示した。
ベンチマーク測定
- ベンチマークでは、OpenAIのWhisperのようなTransformerモデルで最も時間を消費するレイヤーに似た、6つの大規模な行列積を実行する。
- NPUは主に量子化モデルを効率的に実行し、8ビットの入力と出力を使うモデルの方が高速である。
混乱を招く可能性のある要因
計算上の制約
- 現代のTransformerモデルは大規模な行列積を基盤としており、メモリ律速になる可能性がある。
- 入力行列をより正方形に近づけることで、タイル化と再利用を可能にする。
電源設定
- Windowsのエネルギー使用設定を"最高のパフォーマンス"に設定し、タブレットを電源に接続した状態でベンチマークを実行する。
モデルトポロジー
- 現代のAIモデルを反映したグラフを生成しつつ、解釈しやすいように単純化する。
構成ミス
- モデルのビルド方法や実行方法によっては、ドライバやアクセラレータ実装の高速パスから外れてしまう可能性がある。
Onnxフレームワーク
- WindowsでAIアクセラレーションにアクセスする方法はいくつかあり、Onnxが最も適したフレームワークに見える。
結果の解釈
- Snapdragon X 12-core X1E80100で実行した場合、NPUの結果はCPUより遅い。
- マーケティング資料で約束された45兆ops/sの1.3%にすぎない性能しか出ていない。
- Nvidia Geforce RTX 4080 Laptop GPUでは3.2msで実行され、2,160 Gigaopsの性能を示した。
GN⁺のまとめ
- Qualcomm NPUの性能は期待に届かず、CPUより遅い結果を示した。
- NPU性能を最適化するためのソフトウェア変更の可能性に期待がある。
- Onnxフレームワークは、Qualcomm NPUでアクセラレーション性能を得るための最適な選択肢に見える。
- Nvidia GPUと比較すると、Qualcomm NPUの性能は大きく見劣りする。
2件のコメント
RyzenのNPUはCPUより少し速いくらいだと思っていましたが、Snapdragonへの物欲が一気にしぼみますね
Hacker Newsの意見
CPUとGPUの性能差は小さい。onnxruntimeの問題である可能性がある。NPUは速度よりも低消費電力に重点を置いている
Apple Neural EngineはCPUやGPUよりはるかに高速
NPUの目的は、小さなモデルを低電力で実行すること
モデルをNPUにデプロイするには、プロファイルベースの最適化が必要
GitHubの説明のほうがブログより有益
QualcommはNPUへの直接アクセスを許可していない
Qualcomm SNPE SDKを使える可能性がある
この記事は、特定のNPU、特定のベンチマーク、特定のライブラリとフレームワークについてのもの