Repository navigation
EXL3 Flash Next: draft lane guard for offloaded experts (8/8) - #1446
BlivionIaG wants to merge 301 commits into
Conversation
33c275f to
528c13a
Compare
|
Thank you; these are the most complete receipts in the stack, and drafted equal to plain on 24 prompts, along with
Please put the new rule behind its own field in the lanes config, set only by the EXL3 backend, and leave Two smaller points:
|
9ed3d01 to
421fc2f
Compare
81b93a0 to
8c8c5aa
Compare
7e97681 to
8a68caf
Compare
65f4e71 to
a4dd9f9
Compare
…ot-nov12 # Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
…ot-nov12 # Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
…ot-nov12 # Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
…ot-nov12 # Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
|
Thanks for the restack and the guard test. The rebase is done the way we asked. The flushStash loop now sits in the file level draftMany, the recorded output host consumer moves to the same boundary, and the guard stays in its own rate_guard field that only the EXL3 backend sets when experts are offloaded. plain_wait_most is still 128 for everyone, and a host test pins the real wiring. That part is in good shape. One thing is still open before this can land. The device tables you posted were not repeated on the current head, and you note that later merges of main and a paging fix landed after those checks. We need the numbers on this exact head:
We also want the two streams prose figure settled. The last numbers had greedy chat at 0.65 at two streams and 0.74 at four against a server with drafts off, below the 0.95 gate. Your reading that this is the cost of loading the drafter is plausible but not measured, so either the numbers on this head clear it or we should talk about how to treat it. We understand the golden near tie and the skipped snapshot cell as you describe. We will run the device check on our side. As before, this lands last in the stack, after the earlier parts are in.
|
Current head:
3382c5d3d3. Main90b4fae62d,bafe3e07cb,948e748584,d001c28f29and release09a9eb3317and the #1444 TP=2 paging fix were added after the checks and device measurements below; those device measurements were not repeated on this head. CI completed without reported failures on this head.What this changes
Guard drafting for offloaded EXL3 through the family facts: the EXL3-only plain-versus-draft rate guard is preserved,
flushStashruns inside the file-leveldraftMany, and the real direct consumer is migrated. No kernel files change.fb4158a917; over it this PR adds 4 commits (rate-guard preservation, guard eligibility test, flush at thedraftManyentry, and an upstream lane-engine cleanup).6c5cef8941, merged throughf8dacd777f.atc overlap --jsonagainst four known peers (Flash Next TP=2 on CUDA: head and rollback graphs replay, and one-row split lanes skip the interleave copies #2837, flashnext cuda: the opt-in --tp 2 decode graph (TF_FLASHNEXT_DECODE_GRAPH=1) serves again instead of failing its first plain round #2980, flashnext cuda: the opt-in --tp 2 decode graph takes the dense split and keeps its graph across drafted verifies #2982, flashnext: the MTP head's streams by row through the lease's pages, no per-lane block outside the pool (#2444 P3, F2 part c) #2992) only, run on the integrated stack before the latest merges of main; not a global clearance. Conflicting files: Flash Next TP=2 on CUDA: head and rollback graphs replay, and one-row split lanes skip the interleave copies #2837 2, flashnext cuda: the opt-in --tp 2 decode graph (TF_FLASHNEXT_DECODE_GRAPH=1) serves again instead of failing its first plain round #2980 6, flashnext cuda: the opt-in --tp 2 decode graph takes the dense split and keeps its graph across drafted verifies #2982 8, flashnext: the MTP head's streams by row through the lease's pages, no per-lane block outside the pool (#2444 P3, F2 part c) #2992 6. Owner composition agreements exist for flashnext cuda: the opt-in --tp 2 decode graph (TF_FLASHNEXT_DECODE_GRAPH=1) serves again instead of failing its first plain round #2980, flashnext cuda: the opt-in --tp 2 decode graph takes the dense split and keeps its graph across drafted verifies #2982, flashnext: the MTP head's streams by row through the lease's pages, no per-lane block outside the pool (#2444 P3, F2 part c) #2992; my notice on Flash Next TP=2 on CUDA: head and rollback graphs replay, and one-row split lanes skip the interleave copies #2837 is unanswered.Checks before the release merge
3aad2679a8. The device results below ran oncf9deffc1bc1; this head differs from it by the merges of main at0591c4e85d,c34ff562ca,a3aecd8d0fand484437b6acandf8dacd777f(inherited through EXL3 Flash Next: CUDA graphs and the device planner (7/8) #1445), the pin fixturegradient-serving.tsv, one comment shortened incuda_batch_moe.zig, and the deadfillimport dropped fromcore/lanes/engine.zig(main's file is exactly 600 lines and this PR adds one). The device cells were not repeated on this head.python3 tools/pr_check.py --base <main> --pr 1446: exit 0, 0 errors, 0 warnings; lean 339 vs 341 on main, 0 new.zig fmt --check zig: clean.test-cuda-host,test-exl3-cuda-host,test-flashnext-exl3-host,test-exl3-prompt-host,compile-flashnext-host,test-flashnext-memory-host,test-qwen-serving-host,test-lane-api-hostandtest-lanes-seepass on Darwin arm64 on the EXL3 Flash Next: draft lane guard for offloaded experts (8/8) #1446 head, which contains this head; the Linux host suite is CI's.-Dtarget=x86_64-linux-gnu): exit 0 on the EXL3 Flash Next: draft lane guard for offloaded experts (8/8) #1446 head, which contains this head (build only, no GPU executed on this head).Device results on
cf9deffc1bc1Two 16 GB sm_120 GPUs, Linux x86_64, checkpoint above. One run per cell unless stated.
draft: false, golden promptsdraftsflag--no-draftsserverserve-gate-golden-tp1ids16: it differs from the golden's greedy ids identically drafted and undrafted (the same ids as #1442's serve gate; a documented near-tie position)--no-draftsserver, aggregate tok/s, one drafted arm against the mean of two plain arms, TP=11446-full-ab-tp11446-fast-tp2(TP=2)serve-gate-golden-tp2,ids16, the same near-tie ids as at TP=1; drafted equals undrafted on every golden prompt; same-server speeddraft: falseagainst drafted 29.3 vs 43.5 and 31.7 vs 38.1 tok/s (no--no-draftsserver was run at TP=2, so no TP=2 ratio against one)Not run or open
ids16golden; the gate is unchanged.--no-draftsserver at TP=2, so no TP=2 ratio against one.draft: false-on-a-drafting-server baseline hides that cost.Receipt
turboderp/Qwen3.8-Flash-Next-exl3at69e33439ae950f17bcbe95c98f117d80f759ab6d.Review requests implemented in source
flushStashinside the file-leveldraftMany, with the same semantics as before.Checklist
"draft": false, a resumed prompt equals a fresh one, and concurrent equals solo. Drafted equals"draft": falseat TP=1 and TP=2 and concurrent equals solo at TP=1 pass; resumed equals fresh (the snapshot cell) is not run, see above.--no-drafts.--drafter, no slower than without it. Not met on this card: greedy chat at two and four streams runs at 0.65 and 0.74 of the no-drafter server (above).