Files
club-3090/results/v0.20-migration/dual-bench.txt
noonghunna 0bdcb69fa3 results: re-bench dual.yml + dual-dflash + dual-dflash-noviz on v0.20
Closes the "dual variants not yet re-benched on v0.20" caveat from PR #23.
Confirms no v0.20 regression on fp8 / FP16 paths — code TPS within bench
variance of chart values across all 3.

n=5 measured + 3 warmup per prompt:

| Variant            | Chart (prior) narr / code | v0.20 measured narr / code | Δ                       |
|--------------------|----------------------------|------------------------------|-------------------------|
| dual.yml           | 69.05 / 88.58              | 68.61 / 90.71  (CV 1.8% both) | narr -0.6% / code +2.4% |
| dual-dflash.yml    | 81.94 / 124.93             | 77.12 / 125.97 (CV 2-4%)      | narr -5.9% / code +0.8% |
| dual-dflash-noviz  | 78.19 / 126.99             | 78.94 / 123.18 (CV 2-3%)      | narr +1.0% / code -3.0% |

dual-dflash narrative is the only delta outside CV (-5.9%); could be
substrate (different driver / power state at chart capture) or a minor
DFlash N=5 spec-decode regression on v0.20. Chart value stays — within
±5pp of measured, within bench noise band.

Both dual.yml and dual-dflash* are "Genesis-less by design" (zero Genesis
env vars). The migration only bumped the image SHA on these — no env-var
changes — which is consistent with the flat result. The +50% TPS jump
on TQ k8v4 we reported to Sander in discussion #19 came from enabling
his full PROD env-var stack on the TQ KV path; fp8 / FP16 dual paths
don't share the same patches and don't exhibit a similar bump.

Updated `docs/DUAL_CARD.md` performance summary table with the new
measured numbers + a per-variant Δ column. Per-config summaries written
to `results/v0.20-migration/dual-{yml,dflash,dflash-noviz}.summary`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 19:34:28 +00:00

46 lines
3.1 KiB
Plaintext

========== NARRATIVE (prompt=65 chars, max_tokens=1000) ==========
=== warmups (3) ===
warm-1 wall= 42.93s ttft= 27642ms toks=1000 wall_TPS= 23.30 decode_TPS= 65.43
warm-2 wall= 14.27s ttft= 118ms toks=1000 wall_TPS= 70.08 decode_TPS= 70.66
warm-3 wall= 14.80s ttft= 143ms toks= 999 wall_TPS= 67.50 decode_TPS= 68.16
=== measured (5) ===
run-1 wall= 14.79s ttft= 146ms toks=1000 wall_TPS= 67.62 decode_TPS= 68.29
run-2 wall= 14.54s ttft= 150ms toks=1000 wall_TPS= 68.77 decode_TPS= 69.49
run-3 wall= 14.33s ttft= 143ms toks=1000 wall_TPS= 69.77 decode_TPS= 70.47
run-4 wall= 14.32s ttft= 121ms toks=1000 wall_TPS= 69.83 decode_TPS= 70.42
run-5 wall= 14.91s ttft= 118ms toks=1000 wall_TPS= 67.05 decode_TPS= 67.58
=== summary [narrative] (n=5) ===
wall_TPS mean= 68.61 std= 1.25 CV= 1.8% min=67.05 max=69.83
decode_TPS mean= 69.25 std= 1.29 CV= 1.9% min=67.58 max=70.47
TTFT mean= 136ms std= 15ms min=118ms max=150ms
========== CODE (prompt=78 chars, max_tokens=800) ==========
=== warmups (3) ===
warm-1 wall= 9.63s ttft= 154ms toks= 800 wall_TPS= 83.07 decode_TPS= 84.42
warm-2 wall= 9.13s ttft= 117ms toks= 800 wall_TPS= 87.66 decode_TPS= 88.79
warm-3 wall= 6.99s ttft= 153ms toks= 626 wall_TPS= 89.52 decode_TPS= 91.52
=== measured (5) ===
run-1 wall= 5.21s ttft= 144ms toks= 483 wall_TPS= 92.79 decode_TPS= 95.43
run-2 wall= 8.85s ttft= 148ms toks= 800 wall_TPS= 90.41 decode_TPS= 91.95
run-3 wall= 8.08s ttft= 144ms toks= 743 wall_TPS= 91.94 decode_TPS= 93.60
run-4 wall= 8.98s ttft= 147ms toks= 800 wall_TPS= 89.04 decode_TPS= 90.52
run-5 wall= 8.95s ttft= 146ms toks= 800 wall_TPS= 89.37 decode_TPS= 90.85
=== summary [code] (n=5) ===
wall_TPS mean= 90.71 std= 1.62 CV= 1.8% min=89.04 max=92.79
decode_TPS mean= 92.47 std= 2.05 CV= 2.2% min=90.52 max=95.43
TTFT mean= 146ms std= 2ms min=144ms max=148ms
=== GPU state ===
0, 66 %, 22246 MiB, 24576 MiB, 228.71 W, 66
1, 86 %, 22246 MiB, 24576 MiB, 229.33 W, 63
=== Last 3 SpecDecoding metrics ===
(APIServer pid=1) INFO 05-01 19:15:26 [metrics.py:101] SpecDecoding metrics: Mean acceptance length: 3.44, Accepted throughput: 64.40 tokens/s, Drafted throughput: 79.19 tokens/s, Accepted: 644 tokens, Drafted: 792 tokens, Per-position acceptance rate: 0.932, 0.822, 0.686, Avg Draft acceptance rate: 81.3%
(APIServer pid=1) INFO 05-01 19:15:36 [metrics.py:101] SpecDecoding metrics: Mean acceptance length: 3.51, Accepted throughput: 66.59 tokens/s, Drafted throughput: 79.49 tokens/s, Accepted: 666 tokens, Drafted: 795 tokens, Per-position acceptance rate: 0.955, 0.857, 0.702, Avg Draft acceptance rate: 83.8%
(APIServer pid=1) INFO 05-01 19:15:46 [metrics.py:101] SpecDecoding metrics: Mean acceptance length: 3.49, Accepted throughput: 63.19 tokens/s, Drafted throughput: 76.19 tokens/s, Accepted: 632 tokens, Drafted: 762 tokens, Per-position acceptance rate: 0.961, 0.843, 0.685, Avg Draft acceptance rate: 82.9%