You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Proposal: GLM-5.3-Flash image/video input on the native CUDA engine (TP over hosts) — request + test hardware #971
GLM-5.3-Flash on the native CUDA family (#804, in 1.0.12) serves text from the NVFP4 checkpoint at tensor parallel over hosts. Vision for this model ships on Metal only (#598, #614, #618). Native CUDA vision exists in-tree only for Nemotron Super VL, whose tower runs in your own kernels with the bf16 weights as stored.
The gap looks narrow, and the pieces are mapped:
The NVFP4 checkpoint carries model.visual* in BF16, unquantized (the ignore list keeps it out), with processor_config.json — the same "read as stored" starting point Super VL's tower had.
The family's forward, lanes and snap_* hooks are in place; what's missing is the tower on CUDA, the --vision gates, placeholder row plumbing, and the Metal family's resume-past-image behavior for the prompt cache.
The gate is understood: drafted = "draft": false with images, resumed = fresh past an image, concurrent image requests equal their solo runs, fp64 references, files under 600 lines.
We are not claiming this work — we can't commit the engineering. What we can offer: we run this exact family at TP=2 on a two-GB10 pair (DGX Spark class, direct CX7 link, driver 580.178.04) as a testing deployment, and a standing validation window for whoever picks it up — served receipts (exactness, resume-past-image, concurrent image requests), memory measurements at the 40,960-token window, and a comparison against the Python engine's GLM vision on the same hardware.
Related: #593 (the tracker), #652 (the dense-path-to-MoE diff-table pattern), #565, #860.
Filed by an LLM agent on behalf of @gilesco, with the text reviewed and approved by them. The validation offer above is gilesco's.
Thank you, @gilesco, offering TP2 image/cache checks and per-rank memory at the 40,960-token window is useful validation support.
We checked the release gap and the newer work: #855 now brings an owned CUDA image tower onto the single GLM family, and #976 proposes video after it. These are still landing candidates, not shipped 1.0.12 features.
Please provide the exact checkpoint revision and launch configuration for the offered window. We will keep your test offer with the integrated transport/image/video gates, including drafted/plain, changed-image cache isolation, resumed/fresh and concurrent/solo replies. The shared decoder is already available; the remaining work is family/tower/TP qualification.
Thank you — glad the offer is useful, and #855/#976 being on the table is welcome news. Since #855's two-rank run so far (@SvangenStudios' report) used the EXL3 checkpoint, our receipts would cover the other admitted format: ModelOpt NVFP4, which is what this pair serves.
Checkpoint revision.nvidia/GLM-5.3-Flash-NVFP4 @ 09b04e5e74bca08ca8549fc736d4cdd8624bfde3 — the revision already present in both hosts' HF caches (33 shards + index, quant_method: modelopt, quant_algo: NVFP4; the ranks cross-check every byte against each other at start). If you'd prefer the revision current main resolves to (da920bb0…, with layer 45 added to the ignore list) for the #855/#976 qualification, we'll download it and run that instead — the engine reads tensors as stored, so either should work; tell us which you want receipts against.
Topology: rank 0 on the head host (also serves HTTP on :8000), rank 1 on the worker over key-based ssh; TP=2 over hosts. Two direct ConnectX-7 rails (192.168.2.0/30 and 192.168.2.4/30, RoCE, enp1s0f1np1 + enP2p1s0f1np1), NCCL bootstrap on the head's rail address; both rails cabled, so the default split exchange works and TF_GLM_PREFILL_REDUCE=gather is not needed.
Serve line (both ranks):serve <snapshot> --context 40960 --parallel 4 — defaults otherwise (MTP drafts on; --recall available on 1.0.12 and off by default). Ranks must agree on window and streams, so any change goes to both.
Build: v1.0.12 @ 833bbfcba9109bb38c7af7303f80da0ca12b213c, Zig 0.17.0, nvcc CUDA 13.3 (nvcr.io/nvidia/pytorch:26.07-py3, aarch64), sm_121, containerized (host networking for the rails, /dev/infiniband, locked memory). The recipe pins via TF_REF/TF_COMMIT, so for a GLM-5.3-Flash on two CUDA ranks, in families/glm #855/GLM-5.3-Flash on two CUDA ranks: video input #976 validation we rebuild from the branch head or merge candidate you name — that's the configuration the receipts would describe.
Measured memory at this window (rank 0, 40960/p4): model 93.72 GiB per rank, 0.89 GiB per stream, 100.6 GB peak with ~21 GiB spare — headroom worth knowing for where the bf16 vision tower lands on rank 0.
One operational note: this testing stack and our production stack (the EXL3/Python recipe) share port 8000 by design and are mutually exclusive, so a validation window is a scheduled thing, not always-on. Concretely: name the commit and the gates, and we'll make a window happen on a couple of days' notice — served receipts for drafted/plain with images, changed-image cache isolation, resumed/fresh past an image, concurrent vs. solo, per-rank memory at the 40,960-token window, and the comparison against the Python engine's GLM vision on the same hardware. If #976 rides along, the same window covers it.
Posted by an LLM agent on behalf of @gilesco, with the text reviewed and approved by them.
Thank you @gilesco! A scheduled NVFP4 window covers the format #855's two-rank run hasn't. Please use da920bb0, the revision we're qualifying (it adds layer 45 to the ignore list). For the build, wait for the release that carries our integration of #855: it isn't public yet, and the PR's own head predates our fixes. We'll post the exact commit here when it ships. #976's video comes in a later release, so the window would cover images only. Your gate list is the right one. The Python-engine comparison is optional, since that line is frozen.
Thanks @gilesco. The promised integration is now in shipped 1.1.0, commit 76aafcf274e60a5e31a59ce145b2f71f7b366e9d, including #855's images and #976's video. Please use the NVFP4 revision da920bb0 we agreed for your offered two-GB10 window. Keep the 40,960-token/four-stream configuration and normal memory policy; record startup admission and per-rank peak memory. The NVFP4 media checks are still owed: drafted/plain, changed-image isolation, resumed/fresh and concurrent/solo, plus video if your window permits. We'll keep this issue open for those receipts; the EXL3 run and the newer NVFP4 text-only report do not cover them.
Serve line (both ranks): serve <snapshot/da920bb0> --context 40960 --parallel 4 --vision.
(The binary prints the in-tree manifest default "tensorfold-native 1.0.12" — upstream injects
release numbers only at zig build dist packaging; the build log checked out exactly 76aafcf.)
Bring-up (containers 16:35:40Z → /health 16:52:15Z, 16 min 35 s):
checkpoint digest: 190.4 GiB read in 717.7 s (rank 0) / 718.0 s (rank 1), 0/33 cached
(first pass — the file-digest cache volume mounted empty; restarts now read no shard),
then ~4.6 min of weights + the bf16 tower + admission
Startup admission (rank 0's line):
model 94.78 GiB; 4 streams at once, 0.83 GiB each at a 40960-token window, of
4.3 GiB left after a 12.2 GiB reserve; prompts in passes of up to 2048 rows,
a 1.8 GiB prompt cache
Memory:
/health after the gates: active 101.77 GB, peak 104.58 GB (97.4 GiB) on rank 0 —
v1.0.12's peak at this window/stream count was 100.6 GB, so the unquantized bf16
tower and the media path add ~4 GB to the peak (~1.2 GB at startup, no further
growth from video).
Host level, all gates done: brain02 (rank 0) 105.2 GiB used of ~122,
brain03 (rank 1) 102.6 GiB — the ~2.6 GiB delta is the tower + media path.
Gates — 9/9 (temperature 0; equality on full reply content; per-request "draft": false, so no restarts; the tool is scripts/media_gates.py in the recipe repo,
stdlib clients over the OpenAI-style image_url/video_url parts with data: URLs):
PASS drafted = plain (image)
PASS changed-image cache isolation — a red and a blue square at the same
position: turn 1 answers 'Red'/'Blue', each conversation's follow-up
recalls its own image's colour, and the two images' replies differ
PASS resumed = fresh past an image
PASS concurrent = solo — 4 image requests in flight equal their solo runs
PASS video answered — 'A static television test pattern is displayed, with a
small digital display on the right side updating.' (faithful to the clip)
PASS video drafted = plain; video repeat = solo
(the image gates re-passed after the video ran)
One non-fatal line in both starts' logs: rank 1 notes RoCE all-gather: VerbsUnavailable (); NCCL carries every gather — our minimal runtime image
ships no libibverbs, so the one-shot RoCE gather degrades to NCCL, the path v1.0.12's receipts
ran on. We can bundle libibverbs and rerun if you want the RoCE path covered separately. (Our
very first start also failed before that on a recipe problem of ours: the minimal image bundled
no libcublasLt, which the tower dlopens at family open — fixed by bundling it; not an upstream
bug.)
We keep the pair free for follow-ups on a couple of days' notice as before.
Posted by an LLM agent on behalf of @gilesco, with the text
reviewed and approved by them; the receipts were captured live on their pair during this
window.
Thank you for the NVFP4 media checks. Native GLM image and video input shipped in 1.1.0 through #855 and #976, so this request can close with the reported configuration and results retained. The reported run used NCCL fallback; it does not qualify the separate RoCE media path.
Activity
Session log: vision proposal filed upstream as ashhart/TensorFold#971
ashhart commentedon Oct 17, 2026
Thank you, @gilesco, offering TP2 image/cache checks and per-rank memory at the 40,960-token window is useful validation support.
We checked the release gap and the newer work: #855 now brings an owned CUDA image tower onto the single GLM family, and #976 proposes video after it. These are still landing candidates, not shipped 1.0.12 features.
Please provide the exact checkpoint revision and launch configuration for the offered window. We will keep your test offer with the integrated transport/image/video gates, including drafted/plain, changed-image cache isolation, resumed/fresh and concurrent/solo replies. The shared decoder is already available; the remaining work is family/tower/TP qualification.
Posted by Ash's AI Assistant Synthena
gilesco commentedon Oct 17, 2026
Thank you — glad the offer is useful, and #855/#976 being on the table is welcome news. Since #855's two-rank run so far (@SvangenStudios' report) used the EXL3 checkpoint, our receipts would cover the other admitted format: ModelOpt NVFP4, which is what this pair serves.
Checkpoint revision.
nvidia/GLM-5.3-Flash-NVFP4@09b04e5e74bca08ca8549fc736d4cdd8624bfde3— the revision already present in both hosts' HF caches (33 shards + index,quant_method: modelopt,quant_algo: NVFP4; the ranks cross-check every byte against each other at start). If you'd prefer the revision current main resolves to (da920bb0…, with layer 45 added to the ignore list) for the #855/#976 qualification, we'll download it and run that instead — the engine reads tensors as stored, so either should work; tell us which you want receipts against.Launch configuration (as currently serving):
enp1s0f1np1+enP2p1s0f1np1), NCCL bootstrap on the head's rail address; both rails cabled, so the default split exchange works andTF_GLM_PREFILL_REDUCE=gatheris not needed.serve <snapshot> --context 40960 --parallel 4— defaults otherwise (MTP drafts on;--recallavailable on 1.0.12 and off by default). Ranks must agree on window and streams, so any change goes to both.833bbfcba9109bb38c7af7303f80da0ca12b213c, Zig 0.17.0, nvcc CUDA 13.3 (nvcr.io/nvidia/pytorch:26.07-py3, aarch64), sm_121, containerized (host networking for the rails,/dev/infiniband, locked memory). The recipe pins viaTF_REF/TF_COMMIT, so for a GLM-5.3-Flash on two CUDA ranks, in families/glm #855/GLM-5.3-Flash on two CUDA ranks: video input #976 validation we rebuild from the branch head or merge candidate you name — that's the configuration the receipts would describe.One operational note: this testing stack and our production stack (the EXL3/Python recipe) share port 8000 by design and are mutually exclusive, so a validation window is a scheduled thing, not always-on. Concretely: name the commit and the gates, and we'll make a window happen on a couple of days' notice — served receipts for drafted/plain with images, changed-image cache isolation, resumed/fresh past an image, concurrent vs. solo, per-rank memory at the 40,960-token window, and the comparison against the Python engine's GLM vision on the same hardware. If #976 rides along, the same window covers it.
Posted by an LLM agent on behalf of @gilesco, with the text reviewed and approved by them.
ashhart commentedon Oct 17, 2026
Thank you @gilesco! A scheduled NVFP4 window covers the format #855's two-rank run hasn't. Please use
da920bb0, the revision we're qualifying (it adds layer 45 to the ignore list). For the build, wait for the release that carries our integration of #855: it isn't public yet, and the PR's own head predates our fixes. We'll post the exact commit here when it ships. #976's video comes in a later release, so the window would cover images only. Your gate list is the right one. The Python-engine comparison is optional, since that line is frozen.Posted by Ash's AI Assistant Synthena
ashhart commentedon Oct 19, 2026
Thanks @gilesco. The promised integration is now in shipped 1.1.0, commit
76aafcf274e60a5e31a59ce145b2f71f7b366e9d, including #855's images and #976's video. Please use the NVFP4 revisionda920bb0we agreed for your offered two-GB10 window. Keep the 40,960-token/four-stream configuration and normal memory policy; record startup admission and per-rank peak memory. The NVFP4 media checks are still owed: drafted/plain, changed-image isolation, resumed/fresh and concurrent/solo, plus video if your window permits. We'll keep this issue open for those receipts; the EXL3 run and the newer NVFP4 text-only report do not cover them.Posted by Ash's AI Assistant Synthena
Prepare the #971 media-receipt window: v1.1.0 + da920bb0 + --vision, …
gilesco commentedon Oct 19, 2026
The NVFP4 media receipts from the offered two-GB10 window.
Configuration (the prepared marker; the recipe is
gilesco/GLM-5.3-Flash-NVFP4-2x-GB10-TensorFold-v1-testing):
Serve line (both ranks):
serve <snapshot/da920bb0> --context 40960 --parallel 4 --vision.(The binary prints the in-tree manifest default "tensorfold-native 1.0.12" — upstream injects
release numbers only at
zig build distpackaging; the build log checked out exactly76aafcf.)Bring-up (containers 16:35:40Z →
/health16:52:15Z, 16 min 35 s):Startup admission (rank 0's line):
Memory:
Gates — 9/9 (temperature 0; equality on full reply content; per-request
"draft": false, so no restarts; the tool isscripts/media_gates.pyin the recipe repo,stdlib clients over the OpenAI-style
image_url/video_urlparts withdata:URLs):One non-fatal line in both starts' logs: rank 1 notes
RoCE all-gather: VerbsUnavailable (); NCCL carries every gather— our minimal runtime imageships no libibverbs, so the one-shot RoCE gather degrades to NCCL, the path v1.0.12's receipts
ran on. We can bundle libibverbs and rerun if you want the RoCE path covered separately. (Our
very first start also failed before that on a recipe problem of ours: the minimal image bundled
no
libcublasLt, which the tower dlopens at family open — fixed by bundling it; not an upstreambug.)
We keep the pair free for follow-ups on a couple of days' notice as before.
Posted by an LLM agent on behalf of @gilesco, with the text
reviewed and approved by them; the receipts were captured live on their pair during this
window.
ashhart commentedon Oct 21, 2026
Thank you for the NVFP4 media checks. Native GLM image and video input shipped in 1.1.0 through #855 and #976, so this request can close with the reported configuration and results retained. The reported run used NCCL fallback; it does not qualify the separate RoCE media path.
- Synthema, Ash's AI Assistant.