Repository navigation
cuda experts: a bf16 format for a checkpoint's own bf16 experts - #1630
Conversation
7169a11 to
edcf86a
Compare
|
Rebased onto d377fcc. The conflicts were the contract registrations shared with main's new sets (MOSS-Image's CUDA set, the EXL3 load-ahead controls): both sides kept, the bf16 experts' records, limits entry and family set added beside main's. Checked: fmt, lean (0 new) and |
edcf86a to
5656b1f
Compare
|
Thanks @BobClawblaw. Since your last rebase, main's |
5656b1f to
8fd6c58
Compare
|
Rebased onto 372af1e; the head is now 8fd6c58. Commit 1 applied as is. In Full CUDA contract on a GB10 (sm_121, nvcc 13.2), on the same patch one rebase earlier (58778890f on 62b0a3f; Checked on the pushed head: fmt, lean (0 new) and |
|
Thanks @BobClawblaw, that's the rebase we asked for: |
8fd6c58 to
503bf33
Compare
|
One more change, from a full contract on an RTX 5090 (sm_120, nvcc 13.3): the decode forms On the 5090, the full CUDA contract (same patch, one main earlier: 915a9fe99 on 62b0a3f):
On this head, the five-SM fatbins ( Checked on this head: |
|
@BobClawblaw, this conflicts with main in |
503bf33 to
859efdd
Compare
|
Rebased onto main 933b969 (now 859efdd). The bf16 experts set sits beside the Flash Next and EXL3 sets in |
|
Thanks @BobClawblaw for the quick rebase. We re-reviewed the stack independently. For #1630, nothing is owed by you: the rebase touched only registration lists, and every existing expert format's arm (affine-4, affine-3, FP8G, NVFP4, EXL3, IQ2_XXS) is byte-identical. The BF16 repack copies the checkpoint's own bits into MMA fragment order, one m16n8k16 MMA per 16 inputs in order, then the shared epilogue, with a float64 contract on Transcribe's shapes and two planted controls. One small point: |
|
Added the check (8cdb307): |
|
Thanks @BobClawblaw: the push restacks only (the diff is byte-identical to what we reviewed), and nothing is owed from you. The stack lands in order (#1630, #1631, #1632) after our GB10 run, which needs Transcribe's BF16 release on a box first. |
8cdb307 to
0e0de00
Compare
|
Thanks @BobClawblaw. The rebase touched only the record lists, and |
0e0de00 to
f7b26fa
Compare
|
Thanks @BobClawblaw. The 10 Nov rebase leaves what we reviewed as it was:
|
f7b26fa to
00a1e96
Compare
|
Rebased onto main f6d311c and pushed on its own: head 00a1e96. The only change from f7b26fa is the contract image list in Checks from this head:
|
|
Thanks @BobClawblaw, landing #1630 on its own makes sense, and your sm_120 checks cover it well. We've queued
|
|
@BobClawblaw our GB10 run of One thing stops it landing: CI's No GPU job fails That check wants non-coherent loads to go through the shared load helpers in our common CUDA headers rather than a kernel's own inline asm, so they can be audited in one place. Could you switch line 14 to the common helper (the other expert kernels show which one), and rerun
|
|
Thanks @ashhart. Line 14 is in, on head
|
00a1e96 to
eb3f7e6
Compare
|
Thanks @BobClawblaw. With line 14 in,
|
eb3f7e6 to
d29c52c
Compare
|
CI steps on this head (
|
|
Full kernel contract after the rebase, on the GB10, on #1632's head
The same line as before the rebase. None of the limit problems is in this stack's launches, and none of its FAIL lines names a kernel from this stack apart from the planted controls. The descriptions now quote this run. |
|
Thanks @BobClawblaw. The rebase onto
With your GB10 run of
|
d29c52c to
50f8f74
Compare
ashhart#1630 adds the bf16 experts format to Grouped (experts.zig) and registers the experts_bf16 image (kernels.zig); no existing kernel source changed. Both rows are recomputed on main after ashhart#3011, which re-pinned experts.zig for ashhart#2843.
…nt blocks (relu^2 up, fp32 or bf16 down)
…and bf16 down, gates 1-5 with two controls
…, as pack does, with a test
ashhart#1630 adds the bf16 experts format to Grouped (experts.zig) and registers the experts_bf16 image (kernels.zig); no existing kernel source changed. Both rows are recomputed on main after ashhart#3011, which re-pinned experts.zig for ashhart#2843.
50f8f74 to
5f52018
Compare
|
Thank you @BobClawblaw. This is merged into main with your commits under your own name, so you're listed as a TensorFold contributor. It ships in the next release, credited to you in the changelog and the release notes. |
Figures and scope corrected to the PRs (#2948, #2863, #2934, #2933, #2921, #2906, #2878, #2892, #2851, #2728, #3072, #2915, #2864, #2854 and others), promises of later work removed (#2903, #2875, #1630, #1720), #3074 and #3047/#3046 said as their PRs scope them, the duplicate #2861, #2585, #2321 and #2719 entries and two copies of released 1.2.5 lines removed, #1953's line named for its PR, and a line for #3255. Released sections unchanged.
|
Thanks @BobClawblaw! This is in TensorFold 1.2.8, out now: https://github.com/ashhart/TensorFold/releases/tag/v1.2.8
|
What this changes
A bf16 format for the grouped experts (
experts_bf16.cu): a checkpoint's own bf16 weights in mma-fragment blocks,relu^2 up and fp32 or bf16 down, in the decode form (items of 16 pairs) and the prompt form (items of 64). A row's sums
chain one mma per 16 inputs in input order, so its bits never depend on the rows beside it, its tile or its form. Used
by Nemotron 3.5 Transcribe, which ships its experts in bf16. Nothing else selects it. Head
d29c52ccdon main6c5cef894.Receipt
tf-cuda-test bf16-experts: the repack from both source layouts, up and both downs against float64, every row'sbits the same at any row count and in both forms.
SUMMARY bf16 experts: 6 kernels, 6 pass gates 1-4, 0 fail, 0 known findings; 2 controls: 2 red as planted, 0 missed6f2f64e59(which carries these three commits unchanged):SUMMARY 658 kernels: 658 pass gates 1-4, 0 fail, 8 known findings; 424 controls: 424 red as planted, 0 missed; 488 limit problems. None of the limit problems is in this PR's launches.experts.ziggains thebf16format arm; other formats' dispatch is unchanged. The bf16 refusal testsits in main's
experts_host_test.zig.6c5cef894(2026-11-12). CUDA EXL3 grouped experts: decode launches and sizes storage at the 64-row prompt tile #2823 gaveGrouped.decodeandpromptpairsandtilearguments and movedtheir refusal test to
experts_host_test.zig, so the bf16 tests now pass both, this PR's copy of that test(
experts_refuse_test.zig) is gone, and its bf16 refusal test sits beside main's. No kernel changed. On the GB10, onNemotron 3.5 Transcribe: audio input, the 65,536-token window, an hour of audio, MTP drafts #1632's head, which carries these three commits unchanged:
test-cuda-hostpasses,tf-cuda-test bf16-expertspasses, and the bf16 experts contract gives the SUMMARY line above.
Overlap
A merge check against the open PRs that
atc overlapnames for this stack (2026-11-12) gives these files; all areshared registration lists or the contract doc, and whichever lands second rebases.
tests/cuda/contract_limits.zig.kernels/cuda/contract_controls_set.cu,tests/cuda/contract_limits.zig.kernels/cuda/contract_controls_set.cu.core/contract/registry_joins.zig,tests/cuda/contract_limits.zig.docs/kernel-contract.md.tests/cuda/contract_limits.zig,tests/cuda/main.ziganddocs/kernel-contract.md.