DGX Spark / GB10(MTP)の本命はGemma 4 26B A4B NVFP4だった話
31B Dense寄り構成から、26B A4B構成に評価を更新
結論から書きます。
DGX Spark / GB10上でGemma 4を使うなら、現時点では Gemma 4 26B A4B NVFP4 がかなり有力です。
前回は Gemma 4 31B を BF16 / NVFP4 / MTP で比較し、最終的に「31B NVFP4 + MTP はバックエンド判断LLMとして有望」という結論にしました。
ただ、今回はその後に試した nvidia/Gemma-4-26B-A4B-NVFP4 が、速度面でかなり強い結果になりました。
通常生成の結果は以下です。
short / medium / 制御JSON は、前回と同じベンチ条件で測定しています。

| 構成 | short | medium | 制御JSON |
| 31B NVFP4 + MTP | 16.34 tok/s | 16.87 tok/s | 19.79 tok/s |
| 26B A4B NVFP4 no-MTP 64k | 31.82 tok/s | 32.05 tok/s | 31.77 tok/s |
| 26B A4B NVFP4 + MTP 32k | 54.85 tok/s | 57.07 tok/s | 61.03 tok/s |また、長文コンテキストでも 26B A4B NVFP4 no-MTP 64k はかなり安定していました。
この長文テストで見たいのは、単なる最大context長ではありません。
実運用では、長い会話履歴や作業ログの中に、重要な決定事項が埋もれます。
たとえば、
どの構成が最速だったか
どの数値を採用判断に使うか
GB10をどの役割で使う方針にしたか
なぜ長いcontextを使うのか
といった情報です。
AI NPCやデジタルヒューマン、あるいはバックエンド判断LLMでは、最後の数ターンだけを見ても判断できない場面があります。
そのため今回は、長い擬似ログの中に正解データを埋め込み、最後にそれをJSONで回収できるかを見ました。
つまり、このテストは「長い文章を入れられるか」ではなく、長い履歴の中から、後の判断に必要な情報を見失わずに取り出せるか を見るためのものです。つまり「長いログを読ませたら、昔の重要な決定を忘れずに拾えるか」というテストの結果とお考え下さい。
| 構成 | 入力規模 | prompt_tokens | elapsed_sec | 抽出 |
| no-MTP 64k | 300 blocks | 25,902 | 11.918 sec | 正解 |
| no-MTP 64k | 600 blocks | 50,802 | 28.583 sec | 正解 |
| no-MTP 64k | 700 blocks | 59,102 | 35.837 sec | 正解 |ここまでみての、現時点の使い分けはこうです。

