Skip to content

LTX-2.5 device residency: the spike ranked the levers but nothing stages them into landable work #1264

Description

@localai-bot

An LTX-2.5 render on GB10 barely uses the GPU. The investigation is done and is excellent;
what is missing is a row with implementation authority and a staged plan.

What already exists — this issue does NOT duplicate it

ltx25-decode-speed.md
is a SPIKE row that ranked the levers, read the oracles, and filed thirteen issues it
owns under ## Owed: #1007,
#1009,
#1010,
#1011,
#1012,
#1014,
#1015,
#1016,
#1021,
#1024,
#1040,
#1202,
#1210.

That row states plainly that it has no implementation authority and no fresh review.
It is a spike. Nothing in the tree stages its levers into landable, separately reviewed
work, and the levers span two memory-architecture changes on a box that OOM-reboots when
they go wrong.

The measured problem

  • #1024 — with --device cuda the
    render stages 35.5 GiB onto the GPU and then does no compute on it. GPU utilization was
    exactly 0 in 321 of 347 samples, all 26 non-zero samples inside the staging window.
    From t=251 s onward, over 17 minutes, 0 in every sample while the process held exactly
    1.00 core of 20.
  • #1087 — after
    #1041 landed threaded decode,
    57-66% of wall is one contiguous single-threaded phase measuring 1731 s and 1732 s
    across two rungs, i.e. essentially constant while voxel count grew 2.75x. Pure
    overhead on small renders; it does not amortise.
  • #1007 — the video VAE decode has
    no device arm at all. Every oracle runs it GPU-resident.
  • #1021 — DiT staging is 7.5 minutes
    at ~52 MiB/s with the GPU idle in 85% of samples: ~3,504 serial
    Alloc+copy+Synchronize round trips.
  • #1015Ltx2WidenDitToF32 holds
    the bf16 originals AND the f32 copies at once, permanently: ~105.9 GiB of DiT weights on
    a 119 GiB box, ~37.9 GB of it dead.
  • #1016 — the LTX-2.5 loaders never
    call MaybeReleaseSourcePages (0 hits against 15 other files under src/vllm), so the
    whole DiT file stays faulted resident beside its device copy. Measured at +10.83 GiB.

The thing that must come first, and why

#1040: none of the spike's
measurements has a retrievable evidence artifact.
They are on dgx.casa, which stopped
answering; the spike marks rung 2's exit reason REMOTE_UNVERIFIED and says the same
applies to the passing numbers.

So the lever ranking this campaign would be built on rests on numbers nobody can
re-derive. Staging a multi-stage campaign on an unreproducible ranking is how a campaign
spends months on the wrong lever. Paired with
#1010 — a render emits ONE log line
in 2.5 hours, so no phase can be timed at all, and #1087 explicitly says "Do not guess it
from the duration"
— the first stage is not a lever. It is the instrument.

Scope of this issue

Write and commit a staged campaign spec with the nine structured sections, taking
implementation ownership of the ranked levers. It must:

  1. Not restate the spike. Cite it; do not duplicate its evidence, oracle analysis or
    provenance sections.
  2. Stage the work so each stage lands and is reviewed separately, and is revertible
    without touching the next.
  3. Put the instrument first: An LTX-2.5 render emits ONE log line in 2.5 hours, so no phase of it can be measured without re-deriving the timing from a memory sampler #1010 phase timestamps and LTX25-DECODE-SPEED's passing measurements have no retrievable evidence artifact, and the sampler cadence does not close #1040 retrievable artifacts,
    with an explicit re-derivation of the ranking afterward. A lever whose ranking does
    not survive re-measurement is not a lever.
  4. State the hardware hazards as gates, not prose: a GB10 unified-memory OOM reboots the
    whole box, /tmp does not survive that reboot, and the fleet is leased through rc.
  5. Name what would close each stage, including the outcomes where a lever is refuted.
    AGENTS.md forbids declaring a ceiling; a refuted lever names the next hypothesis.

Relation to #1164: that issue wants
the denoise loop captured in a CUDA graph. A graph collapses host launch dispatch, and
this render has almost none to collapse, so #1164 is blocked behind this campaign and its
decision point is a measurement — GPU-busy against wall once the loop is device-resident.
If it turns out GPU-bound, #1164 closes as a refutation the way
#1161 closed prefill capture.

No engine code in this issue. Spec only.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]

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