Repository navigation
Conversation
|
While qualifying the #1136 BF16 prompt-scoring contribution on top of this head (b0b5beb), the full CUDA contract exited 139 immediately after I found a callback-lifetime problem in The fix and regression are in my local dependent contribution; the full GPU rerun is pending, so I am not yet calling this a complete crash-resolution receipt. No serving dispatcher, kernel, bound or precision changes are involved. I will retain the failed run and publish the final source-bound SUMMARY with the replacement contribution. |
|
Device status. Dory and Qwen3.8-27B NVFP4 on a GB10 are GREEN, with tokens exact. The CUDA kernel contract on the earlier head ( |
|
The CUDA kernel contract on |
|
Thanks — good to see the contract clean on |
|
Pushed 30e9b87, which fills the four launches that had no records ("recorded 0, 0") on the GB10 contract run. Two are new in this PR and two are older launches that this PR's collector and registry changes now expose. Their records for all five release SMs come from the nvcc 13.0.88 receipts. Records for later compilers stay pending rather than guessed, and kernel bytes and launch geometry are unchanged. A host regression fails without the records and passes with them. All 112 host contract tests pass, and lean adds no new problems. The CUDA kernel contract is queued again on a GB10 on this head to confirm the limits count now matches main's. |
|
The GB10 kernel-contract rerun on
The limits count now matches main's, and no limit line is new. The only new FAIL lines in the device contract are the five new controls going red as planted, plus the launch total. That was the last open item, so this goes in the landing queue. |
44238a9 to
ca36cc6
Compare
ca36cc6 to
0bf278f
Compare
|
/atc exchange a4f391aba2ddcdda486be69e619c9ecbb133ffda48c15fa8df36665cbd7e5d9f |
|
Held from landing for now. On a GB10, Qwen3.8-27B MLX 4-bit, main against this head (runs ordered base, new, new, base): tokens are equal (0 of 20 prompt rows differ) and decode is level (1 and 4 streams within 0.1%), but prompts are a little slower almost everywhere:
At 32K and 64K both new runs sit below both base runs. Nemotron's cells are mixed (±0.7%) with tokens equal. This PR's MLX-path changes are the two exact Qwen prompt kernels, so they're the first place to look. A Qwen prompt-speed PR should leave the 27B MLX path level, and we'll rerun once that's understood. |
0bf278f to
6743ec9
Compare
|
Rebased onto main Next on our side: GB10 cells (27B MLX, expected level, and Nemotron for the tile) and the kernel contract for the new images. #2020 can rebase onto this once it lands.
|
6743ec9 to
c4920d4
Compare
|
Device check on GB10, main against c4920d4, on Dory with CELLS pp, sweep and chat:
An earlier RED on this run came from older files left in the same output folder. It wasn't this change. The kernel contract failed only on 12 launch-limit records: the router and GDN chain kernels were recorded for sm_121 alone, so sm_80, 86, 89 and 120 held zero. a5aea9a records nvcc 13.0's register counts for all five chips, taken from the contract's own record lines.
|
|
Kernel contract re-run on a5aea9a: launch-limit problems are 168, the same as main's, with no new-only limit failures. The one contract line that differs from main is the totals line, because this PR registers five more launches (1568 against 1563). Device A/B and contract are both level, so this is queued to land.
|
a5aea9a to
e50a16e
Compare
Reuse #1764's existing kernel, resource records and required symbol bindings for the Qwen dense/MoE and Nemotron ModelOpt port. Keep one six-entry numerical/replacement/control set. Cache the serving choice: TF_CUDA_PROMPT_BF16=0 restores the lane but leaves required symbols bound. The threshold is fixed at 1024 rows. Host ABI and fixture-lifetime checks pass; fresh CUDA contract and checkpoint A/B receipts remain required on this rebased tree. Refs #1762, #1764. Co-authored-by: Armin <2369138+Arminova@users.noreply.github.com>
Dory packs its unquantized projections in the shared BF16 lane layout and runs prompt chunks through Linear. Opt it into #1764's existing tile at the fixed 1024-row threshold; TF_CUDA_PROMPT_BF16=0 restores the lane. The required symbols stay bound and decode stays on its existing path. Exercise the actual family projection at the CUDA ABI without a device. Fresh greedy and seeded token equality and a 2K prompt timing on a GB10 remain required. Refs #1762, #1764.
Adapt #1764's staged chain-warp gated norm to Qwen dense and MoE. Retain the old recurrence and post kernels and each BF16 boundary; TF_CUDA_GDN_CHAIN_NORM=0 restores their separate launches. Register byte replacements for rows, state, sums and chunk seams with source controls. Host ABI checks pass; device and compiler gates are pending. Refs #1762, #1764. Co-authored-by: Armin <2369138+Arminova@users.noreply.github.com>
Adapt #1764's expert-first grid to Qwen MoE's 16-row router. Retain each original FP32 FMA chain and the row-first kernel; TF_CUDA_MOE_EXPERT_FIRST=0 restores its symbol and launch grid. Add FP64 and byte-replacement contracts, padded/live-row cases and a source row-coupling control. Complete shared contract image routing, keep callback tables static, and compile GDN controls with the production chain so their compiler flags match. Device qualification is pending. Refs #1762, #1764. Co-authored-by: Armin <2369138+Arminova@users.noreply.github.com>
(cherry picked from commit d8f5efb)
Fill the four five-SM launch receipts from nvcc 13.0.88. Keep later compiler records pending and test the real registry lookups and limits.
…y the glue receipts
Keep the MLX image recipes, kernel sources and launch ABI equal to main. Retain the BF16 tile ports and keep new image resource records pending measurement.
The GB10 (sm_121) kernel contract on the PR head measured the three launches in the new qwen_gdn_bf16 and qwen_router_bf16 images: chain_kernel 193 registers and 37120 static shared bytes at 128 threads, tf_gdn_chain_norm 183 and 24704 at 256, and tf_moe_router_expert_first 63 and 16512 at 256. Record them on sm_121 only, as nvcc 13.0's receipt. sm_80, sm_86, sm_89 and sm_120 stay pending until a device run measures them, and later compilers stay pending as before.
…ile's Qwen kernels tf_moe_router_expert_first, tf_gdn_chain_norm and the qwen_gdn_bf16 chain_kernel held a GB10 receipt only, so sm_80, sm_86, sm_89 and sm_120 had no compiled usage and kernel-contract-limits counted 12 stale records. The five-SM limits audit of c4920d4's fatbins (nvcc 13.0, -Dsm=80,86,89,120,121) gives every SM; its RECORD lines are now the records, and the glue receipts test pins all five. The GB10-only helper has no users left and goes.
… main kernels.zig, nvfp4.zig, qlinear.zig and root.zig changed on main since this branch was rebased, and the merge with main matched neither pin.
e50a16e to
1d7e39e
Compare
Part of #1762: #1764's prompt-pass wins, ported to the other CUDA engines. #1764 (@Arminova) is on main; this reuses its tile rather than adding another.
prompt16.cuand its records are untouched,tf_prompt_bf16/_f32are defined once with one record each, andmatmulBf16is unchanged. What's added is a switch (TF_CUDA_PROMPT_BF16, read once) and a fixed 1,024-row gate, opted into by Qwen ModelOpt, Nemotron and Dory.enableBf16()plusbf16_prompt = true, with a host ABI test (1,023 rows stay on the lane; 1,024 and 2,048 go to the tile; switch off and decode stay on the lane).Exactness: on a GB10, the kernel contract for the GDN norm and router passed. Its only new FAIL lines are its four planted controls, and the limits are unchanged. Two independent reviews cover the code.
Device runs before landing (GB10):
TF_CUDA_PROMPT_BF16=0;Co-credit to @Arminova for #1764's tile and fusion.