| 用途 | 推奨構成 |
| 普段使いチャット | 26B A4B NVFP4 + MTP 32k |
| VRM / AI NPC会話 | 26B A4B NVFP4 + MTP 32k |
| 制御JSON生成 | 26B A4B NVFP4 + MTP 32k |
| 50k級ログ解析 | 26B A4B NVFP4 no-MTP 64k |
| 長期一時記憶 | 26B A4B NVFP4 no-MTP 64k |
| Dense品質比較 | 31B NVFP4 + MTP |短〜中応答や制御JSONは MTP 32k。
長文prefillは no-MTP 64k。
この分け方がよさそうです。
ここでいう 64k context は、モデルが一度に読める文章量の上限を指します。
ざっくり言えば、AIに渡せる「作業メモ」や「会話履歴」の広さです。
今回の長文テストでは、長い擬似ログの中に重要な決定事項を埋め込み、最後にそれを正しく回収できるかを見ました。
ただし、今回の話は単純に「MoE/A4Bが速いから正解」という話ではありません。
MoE/A4Bが速いのは、推論時に使う有効計算量が軽いので、当然です。
それでも最初にDense寄りの31Bを主流候補として見ていたのは、速度ではなく 統合性 を重視したかったからです。
AI NPCやデジタルヒューマンでは、単発回答の速さだけでなく、人格・口調・判断軸が長く維持されることが重要になります。
今回の結論はこうです。
速度面では 26B A4B NVFP4 が明確に有利。
ただし、人格や判断軸の統合性はモデル内部に丸投げせず、
外部状態管理・プロンプト設計・会話履歴管理で補強する。以下、実際の検証内容です。
検証環境
環境は前回と同じです。
Machine: DGX Spark / GB10
Architecture: aarch64
GPU: NVIDIA GB10
Driver: 580.142
CUDA: 13.0
Docker利用
Container: vllm/vllm-openai:nightly-aarch64
vLLM: 0.20.2rc1.dev246+g28ee78af5今回使ったモデルは以下です。
Target:
nvidia/Gemma-4-26B-A4B-NVFP4
MTP assistant:
google/gemma-4-26B-A4B-it-assistant1. 26B A4B NVFP4 no-MTP 4k
まずはMTPなし、max_model_len=4096 で起動しました。
sudo docker run --rm -it \
--name gemma4-26b-a4b-nvfp4-vllm \
--gpus all \
--ipc=host \
--network host \
-v ~/hf-cache:/root/.cache/huggingface \
--env HF_TOKEN="$HF_TOKEN" \
--env HUGGING_FACE_HUB_TOKEN="$HF_TOKEN" \
vllm/vllm-openai:nightly-aarch64 \
--model nvidia/Gemma-4-26B-A4B-NVFP4 \
--served-model-name gemma4-26b-a4b-nvfp4 \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 4096 \
--max-num-batched-tokens 8192 \
--max-num-seqs 1 \
--gpu-memory-utilization 0.90 \
--trust-remote-code速度は以下です。

前回の31B NVFP4 + MTPが、
short 16.34
medium 16.87
制御JSON 19.79 tok/s
だったので、この時点で26B A4B no-MTPの方が速いです。
2. 26B A4B NVFP4 no-MTP 64k
次に、max_model_len=65536 で起動しました。
sudo docker run --rm -it \
--name gemma4-26b-a4b-nvfp4-vllm-64k \
--gpus all \
--ipc=host \
--network host \
-v ~/hf-cache:/root/.cache/huggingface \
--env HF_TOKEN="$HF_TOKEN" \
--env HUGGING_FACE_HUB_TOKEN="$HF_TOKEN" \
vllm/vllm-openai:nightly-aarch64 \
--model nvidia/Gemma-4-26B-A4B-NVFP4 \
--served-model-name gemma4-26b-a4b-nvfp4-64k \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 65536 \
--max-num-batched-tokens 8192 \
--max-num-seqs 1 \
--gpu-memory-utilization 0.90 \
--trust-remote-code通常ベンチの結果は以下です。

64k contextで起動しても、短〜中応答や制御JSONでは4k時とほぼ同じ速度。
| 構成 | short | medium | 制御JSON |
| no-MTP 4k | 31.94 | 32.16 | 31.85 |
| no-MTP 64k | 31.82 | 32.05 | 31.77 |64kにしても、短〜中程度の通常生成ではほぼ速度低下がありませんでした。
3. 長文コンテキストテスト
次に、64k構成で長文コンテキストテストを行いました。
擬似的な作業ログを大量に並べ、その中に重要情報を前方・中間・後方に分散して埋め込み、最後にJSON形式で抽出させるテストです。
ここでいう `blocks` は、擬似的な会話ログの単位です。
1 block は、User / Assistant / Observation / Next を含む短い作業ログです。
このblockを 300 / 600 / 700 個並べ、その途中に重要情報ブロックを複数箇所へ挿入しています。
そのため、`300 blocks` は単に300行という意味ではなく、擬似会話ログ300単位分に近い長文入力です。
抽出はログ中に埋め込んだ `IMPORTANT_FACTS` の内容を、最後の質問に対して正しくJSON化できたかを見ています。
判定対象は以下の5項目です。
- 最速だった構成
- 制御JSONでの tok/s
- BF16 no-MTP と比べた改善倍率
- GB10の推奨用途
- context長を長期一時記憶として使う意味
今回のテストでは、25k / 50k / 59k tokens のいずれでも、これらの項目を正しく取り出せました。
{
"fastest_config": "NVFP4 + MTP",
"control_json_tokens_per_sec": 19.79,
"improvement_over_bf16_no_mtp": 5.25,
"recommended_role_for_gb10": "バックエンド判断LLM",
"context_memory_value": "1ターンあたり約4000 token級のやり取りを想定し、長期一時記憶としてcontext長を活かす。",
"confidence": "high"
}結果は以下です。

