Repository navigation
fix(qwen3.8-27b): drop the retracted #1096 decode-cliff claim from 20 composes - #1232
Conversation
… composes The header block asserting an "accumulated-ctx decode cliff" was RETRACTED on 2026-09-08, but only in learnings/ -- it survived verbatim in all 20 qwen3.8-27b vLLM composes, where operators actually read it. There was never a cliff. bench-agentic set TTFT on the first `content` delta, so a thinking model's entire reasoning phase was charged to prefill; the decode window then fell under the harness's own 5%-of-wall "degenerate" rule and it printed "single-block emission ... wall 2.0 tok/s". Fixed in #1218. Measured live at ~21K ctx while the old harness called it collapsed: first reasoning delta 28.64s, first content delta 34.69s, last 35.95s -- 278 reasoning deltas had streamed normally throughout. That rule flags whatever has slow prefill relative to decode, which is also why the "hardware severity split" looked real: Blackwell prefills fast -> large ratio -> "clean"; Ampere + CPU offload -> prefill-dominated wall -> "collapsed". Corrected re-test, both arms, same v0.27.1 pin, cross-checked against vLLM's OWN histograms (recorded in-engine, immune to parser cost or SSE coalescing): MTP n=3 110.2 tok/s @ 21,443 ctx (recorded threshold: collapse ~21k) DFlash2 n=7 159.4 tok/s @ 12,275 ctx (recorded threshold: collapse ~12k) Decode FLAT across 1.2K -> 35.3K on both, zero degenerate turns, zero preemptions, instruments agreeing within 1-2%. Why this matters beyond tidiness: the block told operators "Interim: MTP tier (higher cliff) or SPEC_N=0 for sustained >~20k" -- i.e. throw away the drafter to dodge a problem that does not exist, on the tier whose entire purpose is the drafter. What survives is kept, not deleted: vllm#35387 is a real spec tax that scales with drafter DEPTH, not context (29K: no-spec 57.0 -> n=1 40.6 / n=2 36.0 / n=3 32.7 tok/s), profiled to the cudagraph downgrade FULL_AND_PIECEWISE -> PIECEWISE. A steady tax, not a cliff. Full guard suite green (150 pass / 0 fail). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
hello, i had some difficulties to keep up with the latest progress in the repo, but as far as i understand from above writings, it is said that there's no decode tps degradation at long ctx but it was a bench misread. but the situation is different I guess . (or I really do smt wrong) thats why i made a small screen recording of a deepseek harness using vllm 0271 with all patches and settings done from the repo compose, running as a standalone server. video and config is in this comment . what i think is: if i had made smt wrong it wouldn't pass the agentic bench. and if its not degrading, i wouldn't see the slow typing as in the video. this is a daily usage with file reads, tool uses, web searches etc. if these mean anything i would happily make further tests you point out. Thank youuu ❤️🤲 |
|
Thank you for this — the screen recording plus a full config plus a bench table is the most useful What #1096 retracted, preciselyWe retracted the cliff — the claim that there is a context threshold past which decode What we did not retract, and what is still true:
So "there is no decode degradation at long context" is not what we corrected to. The corrected claim Your bench table actually agrees with our corrected numbersLook at your own two sessions — decode goes 250 → 92 tok/s between 1.2K and 35.3K, smoothly, with
Flat across the ramp, cross-checked against vLLM's own Why your harness experience is also not contradicting usBecause it is four times deeper than anything either of us has measured. Your video is at ~70%
So: 10 tok/s at ~140K is in unmeasured territory. It is not predicted by our data and it is not Three things in your config that I would check first, in orderYour setup is essentially our 1. This is cheap to confirm — it is a counter, not a guess: curl -s localhost:8020/metrics | grep -E 'vllm:num_preemptions|vllm:kv_cache_usage_perc|vllm:num_requests_(running|waiting)'If 2. SPEC_N=0 <your launch script>then repeat the same harness session. If 10 tok/s becomes 25–30, the drafter is the cost and 3. The measurement that would settle itPerceived typing speed in a harness mixes prefill, reasoning, tool round-trips and decode. One clean # at your real working depth, single stream, nothing else running
bash scripts/bench.sh # or just: one long-prompt request, time the decode phase only
docker logs <container> 2>&1 | grep -oE 'gen throughput: [0-9.]+' | tail -20The engine's own If you can give me Your upgrade questionNo, don't chase upstream for this. Your config already notes it: DFlash2 is native in vLLM Your instinct that "it wouldn't pass the agentic bench if I'd done something wrong" is sound, and the |
|
Selam, thank you for detailed explanations again brother. and again sorry to have posted this video evidence thing on #1052, wrong concept. spec=7 was what i thought you had in the composes already (my bad then ), and numseq 3 i tried to make a cap but didnt use more than 1 seq on that 140k daily test(didn't think it would harm decode though) and -gpu-memory-utilization 0.95 was, I think, the idea of codex when i raised numseq 3, i wasn't really aware of the consequences. i will definitely make the tests you ask for, as far as i got (i mean codex will make them though:)) just i need some time from you , i am away from home. near Iranian border here, that far:) Thank you for the deep explanations as usual, they help me get the idea and learn a lot. May God bless you 🤲 |
|
No rush at all — whenever you're back, and only if you still feel like it. And your config wasn't wrong. When you do get to it, the two numbers that settle it: # at your real working depth, single stream, nothing else running
docker logs <container> 2>&1 | grep -oE 'gen throughput: [0-9.]+' | tail -20
curl -s localhost:8020/metrics | grep -E 'vllm:num_preemptions'once with Safe travels. 🙏 |
The header block asserting an "accumulated-ctx decode cliff" was retracted on 2026-09-08 — but only in
learnings/. It survived verbatim in all 20 qwen3.8-27b vLLM composes, which is where operators actually read it.There was never a cliff
bench-agenticset TTFT on the firstcontentdelta. Every model in that matrix is a thinking model, so the server streamsreasoning_contentdeltas first — the entire reasoning phase was charged to prefill, the decode window collapsed below the harness's own 5%-of-wall "degenerate" threshold, and it printedsingle-block emission … wall 2.0 tok/s. Fixed in #1218.Measured live at ~21K ctx while the old harness was calling it collapsed:
That rule flags whatever has slow prefill relative to decode, which also explains the "hardware severity split" the block reported: Blackwell prefills fast → large ratio → "clean"; Ampere + CPU offload → prefill-dominated wall → "collapsed". A denominator effect, not a hardware property.
Corrected re-test
Both arms, same v0.27.1 pin, cross-checked against vLLM's own histograms (
vllm:request_generation_tokens_sum/vllm:request_decode_time_seconds_sum— recorded in-engine, immune to parser cost or SSE coalescing):qwen38-27b-dual-max(MTP n=3)qwen38-27b-dual-supermax(DFlash2 n=7)Decode flat across 1.2K → 35.3K on both arms, zero degenerate turns, zero preemptions, two instruments agreeing within 1–2%.
Why this is more than tidying
The block told operators:
That is advice to throw away the drafter to dodge a problem that does not exist — on the tier whose entire purpose is the drafter.
What survives is kept, not deleted
vllm#35387 is a real spec tax that scales with drafter depth, not context (29K: no-spec 57.0 → n=1 40.6 / n=2 36.0 / n=3 32.7 tok/s), profiled to the cudagraph downgrade
FULL_AND_PIECEWISE → PIECEWISE. The replacement text carries it, framed as a steady tax rather than a cliff.Full guard suite green: 150 pass / 0 fail.
🤖 Generated with Claude Code