src/vllm/model_executor/models/muse_glimmer_vision.cpp:639 calls
vt::Attention, the "correctness-grade" naive kernel
(src/vt/cuda/cuda_ops.cu:1463, self-described at :1456-1459). It is an
instance of the class issue #1544,
and it is the worst-shaped one in the tree.
Why this one is bad
Verified in source: it is the sole attention path in the tower, non-causal,
behind no knob or A/B rung, across 50 layers, H=16, head_dim=96.
Cost model Q * H * K * 5.70 ns (validated within 7% against two recorded
measurements — see #1544):
| tokens |
per call |
per tower forward (50 layers) |
| 1024 |
95.6 ms |
4.8 s |
| 4096 |
~1.5 s |
~34 s |
For scale, the Qwen3-VL tower fix was justified by 1.51 s and delivered
14.3x. This is 3.2x worse at 1024 tokens, in a tower with nearly twice
the layers.
It is not reachable today, which is exactly why to fix it now
MuseGlimmerEncodePixelGroups and MuseGlimmerGenerateGreedyViaRegistry have no
caller in src/, examples/ or include/vllm.h — only tests/. The registry
says so directly at muse_glimmer_registry.cpp:13-14: "The perception encoder is
still W3, so an image or video prompt is a pending brick."
So this is a landed-unreached slice (AGENTS.md "Nothing lands dead") that becomes
a ~5 second TTFT stall the moment W3 is wired, discovered by whoever wires it
rather than by whoever caused it. Fixing it before that wiring costs one line;
fixing it after costs a regression hunt.
The fix
Route to vt::AttentionDenseFlash. head_dim 96 needs 2*64*96*2 = 24 KB of
dynamic shared memory, inside the 48 KB default cap (see #1544 item 2 — the op's
advertised <= 256 ceiling is wrong, but 96 is safely under the real one).
AttentionDenseFlash honours causal (cuda_ops.cu:3277-3296) and Muse's
block-diagonal mask is already expressed as per-segment row slices that map 1:1
onto it, so masking is not a blocker. AttentionDenseFa2 is NOT usable —
head_dim != 64 (cuda_flash_attn_fa2.cu:557-560).
Also owes a ## Owed entry on the Muse Glimmer spec, since the tower is an
unreached staged slice.
Labelled uncertainty
Verified in source: sole path, non-causal, no knob, H=16, head_dim=96,
no production caller.
Inferred, NOT measured: the token count — there is no image processor or
resizer for Muse Glimmer in the tree; the tower takes
MuseGlimmerVisionImage{height,width} directly and only tests construct one
(12x12 and 8x8 synthetic patches, test_muse_glimmer_vision.cpp:127-132). The
1024/4096 anchors correspond to 448x448 and 896x896 at patch_size=14 and are
illustrative, not the shipped resolution. The 13-full/37-window layer split is
also inferred from the fallback rule at muse_glimmer_weights.cpp:429-439; the
comment states the released config.json ships an explicit layer_types, which
was not read. The 5.70 ns constant transferring to head_dim 96 is inferred from
anchors at 64 and 72.
Whoever takes this should pin the real resolution first — it moves the estimate
quadratically.
Found while auditing the class after LTX-2.5's DiT forward was traced to this
kernel.
src/vllm/model_executor/models/muse_glimmer_vision.cpp:639callsvt::Attention, the "correctness-grade" naive kernel(
src/vt/cuda/cuda_ops.cu:1463, self-described at:1456-1459). It is aninstance of the class issue #1544,
and it is the worst-shaped one in the tree.
Why this one is bad
Verified in source: it is the sole attention path in the tower, non-causal,
behind no knob or A/B rung, across 50 layers, H=16, head_dim=96.
Cost model
Q * H * K * 5.70 ns(validated within 7% against two recordedmeasurements — see #1544):
For scale, the Qwen3-VL tower fix was justified by 1.51 s and delivered
14.3x. This is 3.2x worse at 1024 tokens, in a tower with nearly twice
the layers.
It is not reachable today, which is exactly why to fix it now
MuseGlimmerEncodePixelGroupsandMuseGlimmerGenerateGreedyViaRegistryhave nocaller in
src/,examples/orinclude/vllm.h— onlytests/. The registrysays so directly at
muse_glimmer_registry.cpp:13-14: "The perception encoder isstill W3, so an image or video prompt is a pending brick."
So this is a landed-unreached slice (AGENTS.md "Nothing lands dead") that becomes
a ~5 second TTFT stall the moment W3 is wired, discovered by whoever wires it
rather than by whoever caused it. Fixing it before that wiring costs one line;
fixing it after costs a regression hunt.
The fix
Route to
vt::AttentionDenseFlash. head_dim 96 needs2*64*96*2= 24 KB ofdynamic shared memory, inside the 48 KB default cap (see #1544 item 2 — the op's
advertised
<= 256ceiling is wrong, but 96 is safely under the real one).AttentionDenseFlashhonourscausal(cuda_ops.cu:3277-3296) and Muse'sblock-diagonal mask is already expressed as per-segment row slices that map 1:1
onto it, so masking is not a blocker.
AttentionDenseFa2is NOT usable —head_dim != 64 (
cuda_flash_attn_fa2.cu:557-560).Also owes a
## Owedentry on the Muse Glimmer spec, since the tower is anunreached staged slice.
Labelled uncertainty
Verified in source: sole path, non-causal, no knob, H=16, head_dim=96,
no production caller.
Inferred, NOT measured: the token count — there is no image processor or
resizer for Muse Glimmer in the tree; the tower takes
MuseGlimmerVisionImage{height,width}directly and only tests construct one(12x12 and 8x8 synthetic patches,
test_muse_glimmer_vision.cpp:127-132). The1024/4096 anchors correspond to 448x448 and 896x896 at
patch_size=14and areillustrative, not the shipped resolution. The 13-full/37-window layer split is
also inferred from the fallback rule at
muse_glimmer_weights.cpp:429-439; thecomment states the released
config.jsonships an explicitlayer_types, whichwas not read. The 5.70 ns constant transferring to head_dim 96 is inferred from
anchors at 64 and 72.
Whoever takes this should pin the real resolution first — it moves the estimate
quadratically.
Found while auditing the class after LTX-2.5's DiT forward was traced to this
kernel.