前回の31B NVFP4 + MTPとの比較は以下です。

長文prefill込みでも、26B A4Bの方がかなり軽い結果になりました。
4. MTPを有効化する
次に、26B A4BでもMTPを試しました。
最初に、31B assistantを組み合わせました。
Target:
nvidia/Gemma-4-26B-A4B-NVFP4
Assistant:
google/gemma-4-31B-it-assistantこれは失敗しました。
a and b must have same reduction dim, but got [s47, 8192] X [10752, 1024]hidden dimensionが合っていません。
26B A4B target に 31B assistant を組み合わせるのは不成立です。(当たり前ですが、一応試してみました)
正しい組み合わせはこちらでした。
Target:
nvidia/Gemma-4-26B-A4B-NVFP4
Assistant:
google/gemma-4-26B-A4B-it-assistant起動コマンドは以下です。
sudo docker run --rm -it \
--name gemma4-26b-a4b-nvfp4-vllm-mtp \
--gpus all \
--ipc=host \
--network host \
-v ~/hf-cache:/root/.cache/huggingface \
--env HF_TOKEN="$HF_TOKEN" \
--env HUGGING_FACE_HUB_TOKEN="$HF_TOKEN" \
vllm/vllm-openai:nightly-aarch64 \
--model nvidia/Gemma-4-26B-A4B-NVFP4 \
--served-model-name gemma4-26b-a4b-nvfp4-mtp \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 4096 \
--max-num-batched-tokens 8192 \
--max-num-seqs 1 \
--gpu-memory-utilization 0.90 \
--speculative-config '{"model":"google/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":2}' \
--trust-remote-codeこの構成は起動し、通常生成も通りました。
MTP 4kの結果は以下です。

MTPは明確に効いています。
5. MTP 32k
次に、max_model_len=32768 でMTPを試しました。
sudo docker run --rm -it \
--name gemma4-26b-a4b-nvfp4-vllm-mtp-32k \
--gpus all \
--ipc=host \
--network host \
-v ~/hf-cache:/root/.cache/huggingface \
--env HF_TOKEN="$HF_TOKEN" \
--env HUGGING_FACE_HUB_TOKEN="$HF_TOKEN" \
vllm/vllm-openai:nightly-aarch64 \
--model nvidia/Gemma-4-26B-A4B-NVFP4 \
--served-model-name gemma4-26b-a4b-nvfp4-mtp-32k \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 32768 \
--max-num-batched-tokens 8192 \
--max-num-seqs 1 \
--gpu-memory-utilization 0.90 \
--speculative-config '{"model":"google/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":2}' \
--trust-remote-code結果は以下です。

