hipfireのStrix Haloで、opt-in MMQパスによりHFQ4のプリフィルをヒップファイアで約3倍高速化

Reddit r/LocalLLaMA / 2026/4/28

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsModels & Research

要点

  • RDNA向けのLLM推論エンジンであるhipfireに、HFQ4-G256のためのMMQスタイルのプリフィル経路を実験的に追加し、`HIPFIRE_MMQ=1`で有効化するオプトイン仕様にした。
  • 新手法はプリフィル活性をQ8_1のMMQレイアウトに事前量子化し、LDSステージング付きで128×128タイル単位のi8 WMMA計算を行うことで、プリフィル処理をGPUに適したタイル化された行列カーネルへ寄せる。
  • Strix Halo(gfx1151)環境で`HIPFIRE_MMQ=1`を有効にすると、長いプリフィルのスループットが約310〜340 tok/sから約1140〜1260 tok/sへ改善し、概ね約3倍速くなる。
  • このMMQ経路はデフォルトでは有効化されず、対象はRDNA3/RDNA3.5の特定GPU(gfx1100〜gfx1151など)に絞られており、Qwen3.5 9BのHFQ4/MQ4でベンチマーク結果が示されている。
  • 追加した本人はAMDユーザーによる独立した検証を求めており、実装の形はllama.cppのAMD向けMMQプロンプト処理パスに類似していると述べている。

最近、RDNA向けのLLM推論エンジンに、hipfireへHFQ4-G256の実験的なMMQプリフィル・パスを貢献しました。

免責事項:私はPRを書いたので、これは一部貢献メモでもありますが、主にAMDの他のユーザーからの独立した検証を探しています。

このPRの前は、hipfireにおけるHFQ4のプリフィルが、より汎用的/より遅いパスを通っていました。私のStrix Halo環境では、プロンプト処理が明確なボトルネックで、より長いプリフィルではおよそ~310–340 tok/sでした。

新しいパスは、MMQスタイルのプリフィル実装をオプトインで追加します。この文脈において、MMQとは、プリフィルを最適化されていない一連の演算として扱うのではなく、実行のためにGPU向けに適したタイル化された行列―行列カーネルに作業を詰め込む、特殊化された量子化行列乗算パスのことです。実装では、プリフィルの活性をQ8_1のMMQレイアウトに事前量子化し、LDSステージングを伴って、128×128の出力/バッチタイルに対してi8 WMMAを使用します。

次のように有効化すると:

HIPFIRE_MMQ=1

Strix Halo / gfx1151で、より長いプリフィルのスループットが~1140–1260 tok/sほどになります。

変わった点:

  • HFQ4-G256プリフィル用の、HIPFIRE_MMQ=1によるオプトインパスを追加。
  • 対象は当面RDNA3 / RDNA3.5:gfx1100gfx1101gfx1102gfx1103gfx1150gfx1151
  • プリフィルの活性をQ8_1のMMQレイアウトに事前量子化。
  • LDSステージング付きで、128×128の出力/バッチタイルに対するi8 WMMAを使用。
  • llama.cppのAMD MMQプロンプト処理パスと形が似ている。
  • デフォルトでは有効化されない。

ベンチマーク:Strix Halo / gfx1151でのQwen3.5 9B HFQ4/MQ4

KV mode pp MMQ off, tok/s MMQ on, tok/s Speedup
q8 256 363.1 1127.6 3.11x
q8 512 352.0 1179.8 3.35x
q8 1024 328.9 1222.7 3.72x
q8 2048 318.2 1168.5 3.67x
asym4 256 368.6 1108.8 3.01x
asym4 512 360.7 1173.3 3.25x
asym4 1024 333.9 1223.0 3.66x
asym4 2048 312.3 1151.7 3.69x
asym3 256 361.4 1124.5 3.11x
asym3 512 359.8 1187.3 3.30x
asym3 1024 329.9 1259.1 3.82x
asym3 2048 314.1 1216.5 3.87x
asym2 256 374.0 1116.2 2.98x
asym2 512 356.6 1173.2 3.29x
asym2 1024 340.1 1208.5 3.55x
asym2 2048 311.4 1142.9 3.67x

つまり、より長いプリフィルでは、私のStrix Haloの結果が概ね~311–340 tok/sから~1143–1259 tok/sに移りました。

これまでの正しさの検証:

  • バッチ化されたプリフィルを、トークンを1つずつ進める逐次のforward passと比較
  • プリフィルの最終トップトークン一致
  • 選択されたlogitのドリフトが許容範囲内
  • プリフィル後の次のデコードステップもチェックし、KVキャッシュ書き込みの問題を検出
  • q8asym4asym3asym2のKVモードでテスト

注意点:

  • 主に私の1台のStrix Halo / gfx1151環境で検証
  • このパスは実験的
  • デフォルトでは有効化されない
  • 現時点では、これを最終版/正準(canonical)のMMQ実装だとはまだ呼びません
  • より多くのコヒーレンス確認やロングコンテキストのテストがあると有用

メンテナも、マージされたパスをgfx1100でテストし、HIPFIRE_MMQ=1がそこで正常に動作し、ただし小さいながらもプラスの結果が得られたと報告しています:4B pp256で+19.8%。

私が特に今確認したいのは、この実装が他のAMD GPUやAPUでもうまく汎用化できるのか、それとも現在のチューニングが主にStrix Halo / gfx1151にとって有利なだけなのか、という点です。

基本的な正しさのチェックは通っていますが、KVキャッシュ挙動が完全に「弾丸級(bulletproof)」であるとまではまだ確信できていません。微妙なKVキャッシュの問題は、より長い実運用ワークロードでしか表れない可能性があるため、特にロングコンテキストやマルチターン実行での検証をぜひお願いしたいです。

私は以下のような人たちからの結果をとても知りたいです:

  • 7900 XTX / gfx1100
  • 他のRDNA3カード
  • Strix Halo / gfx1151
  • RDNA3.5 APU
  • そしてその他
  • プリフィルが短いチャットのデコードより重要になる、ロングコンテキストのエージェント的ワークロード

PR:https://github.com/Kaden-Schutt/hipfire/pull/73

submitted by /u/Own_Suspect5343
[link] [comments]