Repository navigation
EXL3 Flash Next: CUDA graphs and the device planner (7/8) - #1445
Open
BlivionIaG wants to merge 260 commits into
Open
BlivionIaG wants to merge 260 commits into
BlivionIaG wants to merge 260 commits into
Conversation
BlivionIaG
force-pushed
the
pr/exl3-s5-graphs
branch
3 times, most recently
from
October 27, 2026 10:51
4fa1e74 to
a799ca6
Compare
5 of 8 tasks
Owner
|
CUDA graphs for Flash Next are welcome. Acceptance staying in the core lane engine, with the device code only proposing
This PR depends on #1441 to #1444, so it inherits their blockers. |
BlivionIaG
force-pushed
the
pr/exl3-s5-graphs
branch
4 times, most recently
from
October 27, 2026 17:56
f13fa73 to
556eb09
Compare
BlivionIaG
force-pushed
the
pr/exl3-s5-graphs
branch
19 times, most recently
from
October 29, 2026 19:22
3a3714f to
5ca7783
Compare
# Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md # zig/src/families/flashnext/cuda_lanes_load.zig # zig/tests/fixtures/gradient-serving.tsv
# Conflicts: # zig/tests/fixtures/gradient-serving.tsv
…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
This branch has not been deployed
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.
Current head:
fb4158a917. 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 is running on this head.What this changes
EXL3 decode graphs over shared attention, plus the device planner.
UNIFORM_LINES=0means off. The new modes are opt-in (TF_FLASHNEXT_EXL3_GRAPH=eager|1); the default is the host planner.4398903c9a; over it this PR adds 8 non-merge commits (graph policy and settings registration and tests, graph retry owners and planner modes, a staged MTP tail readback test, per-engine option propagation,UNIFORM_LINES=0as off). New kernel source:flashnext_exl3_dplan.cu, plus a change toexl3_experts.cu.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
9ed74b507c. The device results below ran on01dcbf4a8757; this head differs from it by the merges of main at0591c4e85d,c34ff562ca,a3aecd8d0fand484437b6acandf8dacd777f, and the pin fixturegradient-serving.tsv. The device cells were not repeated on this head.python3 tools/pr_check.py --base <main> --pr 1445: 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
01dcbf4a8757Two 16 GB sm_120 GPUs, Linux x86_64, checkpoint above. One run per cell unless stated.
eq-tp1,eq-tp1-lanes1445-hash-tp1, five servers (GRAPH=0,eager,1,1withASYNC=1,1with shared attention)GRAPH=0againsteager/1, one stream (greedy and temperature 1.0, code and chat)GRAPH=0in every mode (one run per leg; the graph legs include their captures; no steady-state alternation was run)1445-eq-tp2(TP=2, both ranks)dplanand between 14% lower and 17% higher withgraphthan the host planner (one run; not a benchmark)1445-attn-lanes-kernelcontrol RED as plantedas the whole line and the log printscontrol RED as planted (crossed lane table); the log has 8 passing lane shapes (1 to 32 lanes) and no FAIL line; the gate is unchangedkernel-contract exl3 flashnext(filtered)tf_exl3_prompt_*(exl3_prompt_pending.zig), which this PR does not touchNot run or open
eq-tp2unit test above).Receipt
turboderp/Qwen3.8-Flash-Next-exl3at69e33439ae950f17bcbe95c98f117d80f759ab6d.flashnext_exl3_dplan.cu(new),exl3_experts.cu. The filtered contract above covers them.Review requests implemented in source
UNIFORM_LINES=0is off, with docs, changelog and test.Checklist
"draft": false, a resumed prompt equals a fresh one, and concurrent equals solo. Concurrent token equality across the five modes passes; drafted equals"draft": falseand resumed equals fresh were not run for this PR on its own.--drafter, no slower than without it. The default is unchanged. The opt-in modes are slower at one stream on this setup (cells above).