32k contextでも、通常生成速度はほぼ落ちませんでした。
この結果から、会話・制御JSON用途では MTP 32k がかなり有力です。
6. MTP 32kで長文を読ませる
ただし、MTPは主にdecodeを高速化する仕組みなので、長文prefillにも効くとは限りません。
そこで、25k tokens級の同じ長文入力を使い、`no-MTP 64k` と `MTP 32k` を比較しました。
| 構成 | 入力tokens | 出力tokens | elapsed_sec | 正解データ回収 |
| no-MTP 64k | 25,902 | 127 | 11.918 sec | 成功 |
| MTP 32k | 25,902 | 127 | 13.274 sec | 成功 |結果として、MTP 32kの方が少し遅くなりました。
これは、MTPが主に出力生成、つまりdecode側を高速化する仕組みだからだと考えています。
今回の長文テストは、入力が25,902 tokensに対して、出力は127 tokensだけです。
つまり、処理時間の中心は「長い入力を読むprefill」であり、出力生成部分は短いです。
そのため、MTP/speculative decodingの効果は出にくく、むしろassistant側のオーバーヘッドが乗った可能性があります。
この結果から、短〜中応答や制御JSONでは `MTP 32k`、長文prefill中心の処理では `no-MTP 64k` を使うのがよさそうです。
なお、本記事の起動例は64k context維持を目的とした検証構成であり、省メモリ運用の推奨値ではありません。
省メモリで起動する場合は、`--gpu-memory-utilization` の値を下げ、必要に応じて `--max-model-len` を 32768 / 16384 / 8192 などに落としてください。
7. DenseとMoE/A4Bの考え方
今回の結果だけ見ると、こう言えます。
26B A4Bの方が速い。
だから26B A4Bでいい。MoE/A4BがDenseより速くなりやすいのは自然です。
総パラメータ数に対して、推論時に使う有効計算量が小さくなりやすいからです。
問題は速度だけではありません。
最初にDense寄りの31Bを主流候補として見た理由は、統合性です。
AI NPCやデジタルヒューマンでは、単発の回答品質だけでなく、人格・口調・判断軸・会話方針が長く維持されることが重要になります。
Denseモデルは、推論時の経路が比較的一貫しています。
常にモデル全体を通って出力が作られるため、出力の癖や判断基準を観察しやすい。
一方、MoEでは、入力に応じてrouterがエキスパートを選択します。
つまり、Denseモデルのように常に同じ重み全体を通るわけではありません。
この構造は効率面では有利です。
一方で、AI NPCやデジタルヒューマンのように人格・口調・判断軸の一貫性を重視する用途では、注意点にもなります。
同じキャラクターとして会話しているつもりでも、話題や文脈によって選ばれるエキスパートが変わることで、出力の癖や判断の方向性が微妙にずれる可能性があります。
もちろん、MoEだから必ず人格が分裂する、という意味ではありません。
モデル全体としては、routerや学習によって統合されています。
ただし、長期会話やキャラクター運用では、単発の速度やベンチマークだけでなく、"同じ存在として振る舞い続けられるか"を見る必要があります。
この点が、最初からMoE/A4Bを本命にしきれなかった理由です。
8. 今回の結論
今回の結論は、単純な「MoEが速いから勝ち」ではありません。
DenseにはDenseの良さがあります。
特に、AI NPCやデジタルヒューマンのような用途では、人格・判断軸・文脈理解が一つの存在としてまとまっている感覚が重要です。
その点では、Denseモデルの方が扱いやすいのではないか、という仮説を持っています。
ただし、これは今回の速度ベンチで証明した話ではなく、AI NPC運用上の設計仮説です。
ただし、GB10上での実測を見ると、26B A4B NVFP4の速度差はかなり大きいです。
特にMTP 32kでは、通常生成で55〜61 tok/s程度まで出ています。
この速度差を考えると、GB10上ではDenseを常用本命にするより、MoE/A4Bを主軸にした方が現実的です。
ただし、MoEに統合性を丸投げは怖いと考えています。
速度:
MoE/A4B + MTP
長文prefill:
MoE/A4B no-MTP 64k
人格・記憶・判断軸:
外部状態管理とプロンプト設計で補強そのため、自分で使うとした場合、最終的な構成案は以下を考えています。
会話・制御用:
26B A4B NVFP4 + MTP 32k
長文解析用:
26B A4B NVFP4 no-MTP 64k
品質比較・統合性確認用:
31B NVFP4 + MTP前回、「次は26B A4B NVFP4を試す」と書きました。
実際に試してみたら、普通に本命でした。
GB10上でGemma 4を使うなら、まず26B A4B NVFP4が、ある程度の性能を担保しつつ、ストレスなく使えそうです。
本日はここまで
2026/5/14
