ailia LLM NPU(QNN)ベンチマーク

ailia LLM の QNN バックエンドで Gemma 4 を Qualcomm SoC の NPU で実行した測定結果を、同じ端末の CPU 実行と比較して示します。

QNN バックエンドの使い方は ailia LLM NPU(QNN)ガイド を参照してください。

測定条件

Gemma 4 を 2 機種で測定した結果です。Snapdragon 8+ Gen 1(SM8475 / Hexagon v69)は E2B の FP16 モデル、Snapdragon 7s Gen 3(SM7635 / Hexagon v73)は E2B / E4B の Int16 モデルを使用しています。いずれも QAIRT 2.47、コンテキスト長 8192、AR-256 / AR-1 構成です。

CPU は同じ端末上で、同一の Q4_0 GGUF を標準の llama.cpp 経路で実行した値です(デコーダワーカー 8、コンテキスト 8192)。出荷構成は OpenMP 無効のビルドで、表の「CPU」がこれにあたります。「CPU(OpenMP)」は GGML_OPENMP=ON / OMP_NUM_THREADS=2 でビルドした比較用の構成です。

Decode スループット

81 トークン入力・1,000 トークン生成時のスループットです。

端末モデルCPUCPU(OpenMP)NPU(QNN)NPU の効果
SM8475(Hexagon v69)E2B / FP169.971 tokens/s8.482 tokens/s8.062 tokens/s0.81 倍
SM7635(Hexagon v73)E2B / Int165.805 tokens/s4.195 tokens/s6.410 tokens/s1.10 倍高速
SM7635(Hexagon v73)E4B / Int163.351 tokens/s3.203 tokens/s3.128 tokens/s0.93 倍

SM7635 の E2B では NPU の Decode が CPU より 1.10 倍(OpenMP ビルド比では 1.53 倍)高速です。一方、SM8475 の E2B(0.81 倍)と SM7635 の E4B(0.93 倍)では CPU を下回ります。Decode は 1 トークンずつ処理するため重みの読み出しが支配的になり、NPU の並列演算性能を活かしにくいためです。

SM8475 E2B の Decode のトークンごとのスループット(1000 トークン生成、CPU / CPU OpenMP / NPU)
SM8475(E2B / FP16)の Decode のトークンごとのスループット(1000 トークン生成)
SM7635 E2B の Decode のトークンごとのスループット(1000 トークン生成、CPU / CPU OpenMP / NPU)
SM7635(E2B / Int16)の Decode のトークンごとのスループット(1000 トークン生成)
SM7635 E4B の Decode のトークンごとのスループット(1000 トークン生成、CPU / CPU OpenMP / NPU)
SM7635(E4B / Int16)の Decode のトークンごとのスループット(1000 トークン生成)

Prefill スループット

入力トークン数を 64〜2,048 まで変えたときのスループット(tokens/s)です。2 トークンのウォームアップ後、評価を伴わない SetPrompt を 2 回呼んで KV キャッシュを消去し、各入力長で 1 トークンだけ生成しています。

端末・モデル・経路6412825651210242048
SM8475 E2B CPU109.35995.72288.24385.66379.94071.244
SM8475 E2B CPU(OpenMP)54.18455.33361.47660.31955.50051.064
SM8475 E2B NPU(FP16)76.244144.406277.775302.667301.791299.827
SM7635 E2B CPU91.55077.06480.49676.18769.75759.192
SM7635 E2B CPU(OpenMP)27.44149.99962.79370.96569.22856.059
SM7635 E2B NPU(Int16)33.60166.523130.329133.404131.367130.252
SM7635 E4B CPU1.69729.10528.41762.66364.38360.897
SM7635 E4B CPU(OpenMP)6.74627.82440.09761.87766.98054.372
SM7635 E4B NPU(Int16)20.30440.89080.70083.75883.31478.258
SM8475 E2B の Prefill スループットと Prefill 中の CPU 使用率(CPU / CPU OpenMP / NPU)
SM8475(E2B / FP16)の Prefill スループット(左)と 2,048 トークン Prefill 中のホストプロセス CPU 使用率(右)
SM7635 E2B の Prefill スループットと Prefill 中の CPU 使用率(CPU / CPU OpenMP / NPU)
SM7635(E2B / Int16)の Prefill スループット(左)と 2,048 トークン Prefill 中のホストプロセス CPU 使用率(右)
SM7635 E4B の Prefill スループットと Prefill 中の CPU 使用率(CPU / CPU OpenMP / NPU)
SM7635(E4B / Int16)の Prefill スループット(左)と 2,048 トークン Prefill 中のホストプロセス CPU 使用率(右)

Prefill 中の CPU 使用率

2,048 トークン Prefill における、最初の生成呼び出し前後のプロセス CPU 時間です。8 コアすべてを使い切った状態を 100% として表しています。アプリケーションプロセスの使用率であり、端末全体の使用率ではありません。

端末・モデルCPUCPU(OpenMP)NPU(QNN)
SM8475 E2B98.7%86.3%3.0%
SM7635 E2B96.4%97.3%2.4%
SM7635 E4B97.5%96.7%2.6%

NPU では Prefill 中の CPU 使用率が 3% 前後に収まるため、アプリケーション側の処理に CPU を残せます。CPU 実行では 8 コアをほぼ使い切るため、発熱と他処理への影響が大きくなります。

VLM(画像入力)の応答時間

同一の 768x768 画像 10 枚、各 100 トークン出力での中央値です。TTFT は画像エンコーダを含むプロンプト設定と最初の生成呼び出しの合計で、モデルのオープンは含みません。

端末・モデル・経路TTFT(中央値)Decode(中央値)
SM8475 E2B CPU83.63 秒12.081 tokens/s
SM8475 E2B CPU(OpenMP)128.22 秒7.491 tokens/s
SM8475 E2B NPU(FP16)6.60 秒7.033 tokens/s
SM7635 E2B CPU95.01 秒5.891 tokens/s
SM7635 E2B CPU(OpenMP)97.45 秒3.569 tokens/s
SM7635 E2B NPU(Int16)8.35 秒6.444 tokens/s
SM7635 E4B CPU115.03 秒3.332 tokens/s
SM7635 E4B CPU(OpenMP)96.90 秒2.642 tokens/s
SM7635 E4B NPU(Int16)15.01 秒3.098 tokens/s

画像入力の TTFT は、SM8475 の E2B で約 12.7 倍、SM7635 の E2B で約 11.4 倍、E4B で約 7.7 倍高速です。CPU と NPU はいずれも同じ 768x768 の画素と 256 個の画像埋め込みを処理しています。

音声入力の応答時間

FLEURS の 10 録音(5 言語 各 2 件、自然な EOS まで生成し上限 256 トークン)の中央値です。TTFT は音声エンコーダを含むプロンプト設定と最初の生成呼び出しの合計で、モデルのオープンは含みません。

端末・モデル・経路TTFT(中央値)Decode(中央値)出力トークン数
SM8475 E2B CPU37.29 秒10.416 tokens/s21〜89
SM8475 E2B CPU(OpenMP)36.49 秒10.539 tokens/s21〜89
SM8475 E2B NPU(FP16)4.06 秒6.495 tokens/s21〜90
SM7635 E2B CPU47.22 秒5.166 tokens/s21〜89
SM7635 E2B CPU(OpenMP)35.37 秒3.846 tokens/s21〜89
SM7635 E2B NPU(Int16)6.98 秒6.356 tokens/s22〜60
SM7635 E4B CPU89.91 秒3.053 tokens/s21〜91
SM7635 E4B CPU(OpenMP)45.99 秒2.947 tokens/s21〜91
SM7635 E4B NPU(Int16)12.37 秒3.018 tokens/s21〜91

音声入力の TTFT は、SM8475 の E2B で約 9.2 倍、SM7635 の E2B で約 6.8 倍、E4B で約 7.3 倍高速です。

SM8475 E2B の VLM / 音声入力の TTFT 内訳(CPU / CPU OpenMP / NPU)
SM8475(E2B / FP16)の VLM / 音声入力の TTFT 内訳(エンコーダ処理と、デコーダの Prefill + 最初のトークン)
SM7635 E2B の VLM / 音声入力の TTFT 内訳(CPU / CPU OpenMP / NPU)
SM7635(E2B / Int16)の VLM / 音声入力の TTFT 内訳(エンコーダ処理と、デコーダの Prefill + 最初のトークン)
SM7635 E4B の VLM / 音声入力の TTFT 内訳(CPU / CPU OpenMP / NPU)
SM7635(E4B / Int16)の VLM / 音声入力の TTFT 内訳(エンコーダ処理と、デコーダの Prefill + 最初のトークン)

メモリ使用量

E2B は SM7635(Hexagon v73)で、LLM / VLM / ALM の各構成を 8 トークン生成で実行したときのメモリ使用量です(単位 MiB、コンテキスト長 8192)。CPU は Q4_0 GGUF と BF16 の mmproj、NPU は Int16 の QNN Model を使用しています。モデルは mmap で読み込むため、実際に確保した作業メモリである匿名メモリ(RssAnon)と、ページキャッシュとして再利用できるファイルマッピング(RssFile)を分けて記載します。ピークはプロセスの最大常駐サイズ(VmHWM)です。

モデルワークロード実行系VmHWMRssAnonRssFile
E2BLLMCPU4574.21524.12896.5
E2BLLMNPU(Int16)1666.8386.41276.2
E2BVLMCPU4881.22512.440.3
E2BVLMNPU(Int16)2161.2673.31483.7
E2BALMCPU4873.72623.01509.1
E2BALMNPU(Int16)2202.5591.61606.7

E4B は同じ端末で、81 トークン入力・100 トークン出力の LLM を 1 回ずつ実行した参考測定です(単位 MiB)。RssAnon と RssFile の内訳は取得しておらず、実行中の PSS を併記します。E2B の表とは条件が異なります。

モデルワークロード実行系VmHWM実行中の PSS
E4BLLMCPU5569.84432.7
E4BLLMCPU(OpenMP)5518.23922.2
E4BLLMNPU(Int16)1976.01801.8

E4B でも NPU のピークは CPU の約 3 分の 1 です。この測定は端末が Thermal Status 1 の状態で、Android のページ回収の影響を受けています。