Unsloth同士の3つ巴。QAT vs 非QAT vs DiffusionGemmaを同じ9種目で殴り合わせたら、QATが「品質互角のまま22%速い」という反則みたいな結果になった【検証・続編 第2回】
こんにちは、くーるぜろです。
続編第2回は、Gemma 4 26B-A4B(MoE)のUnsloth版3兄弟の身内対決です。QAT版(qat-UD-Q4_K_XL)、非QAT版(UD-Q4_K_XL)、そして出たばかりのDiffusionGemma(拡散型、Q4_K_M)。いつもの9種目、RTX 5090(CUDA)で各モデルdet 1回+creative 3回の計108ランを回しました。
結論を3行で。**QAT版は品質で非QAT版と互角以上、なのに生成速度が22%速い。26B-A4Bにも「思考モード」が来て、前回全滅だった捏造種目が3モデルとも全勝。DiffusionGemmaは光る瞬間はあるが、導入の罠・尻切れ・俳句での沈黙死と、まだ「観察枠」**です。
時間がかかりすぎるため、AMD Radeonでの検証はしません。
用語ひとつだけ:拡散型LM
普通のLLM(自己回帰型)は文章を左から右に1トークンずつ生成します。拡散型LMは、マスクだらけの「キャンバス」を用意して、全体を何ステップかかけて同時に埋めていく方式。画像生成AIの文章版です。今回のDiffusionGemmaは、キャンバス(ブロック)を順に埋めていくブロック拡散で、1ステップ約170msかけて盤面全体を一段ずつ確定させていきます。理論上の売りは並列生成による高速化と、文全体を見ながら書ける推敲力。果たして。
今回の構成

3モデルとも同一ビルド(llama.cpp b9592 + DiffusionGemma対応PR)で実行。DiffusionGemmaだけは専用CLIが必要で、ここに最初の罠がありました(後述)。
速度:QATが22%速いという事件

