浏览代码

feat(recipes): lab defaults to --enforce-eager — MTP+CUDA-graphs quality bug confirmed by A/B bench

Forum #381350/#44 (0rand): 'mtp or dflash plus cuda graphs seriously hit
quality'. Identical seed/flags on lab: graphs 89/100 (155/174) vs eager
92/100 (162/176) — best score of the whole family, beating redhat's 90.
Cost: c2 decode -7% (43.4->40.5), TTFT +1.6s, c1 decode identical (28.4).
Acceptance healthy in both arms (71.6%, len 3.15) — graphs silently
corrupt sampled output on the glm53 day-0 dev build. glm52 b12x stack
unaffected (graphs+MTP benches 100/100) — do NOT propagate the flag.

Spec updated: lab = outright winner (quality AND throughput), redhat
demoted from quality pick.
Alexander Korolev 1 月之前
父节点
当前提交
96c6bfe777
共有 2 个文件被更改,包括 35 次插入 和 8 次删除
  1. 6 0
      recipes/glm53-flash-nvfp4-lab/recipe.toml
  2. 29 8
      specs/tech-architecture/glm53-recipe-state.md

+ 6 - 0
recipes/glm53-flash-nvfp4-lab/recipe.toml

@@ -80,6 +80,12 @@ args = [
     "--speculative-config", """
 '{"method":"mtp","num_speculative_tokens":3}'""",
     "--language-model-only",
+    # MTP + CUDA graphs degrades OUTPUT QUALITY on the glm53 day-0 dev build
+    # (forum #381350/#44, CONFIRMED by A/B bench 2026-08-28: same seed/flags,
+    # graphs on = 89/100, eager = 92/100; decode unchanged 28.4 t/s @ c1,
+    # c2 -7%, TTFT +1.6s). The b12x glm52 stack does NOT need this (its
+    # graphs+MTP combo benches clean at 100/100) — bug is build-specific.
+    "--enforce-eager",
     "--tool-call-parser", "glm47",
     "--enable-auto-tool-choice",
     "--reasoning-parser", "glm45",

+ 29 - 8
specs/tech-architecture/glm53-recipe-state.md

@@ -14,7 +14,7 @@ All three share served name **`glm53`** — clients never changed between runs.
 
 | recipe | quant | quality | points | decode tg t/s (c1) | tg c2 | TTFT | deployability | MTP |
 |---|---|---|---|---|---|---|---|---|
-| `glm53-flash-nvfp4-lab` | local-inference-lab mixed NVFP4/MXFP8-MTP | **89** | 155/174 | **28.4** | **43.4** | 3.9 s | 70 | ✅ k=3, accept len ~2.9–3.5, ~63–83 % |
+| `glm53-flash-nvfp4-lab` | local-inference-lab mixed NVFP4/MXFP8-MTP | **92** (eager) / 89 (graphs) | 162/176 | **28.4** | 40.5 | 5.6 s | **72** | ✅ k=3, accept len ~2.9–3.5, ~63–83 % |
 | `glm53-flash-nvfp4-redhat` | RedHatAI W4A4 compressed-tensors | **90** | 159/176 | 13.9 | 13.8 | 2.2 s | 67 | ❌ (no MTP weights in checkpoint) |
 | `glm53-flash-nvfp4` | LibertAIDAI NVFP4-A16 | **88** | 154/176 | 26.2 | 22.7 | 6.3 s | 69 | ✅ k=5 |
 
@@ -30,13 +30,14 @@ in the same band (NAS load-influenced); decode is the stable discriminator.
 
 ## Read of the numbers
 
-- **lab** is the throughput pick: MTP doubles decode (28–43 t/s vs ~14 baseline)
-  at −1 quality point. Acceptance lengths matched upstream's 2.55–3.5 range.
-- **redhat** is the quality pick (90/100 — best of the three) but is a
-  **baseline-decode dead-end on this box: its checkpoint ships zero MTP tensors**
-  (verified index: 146,745 tensors, none under layer 45), so it is stuck at ~14 t/s.
-- **lab = best agent-throughput/day-driver; redhat = eval ceiling;
-  LibertAIDAI = solid fallback** (proven first, but k=5 MTP regresses at c2).
+- **lab (eager) wins outright**: 92/100 best quality AND 2× decode (28–40 t/s
+  vs ~14 baseline). Acceptance lengths matched upstream's 2.55–3.5 range.
+- **redhat** (90/100 with graphs) is a **baseline-decode dead-end on this box:
+  its checkpoint ships zero MTP tensors** (verified index: 146,745 tensors,
+  none under layer 45), so it is stuck at ~14 t/s — no longer the quality
+  pick either.
+- **lab --enforce-eager = day-driver; redhat = fallback; LibertAIDAI =**
+  proven first but k=5 MTP regresses at c2 (eager might lift it too — untested).
 
 ## Images & patches
 
@@ -49,6 +50,26 @@ in the same band (NAS load-influenced); decode is the stable discriminator.
 Boot markers `[quantprobe] layer=RoutedExperts prefix=model.layers.45.mlp.experts
 algo=MXFP8` confirm the MTP fix is live; `algo=None` there = broken load.
 
+## MTP + CUDA graphs quality bug (forum #381350/#44, CONFIRMED 2026-08-28)
+
+`0rand`: “mtp or dflash plus cuda graphs seriously hit quality — try
+disabling cuda graph capture”. A/B with identical seed/flags on lab:
+
+| arm | quality | points | tg c1 | tg c2 | TTFT |
+|---|---|---|---|---|---|
+| graphs (CUDA graphs ON) | 89 | 155/174 | 28.4 | 43.4 | 3.9 s |
+| **`--enforce-eager`** | **92** | **162/176** | 28.4 | 40.5 | 5.6 s |
+
++3 quality points for −7 % c2 decode — eager is now the lab default. Accept
+metrics were healthy in BOTH arms (71.6 %, len 3.15 eager), so this is not an
+acceptance collapse — graph capture corrupts sampled output silently.
+Corroborating: randomllama (DFlash2 recipe) already flagged “not claiming
+bit-identical greedy outputs” with graphs on. The b12x glm52 stack runs
+graphs + MTP k=4 FULL_AND_PIECEWISE benches clean (100/100) — build-specific
+bug in the glm53 day-0 dev build, do NOT propagate --enforce-eager to glm52.
+Untested follow-ups: LibertAIDAI + eager (k=5; expect ~88→9x), redhat is
+graph-neutral (no MTP, stays 90 with graphs).
+
 ## Operational notes (measured)
 
 ### redhat @ 524288 ctx (2026-08-28)