1台の DGX Spark(GB10)で TensorFold を使い、性格の異なる3モデルを動かして比較しました。
本記事は 「どのモデル/どの量子化(チェックポイント形式)を選ぶか」 に焦点を当てます。
構築編・切り分け編の続編です。数値は手元1台での実測(単発を含む)で、環境依存です。※ IP・ホスト名・認証情報はプレースホルダに置き換えています。
シリーズ
- 前編: 【DGX Spark】TensorFold + LiteLLM + opencode でローカルLLM環境を構築する
- 中編: 不安定化の切り分け
- 後編: TensorFold で3モデル比較(量子化・形式の違い)(本記事)
1. 比較した3モデル
| # | モデル | 種別 | 量子化/形式 | 投機デコード |
|---|---|---|---|---|
| A | Qwen3.8-27B | dense 27B | EXL3 4.00bpw / MLX 4bit | DFlash2(外部ドラフタ) |
| B | Qwen3.6-35B-A3B | MoE(約3B active) | MLX 4bit-MTP | MTP(内蔵) |
| C | Qwen3.8-Flash-Next | MoE 177B(約6B active) | MLX 4bit-MTP(推奨)/EXL3 3.05bpw(暫定) | MTP(内蔵) |
- dense は帯域律速(毎トークン全重みを読む)ため、単機では decode が出にくい。
- MoE は active パラメータが少ないため、総パラメータが大きくても速い。
- 投機デコード(DFlash2 / MTP)が体感速度の最大レバー。
2. 量子化/チェックポイント形式の比較
TensorFold が扱える主な形式の性格をまとめます(本記事の主眼)。
| 形式 | 長所 | 短所 | 備考 |
|---|---|---|---|
| MLX 4bit | 速い・単機の定番 | 難問推論で品質低下の報告あり | TensorFold コミュニティの標準 |
| EXL3 | 「replies are exact」/パック効率 | 実験的。prompt(prefill)が約半分 | ログにも警告が出る |
| NVFP4 | 理論上はFP4ネイティブで速い | GB10(sm_121) では伸びにくい(カーネル成熟度) | FP8/AWQに劣る報告多数 |
| FP8 | 高品質 | 重みが大きい(27Bで約30GB) | 2台構成向き |
| GGUF (Q4_K 等) | 汎用・llama.cpp | 単機では帯域律速 | 比較用 |
実務的には、単機 DGX Spark では 27B は MLX 4bit + DFlash2、
Flash-Next は TensorFold 標準の MLX 4bit-MTP チェックポイントが定番です。
EXL3 は prefill が約1/3 と遅く、常用には不向きです。
3. 実測: 27B dense(EXL3 vs MLX 4bit)
同一条件(TensorFold 直, ユニークプロンプト, thinking off)での比較です。
| 指標 | EXL3 | MLX 4bit |
|---|---|---|
| prefill 30k コールド | 27.9s(~943 tok/s) | 18.9s(~1,393 tok/s) |
| decode 600トークン | 4.9s(~134 tok/s) | 4.0–4.2s(~147–154 tok/s) |
| 投機受入率 | 66% | 72% |
| 起動見積り | 38.4 GiB | 40.5 GiB |
- MLX 4bit のほうが prefill・decode とも速い。
- ただし計測値は同時実行の負荷に強く依存するため、条件を揃えないと逆転して見えます。
Thinking ON/OFF の影響(MLX 4bit)
| 条件 | prefill 26k | decode |
|---|---|---|
| Thinking OFF | ~19.0s(~1,393 tok/s) | 147–154 tok/s |
| Thinking ON | ~19.0s(~1,395 tok/s) | 84–106 tok/s |
- prefill は Thinking と無関係。
- decode は Thinking で約半減(受入率が 72% → 47% に低下)。
- エージェント用途(thinking off)では、思考オフのほうが明らかに速い。
4. 実測: Qwen3.8-Flash-Next(EXL3 → MLX 4bit-MTP)
最初は手元にあった EXL3 3.05bpw(約80GB, qwen4_exp, MTP・vision入り)を起動しましたが、
prefill がボトルネックでした。その後、TensorFold 公式ドキュメントが示す
MLX 4bit-MTP チェックポイント(TensorFold/Qwen3.8-Flash-Next-MLX-4bit-MTP, 約106GB)を入手して切り替えました。
| 指標 | Flash-Next MLX 4bit-MTP(推奨) | Flash-Next EXL3 3.05bpw | 27B MLX4bit(参考) |
|---|---|---|---|
| prefill 26k コールド | ~2,770 tok/s(9.5s) | ~857 tok/s | ~1,393 |
| decode prose | ~44 tok/s | ~50 | ~147 |
| decode 規則的 | 117–130 tok/s | 108–136 | 147 |
| 投機受入率(規則的) | 99.8%(512/513) | 99% | — |
| window | 253,001 | 262,144 | 262,144 |
| 起動見積り | 87.35 GiB | 61.65 GiB | 40.5 GiB |
| ロード時間 | 35.6s | 76.1s | 21.4s |
- MLX 4bit-MTP に替えると prefill が約3.2倍(EXL3比)。decode はほぼ同等、window も 253k を確保。
- MLX 4bit-MTP は
TENSORFOLD_CUDA_MEMORY_LIMIT_GB=110により 253k窓(公式の既定だと約74kに縮む)。 - 公式ドキュメントの参考値(prefill 2,300–2,500 / decode 62–76)と概ね一致(本機はやや prefill 高め)。
5. 並列化(--parallel)の効果
TensorFold の --parallel は CUDA では既定が「1件ずつ直列」。エージェント用途ではここが体感を大きく左右します。
| 直列(既定) |
--parallel 8(27B) |
|
|---|---|---|
| 8並列の合計 decode | 実質1本ずつ | 約595 tok/s(約4倍) |
| 単一リクエスト | フル速度だが待たされる | ほぼ同速度 |
-
Flash-Next は
--parallel 4を使用(253k窓×4本でメモリを使い切るため。起動ログに「up to 4 streams」と出る)。 - LiteLLM 側の
max_parallel_requestsをサーバの値に揃える(片方だけ上げると 429 や拒否)。
6. 投機デコードの違い
| 方式 | 仕組み | 特徴 |
|---|---|---|
| DFlash2 | ブロック拡散型ドラフタ | 27B で有効。コード編集など予測しやすい入力で受入率が高い |
| MTP | モデル内蔵の多トークン予測 | Flash-Next / MoE 系。追加ドラフタ不要 |
- 受入率はワークロード依存。番号列挙のような規則的出力では 99%、散文では 50〜65% 程度。
- 「同じモデル・同じエンジンでも、タスクで 2〜3倍変わる」ため、単一の tok/s だけでは判断できません。
7. 起動時間・初回コンパイル
| モデル | ロード時間 | 備考 |
|---|---|---|
| 27B EXL3 | ~6.7s | 再起動時はCUDA拡張を再利用 |
| 27B MLX 4bit | ~21s | — |
| Flash-Next EXL3 | ~76s | 初回は CUDA拡張のコンパイルが走る(building CUDA extension ...) |
| Flash-Next MLX 4bit-MTP | ~36s | 初回DL(約106GB)後にロード。CUDA拡張は再利用 |
初回起動のみ、対象アーキテクチャ用の CUDA 拡張ビルドが入ります(
first start after an install or update)。
2回目以降は再利用されるため速くなります。
8. コミュニティ知見(外部調査の要点)
- NVFP4 は GB10 では伸びにくい:カーネル/エコシステムの成熟度の問題。
-
MLX 4bit + DFlash2 は単機最速クラスだが難問推論で品質低下の報告あり。
統制研究では TensorFold + MLX4bit が 68.3 tok/s / 正答14/24、重みだけ NVFP4 に替えると 52.6 tok/s / 18/24 に回復。 -
Flash-Next は MLX 4bit-MTP が TensorFold 標準(本機 prefill ~2,770 / window 253k)。
EXL3 は実験的で prefill が約1/3。NVFP4 版は GB10 では decode が伸びにくい。 - 投機デコードが最大のレバー(有無で decode が 2〜3倍)。
-
Strata は「12GB GPU + 32GB RAM」級の民生機向けで、専門家をシステムRAMに退避する設計。
DGX Spark は CPU/GPU が128GBを共有するため思想が逆で、Spark では TensorFold / SGLang / vLLM が使われます。
9. 選定の指針(単機 DGX Spark)
| 目的 | おすすめ |
|---|---|
| 速さ最優先(単発・短〜中くらいの文脈) | Qwen3.8-27B + MLX 4bit + DFlash2 + --parallel 8 |
| 賢さ+prefill重視(長文脈・複雑タスク・エージェント) | Qwen3.8-Flash-Next + MLX 4bit-MTP(prefill ~2,770 / window 253k) |
| 品質を厳密に | NVFP4 / FP8(ただし GB10 は NVFP4 の伸びに注意) |
10. まとめ
- 単機 DGX Spark では dense は帯域律速、MoE は速い。加えて投機デコードが効く。
- 量子化は 速度・品質・メモリのトレードオフ。MLX 4bit は速いが品質注意、EXL3 は prefill が遅い、NVFP4 は GB10 で伸びにくい。
- Flash-Next はチェックポイント選択が最重要:EXL3(暫定)→ MLX 4bit-MTP で prefill が約3.2倍(~857 → ~2,770 tok/s)。
- Thinking ON/OFF で decode が約2倍変わる(prefill は不変)。
- まずは
--parallelを明示し、LiteLLM の並列度を揃える。これだけで体感が大きく変わります。