驚いたのはここ。同じUD-Q4_K_XL系の量子化なのに、QAT版が非QAT版より生成で22%も速い。品質のためのQATが速度でも勝つ、選ばない理由を探す方が難しい結果です。推測ですが、QAT済みの重みは量子化と相性のいい素直な分布になっており、軽いカーネルで処理できるテンソル構成に落ちているのだと思います(このあたりは断定しません。確かなのは実測差だけです)。
DiffusionGemmaは1ステップ約170msで、entropy-bound(収束したら早めに切り上げる省力モード)でステップ数が30〜245と伸縮します。「並列生成で速い」という拡散の売り文句に対して、この規模・このスタックでは自己回帰の26B-A4B(269 t/s)の方が実効で速い場面がほとんどでした。
26B-A4Bにも「思考」が来た
前回31B記事で「思考モードはシリーズ最大の発見」と書きましたが、訂正と朗報です。新ビルド+新GGUFでは、26B-A4Bも回答前に思考ブロックを出すようになりました(DiffusionGemmaも思考チャネル持ち)。
効果は劇的で、第4回で4ラン全員が捏造したE1(存在しないオプション)が、今回3モデル×4ラン=12ラン全勝。「`--quantum-boost`は存在しません。imatrixのことでは?」と、31Bと同じ作法で正答しました。第4回の26Bと今回の26Bは同じ系統のモデルです。つまりあの捏造全滅は、モデルの知能の問題というよりチャットテンプレート/ビルドの問題だった可能性が高い。ローカルLLMのベンチは「モデル×量子化×バックエンド」に加えて「ビルドとテンプレートの版数」まで揃えないと比較にならない——シリーズの教訓がまたひとつ増えました。
QAT vs 非QAT:品質は互角、わずかな差もQAT側
本命の比較です。結論、ほぼ互角。差が付いた箇所はどれもQAT版に軍配でした。
共通して良好だったもの: D1(算数)は両者4/4で42,300円(シリーズ通算全勝を更新)。C3(俳句)は両者全ラン完走・3句+季語遵守。B1(plotly)は両者detコードがそのまま実行成功(HTML出力まで確認済み)。A1(SQL)も要点完備で差なし。E1も両者全勝。
差が付いたもの:
D2(JSON抽出)の日付null: 本文にない佐藤さんの異動日を「無い」と言えたか。QAT版は4/4でnull、非QAT版はdetランで日付を推測で埋めて3/4。31Bが16ラン中1回しかnullにできなかった種目で、26B-A4Bは健在です。
A2(バグ修正)の4つ目: 両者4件挙げますが、QAT版は31Bですら見落とした破壊的ソート(元リストの書き換え)を検出。非QAT版の4つ目は「タプルの扱い」で、これも正しいが一段浅い。
なお、東京支社の罠(関係推論)は両者1/4と低空飛行で、ここは前回のGoogle版31B(7/8)だけが突破できている領域。Unsloth系の弱点として3回連続で再現しています。
DiffusionGemma:未来は感じる、今は薦めない
罠1:初期設定では全種目が尻切れ
専用CLIの既定設定では生成が1ブロック(256トークン相当)で打ち切られ、最初の本走では9種目全てが思考の途中で尻切れしました。`-n 2048`を指定して8ブロック確保することで解消。これから試す人は生成長の明示指定を忘れずに。
罠2:temp 0.7でも全ランが同一出力
creative 3ランの出力が、全種目でバイト単位で完全一致。現状のdiffusion-cliではサンプリング温度が事実上効いておらず、「ばらつきを見る」検証ができません。本記事のDiffusionGemma評価が実質「det+1点」なのはこのためです。
それでも光った種目
D2(JSON抽出)は4/4で構文valid+日付null。マスクを埋める方式とスキーマ厳守は相性が良いようで、形式遵守は3モデル中もっとも安定。D1も42,300円で正解、E1も捏造せず、A2は4バグ列挙+pytest完備、B1のコードは実行成功でHTMLまで出ました。短く構造が決まった出力なら、もう実用域が見えています。
しかし俳句がまた全てを破壊する
C3(俳句)は4ラン全てが俳句を1句も出せずに終了。detランは思考チャネルで「Check: 5-7-5? Ko-ri-shi-ko (5), Ka——」とローマ字で音数を数えている最中に沈黙、creative 3ランに至っては序盤で生成が止まりました。12Bでは無限ループ、26B(旧)では全滅、31Bで克服したかに見えた音数セルフチェックの罠は、アーキテクチャを拡散型に変えても殺しに来る。本シリーズの俳句種目、強すぎます。
C2(英日翻訳)も4ラン全てが訳文の途中でぷつりと停止。entropy-boundの「収束したら切り上げる」判定が、文の完成より先に発火している挙動です。長文の自然文生成は現状のDiffusionGemma+llama.cppでは安定しません。
まとめ

買い方の指針です。26B-A4Bを使うならQAT版一択。品質は互角以上、速度は22%上、迷う要素がありません。非QAT版を選ぶ動機は、QAT版が存在しない量子化レベルが欲しい場合くらい。DiffusionGemmaは「観察枠」。JSON抽出のような短い構造化出力では既に面白い性能を見せる一方、導入の罠・長文の尻切れ・多様性ゼロと、検証ベンチに載せるのもひと苦労でした。半年後にもう一度試したい枠です。
検証メモ
llama.cpp b9592(c84e85af6)+ DiffusionGemma対応PR(#24423)ブランチを単一ビルドし、3モデルとも同一バイナリ群で実行(RTX 5090 / CUDA)。DiffusionGemmaは`llama-diffusion-cli`に`--diffusion-steps 128 -n 2048`を指定、entropy-boundデコーダ有効。第4回(26B旧検証)とはビルド・テンプレート版数が異なるため、本記事との直接比較は参考値としてください。
いいなと思ったら応援しよう!
サーバー代とコーヒー代になります☕ 役に立ったら応援よろしくお願いします!