Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f264ece
cuda: the paged shared-window attention at head dim 64
jschmied Oct 27, 2026
ac8f6e2
lfm2_moe: CUDA glue kernels under the contract
jschmied Oct 27, 2026
692cf20
lfm2_moe: serve LFM2.5-24B-A2B on CUDA
jschmied Oct 27, 2026
173e069
cuda: Liquid's short conv and its commit in liquid_conv.cuh, by tap c…
jschmied Oct 27, 2026
064089d
kernel contract: the limits check reads lfm2_moe's fatbin
jschmied Oct 27, 2026
1b48934
kernel contract: the head-64 paged attention, decode and prompt rows,…
jschmied Oct 28, 2026
68b48aa
tools: LFM2.5-24B-A2B's float64 reference on the CPU, and its receipt…
jschmied Oct 28, 2026
0a9de29
docs: LFM2.5-24B-A2B on CUDA, its receipt and the weights' licence
jschmied Oct 28, 2026
b4f4f49
lfm2_moe: the attention caches in pages of the core pool, every strea…
jschmied Oct 27, 2026
abae447
lfm2_moe: the prompt cache on CUDA, a kept state the conv states and …
jschmied Oct 27, 2026
928034a
lfm2_moe: keep a mark's state as the prompt pass goes by, so a keep a…
jschmied Oct 28, 2026
10f3274
docs: LFM2.5 on CUDA leases pool pages and keeps chat states in the p…
jschmied Oct 28, 2026
c17be81
feat(lfm3): add strict MLX checkpoint admission checks
BlivionIaG Oct 27, 2026
7be5515
build(lfm3): isolate admission in the standard build graph
BlivionIaG Oct 28, 2026
d0dbb68
cuda: the paged prompt attention at head dim 128, four query heads a …
jschmied Oct 27, 2026
18a6183
lfm3: admit the ModelOpt NVFP4 text export beside the MLX layouts
jschmied Oct 27, 2026
a8faad1
cuda: the 7-tap liquid conv and commit for LFM3, under the kernel con…
jschmied Oct 27, 2026
3d3759f
lfm3: serve the ModelOpt NVFP4 text export on CUDA, weight-only
jschmied Oct 27, 2026
0a9f78e
liquid: one lane backend, kept-state walk and native glue for LFM2.5 …
jschmied Oct 28, 2026
1709436
kernel contract: pattn_kernel<128, 8, 4, 8> over pages against float6…
jschmied Oct 28, 2026
c311238
lfm3: Metal refuses the ModelOpt NVFP4 export by name
jschmied Oct 28, 2026
d6efbac
lfm3: say at load that NVFP4 on CUDA is weight-only
jschmied Oct 28, 2026
6bb371c
tools: LFM3's float64 reference on the CPU, and its receipt of every …
jschmied Oct 28, 2026
fad7e14
docs: LFM3-1.7B NVFP4 on CUDA, weight-only, its receipt and the weigh…
jschmied Oct 28, 2026
b60ae9e
receipts: SASS identity of nemotron_attention and prefill_attention a…
jschmied Oct 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ Conversions are explicitly marked: their upstream weights need the linked conver
| GLM-5.3-Flash, FP4-Local | `tensorfold pull nvidia/GLM-5.3-Flash-FP4-Local@76348ddb2be2e35e39ecfc00e75dc07703f4f3d5` | Two GB10s at TP=2, or three at TP=3 over a ring of direct links: @Bizuayeu loaded it as stored and served it at both sizes. 165.3 GiB of weights, 13% less than NVFP4's 190.4 GiB. | [Native CUDA](docs/recipes/glm-5.3-flash-cuda.md), in 1.1.5 (#1050). NVIDIA's mixed-precision checkpoint: NVFP4 routed experts with compressed block scales, MXFP8 and 128×128-block FP8 for most of the rest. As close to BF16 as NVFP4 at its smaller size: at TP=2 its NLL is 1.11% above BF16's against NVFP4's 1.37% ([contributed receipt](docs/receipts/glm-fp4local-80517fc3/README.md) on #1050's head, not rerun on main), a difference the per-document intervals in [XSFP4's card](https://huggingface.co/Bizuayeu/GLM-5.3-Flash-XSFP4#measured) do not resolve. |
| GLM-5.3-Flash, XSFP4 | `tensorfold pull Bizuayeu/GLM-5.3-Flash-XSFP4@88736f916f8939607fde8a4b881dcae749f7551d` | Two GB10s at TP=2, or three at TP=3 over a ring of direct links: on main `8086c205c` @Bizuayeu loaded it in 370.7 s at TP=2 (rank 0's model 96.97 GiB at a 524,288-token window) and in 313.8 s at TP=3 (63.60 GiB at 1,048,576), and both served. 165.7 GiB of weights, 0.4 GiB more than FP4-Local's. | [Native CUDA](docs/recipes/glm-5.3-flash-cuda.md), in 1.1.5 through FP4-Local's path. FP4-Local with its routed experts' NVFP4 blocks fitted again from the BF16 weights, a smoothing folded into them, so it runs on the same kernels. Closer to BF16 than FP4-Local and NVFP4 at TP=2 by all three measures in [its card](https://huggingface.co/Bizuayeu/GLM-5.3-Flash-XSFP4#measured), on #1050's code: top-1 agreement 93.26%, NLL 0.85% above and a KL bound of 0.0431, against FP4-Local's 92.82%, 1.11% and 0.0510. |
| GLM-5.3, EXLR8 `home` | `tensorfold pull kindlingai/glm-5.3-exlr8-k2-k3-k4@f459f5d0272a529403dd9b3fd32f771f4250a0d4 --exlr8 home --node 0/2 --dir ~/models/glm-5.3-exlr8-home` | Two M5 Ultra Macs, 256 GB each; about 160 GB resident per Mac at 8k context / four streams. | [Two-Mac recipe](docs/glm-5.3-exlr8.md). Use `--node 1/2` on the other Mac; Thunderbolt 5 and MCDMA required. No CUDA backend. |
| LFM2.5-24B-A2B, MLX 4 / 6 / 8-bit | `tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-4bit@667408d494bde191c2cb9dd4f4549827816b9275`<br>`tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-6bit@1deec53eb49571e21cdcbf82fd5839248f07ed88`<br>`tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-8bit@67ab417dd02d0c9545802a726df668620eae049d` | One Mac; M4 Pro checked. | [Native recipe](docs/recipes/lfm2.5-24b-a2b.md), [release history](CHANGELOG.md). |
| LFM2.5-24B-A2B, MLX 4 / 6 / 8-bit | `tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-4bit@667408d494bde191c2cb9dd4f4549827816b9275`<br>`tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-6bit@1deec53eb49571e21cdcbf82fd5839248f07ed88`<br>`tensorfold pull LiquidAI/LFM2.5-24B-A2B-MLX-8bit@67ab417dd02d0c9545802a726df668620eae049d` | One Mac (M4 Pro checked), or one NVIDIA GPU with the 4-bit export (GB10 checked). | [Native recipe](docs/recipes/lfm2.5-24b-a2b.md) ([CUDA](docs/recipes/lfm2.5-24b-a2b.md#cuda)), [release history](CHANGELOG.md). Weights: LFM Open License v1.0. |
| Qwen3.6-35B-A3B, MLX with MTP | `tensorfold pull TensorFold/Qwen3.6-35B-A3B-MLX-4bit-MTP@81169a9bc511a27c1b4eedb77a2cd98ced431847` | One GB10; 20.9 GB checkpoint. | [Qwen3.6](docs/recipes/qwen3.6-moe.md). Native CUDA; the recipe's Metal path belongs to Python. |
| Gemma 4 31B, MLX 4-bit | `tensorfold pull mlx-community/gemma-4-31B-it-4bit@696d436c404745a59f30e4939a658162b0a9e57f`<br>`tensorfold pull z-lab/gemma-4-31B-it-DFlash@eabd648301ce28583cc14757912e5e0f84e152e1` | One M5 Mac; M5 Ultra checked. M1-M4 refused. | [Native 31B](docs/recipes/gemma-4-native.md). Name the drafter with `--drafter`; images with `--vision`. |
| Gemma 4 12B, converted MLX 4-bit | `hf download google/gemma-4-12B-it --revision 707f0a3b8a3c7ad586ed01e27eafbad8a27dd0f7 --local-dir ~/models/gemma-4-12b-hf`<br>`hf download google/gemma-4-12B-it-assistant --revision 46d4c6f13f0ac0ad827b915669b8df9b81c64c51 --local-dir ~/models/gemma-4-12b-assistant` | One M5 Mac; converted text weights 6.3 GB, image weights 100 MB, plus assistant/caches. M1-M4 refused. | [Convert and serve](docs/recipes/gemma-4-12b-native.md). Upstream download needs `hf`; conversion needs Python, mlx and mlx-lm. Serving is native. |
Expand Down
1 change: 1 addition & 0 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ pub fn build(b: *std.Build) void {
@import("zig/build/qwen35_cache_host.zig").compileHost(b, step5_mods.metal, step5_mods.engine, step5_mods.lanes);
}
@import("zig/build/h3_host.zig").tests(b, target, test_step);
@import("zig/build/lfm3_host.zig").steps(b, test_step);
@import("zig/build/digest.zig").steps(b, test_step, draft_ids, build_options);
@import("zig/build/flashnext_budget.zig").steps(b, test_step);
@import("zig/build/flashnext_batch_host.zig").tests(b, test_step);
Expand Down
7 changes: 7 additions & 0 deletions docs/kernel-contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,13 @@ GLM's Metal window projections register narrow and wide rows at 2, 3, 4, 5, 6 an
Independent FP64 linear cases accompany byte replacements against frozen pre-window-optimization kernels.
The gathered SwiGLU keeps its predecessor's clipped BF16 output and nonfinite rules; gate/up taps qualify its dots separately.
Controls dispatch real source mutations that couple rows or select the wrong expert; host tests validate their witnesses.
CUDA also checks LFM2.5-24B-A2B's kernels: the router's fp32 logits (`tf_lfm2m_route`) and its top-4 rule, Liquid's
3-tap short conv with its per-row state snapshots and the state commit (`liquid_conv.cuh`), each against the host's
replay of its fp32 and bf16 steps (three controls: ties to the higher expert, bx unrounded, every stream committing into
the first stream's slot). Their paged attention at head dim 64 runs over shuffled 512-key pages with several streams
a launch: the decode rows' chunks and merge (`tf_paged_attn_chunk_segs_64`, `tf_paged_attn_merge_segs_64`) and the
prompt rows (`pattn_kernel<64, 8, 4, 8>`), head by head within `attention_ref`'s float64 bound (two controls: the
decode reading its values from the neighbouring lane's dims, the prompt from the neighbouring 8 dims).
CUDA also checks the affine-3 experts' split decode pair, bit-equal to the pair kernel it replaces (two controls,
one dropping a last round of K groups short of the warps, one chaining the groups in reverse).
CUDA also checks Flash Next's NVFP4 experts on prompt tiles with the decode form's sums (SwiGLU gate-up and fp32
Expand Down
11 changes: 11 additions & 0 deletions docs/receipts/lfm-cuda-sass-fad7e142/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Liquid CUDA kernels: SASS identity of the refactored images

`tools/zig/cuda_sass_identity.py --repo . -j 3 --receipt sass.tsv 465e48b62 fad7e142c`: main 1.1.9 (`465e48b62`) against this stack's NVFP4 head (#1492, #1503, #1508 at `fad7e142c`), nvcc 13.0 (V13.0.88), sm_80, 86, 89, 120 and 121. `sass.tsv` has every function's SASS sha256 on both sides; `summary.txt` is the tool's output.

| image | functions on main | identical | changed | added |
|---|---|---|---|---|
| nemotron_attention | 35 | 35 | 0 | 10 (`tf_paged_attn_chunk_segs_64`, `tf_paged_attn_merge_segs_64`) |
| prefill_attention | 40 | 40 | 0 | 10 (`pattn_kernel<64, 8, 4, 8>`, `pattn_kernel<128, 8, 4, 8>`) |
| contract_controls | 220 | 220 | 0 | 45 (the stack's planted controls) |

`lfm2_moe` and `lfm3` are new images, on one side only. The tool exits 1 because it counts added functions as differing, and because its `fp4pair` control has no use in these two images to change (0 of 2); its `warp_sum` control changes 10 functions, so a changed source does show.
Loading