1 ポイント 投稿者 GN⁺ 2024-10-17 | 2件のコメント | WhatsAppで共有

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件のコメント

 
bungker 2024-10-18

RyzenのNPUはCPUより少し速いくらいだと思っていましたが、Snapdragonへの物欲が一気にしぼみますね

 
GN⁺ 2024-10-17
Hacker Newsの意見
  • CPUとGPUの性能差は小さい。onnxruntimeの問題である可能性がある。NPUは速度よりも低消費電力に重点を置いている

    • NPUはAI演算をCPUから分離し、SoCの一部として使われる
    • CPU、NPU、GPUの消費電力を無限ループで測定すると、NPUが最も低いと予想される
    • NPUは多くのシリコン面積を占めるため、適切に活用されないのは惜しい
  • Apple Neural EngineはCPUやGPUよりはるかに高速

    • 性能はモデルアーキテクチャ、変換、チューニングによって変わる
    • XCodeはモデルの実行時間を測定するツールを提供している
    • MLフレームワーク/ランタイムは、すべての演算子を実装していない場合がある
  • NPUの目的は、小さなモデルを低電力で実行すること

    • NPUは最適化されたモデル向けであり、小規模な処理を担当する
    • Windowsでは全画面OCRなどを実行できる
  • モデルをNPUにデプロイするには、プロファイルベースの最適化が必要

    • CPUでうまく動くモデルでも、NPUでは期待外れの結果になることがある
  • GitHubの説明のほうがブログより有益

    • int8 matmul実行時のonnx性能は約0.6TF
  • QualcommはNPUへの直接アクセスを許可していない

    • 変換ツールが最適化を見落とす可能性がある
    • NPUは小規模なMLモデルと高速な関数近似に適している
  • Qualcomm SNPE SDKを使える可能性がある

    • Hexagon SDKがきちんと動作するのか気になる
  • この記事は、特定のNPU、特定のベンチマーク、特定のライブラリとフレームワークについてのもの

    • したがって、一般的な結論を出すのは難しい