Skip to content

Muse Glimmer's vision tower runs 50 layers on the naive attention kernel: ~4.8 s/image at 1024 tokens, unreached today and a 5 s TTFT stall the moment W3 lands #1545

Description

@localai-bot

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions