Conversation
…costs more than the model
…-decode prefill regression
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
docs/39left MTP as re-runnable once the decode gap closes, anddocs/57closed it on one arm. So it was re-run — same server, flags, mounts and checkpoint asdocs/57, with only--speculative-configdiffering.docs/59, harness inbenchmarks/matrix/mtp_serve.sh+mtp_ab.sh.The precondition was met and the conclusion still inverted.
Baseline reproduces
docs/57(pp2048 @ d32768: 1058.87 here vs 1055.51 there) and every arm loggedSelected AiterInt8ScaledMMLinearKernel, so no arm quietly fell back to Triton.This is not an acceptance failure — 88.6% at position 0 (1084/1224), inside the 84.8–89.1% band
docs/25measured on the 80B.Fitting step cost as
a + bNat d0 over N=1,2,3:a = 1.11— verification is nearly free at M=2..4, exactly asdocs/57's M=1 30.60us vs M=8 33.64us shape predicted. That part of the bandwidth-roofline argument was right.b = 1.16— one MTP draft forward costs more than all 64 layers of the target. Sinceb > 1, break-even is impossible at any acceptance rate, not merely unprofitable.Mechanism, from the checkpoint's safetensors header:
lm_head)102 GB/s is round 62's "113 GB/s of 1170, latency-bound, not enough work in flight" reproduced on an independent workload — a one-layer forward cannot fill a 104-CU card, while the 64-layer target amortizes the same fixed cost sixty-four times. Improving the target made speculation worse, not better, and will continue to.
lm_headis 2.54 GB of the draft's 3.29 (it is in the checkpoint's quantignorelist, and vLLM shares it with the drafter) — the one lever that movesbmaterially, though bytes are only 12% of the problem.Second, separate finding, left open: prefill regresses 23-25%, flat across N, from a decode-side flag. A startup-only A/B rules out KV capacity (-5.8%), graph mode and prefill graph count (identical, 48 PIECEWISE both arms), and the GDN prefill kernel (identical). Suspect is scheduling —
gdn_attn.py:112 _init_reorder_batch_threshold(1, use_spec_decode)on a 48-of-64-GDN-layer model, and/or draft slot reservation shrinking the effective prefill chunk. Not chased here becauseb > 1closes the line without it, but it is a defect rather than a tradeoff.Two ledger entries added (the MTP close, and the prefill regression as
open-defect). No production change.