Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions .agents/claims/CLAIM-ROCM-GEMMA4-INDEXED-MAX-T.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# CLAIM-ROCM-GEMMA4-INDEXED-MAX-T

| Claim | Row IDs | Agent | Worktree | Branch | Owned scope | State | Last update |
|---|---|---|---|---|---|---|---|
| `CLAIM-ROCM-GEMMA4-INDEXED-MAX-T` | `BACKEND-ROCM` (slug `ROCM-GEMMA4-INDEXED-MAX-T`, issue #838) | hermes-vllm (lab), helper | `/home/don/llms/vllm.cpp-indexed-max-t` | `row/ROCM-GEMMA4-INDEXED-MAX-T` | Owns ONLY: widen `gemma4_moe.cpp` T==1 indexed gate to T≤63 via `VT_GEMMA4_DECODE_INDEXED_MAX_T` default 63, using existing per-token indexed helpers, plus tensor oracle vs serial reference. **EXCLUDED:** packed `ExpertGeGLUFp8TopKIndexedBatched`, DEVICE_GROUP, INDEXED_NOSYNC, #837, #839, #697. Independent history from abandoned `row/ROCM-GEMMA4-XDEV-MOE`. | `IMPLEMENTING` | 2026-08-15 — d973/0f32 repair: retire inside acc_idx scope, Retire fail-closed, independent serial ref, injectable arms, owner kind |
1 change: 1 addition & 0 deletions .agents/issue-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -453,3 +453,4 @@ rather than merged. `scripts/check-agent-record.py` gates both.
| [#1353](https://github.com/mudler/vllm.cpp/issues/1353) | `ENG-RECORD-ANCHOR-RATCHET` | A full disk makes `scripts/agent-preflight.sh` report record and policy defects that do not exist. Measured at `63ff58272` with 896M free of 447G: ten suites go red together — `test_check_release_binary_contract`, `test_release_postpublish_audit`, `test_check_container_matrix`, `test_release_index`, `test_release_metadata`, `test_release_accelerator_metadata`, `test_release_macos_metadata`, `test_release_windows_metadata`, `test_agent_role`, `test_agent_onboard` — and the trailing summary names all ten without mentioning the disk. The cause appears only inside one suite's captured output several screens up (`error: copy-fd: write returned: No space left on device`), interleaved with fixture failures that read exactly like findings (`ERROR: x: see (#157) and #174`, `ERROR: x: landed without a row PR`). All ten build a scratch git repository in a temporary directory, so all ten fail together and all ten fail toward a verdict about RECORDS rather than about the environment — the `.agents/verification.md` broken-instrument shape, and an agent reading it has every reason to start repairing records that were never broken. Reclaiming 2.7G of one row's own build tree and re-running the identical command turned all ten green with no tree change (`86 gates, 86 ok, 0 FAIL, 0 SKIP`, exit 0). The fix is a precondition, not a suppression: check free space before the suites that need a scratch repository and refuse naming the disk, exactly as `test_cpu_x86_llamacpp_floor` refuses to measure under contention ([#618](https://github.com/mudler/vllm.cpp/issues/618)). A gate that cannot run must say so rather than return a verdict. Found while landing [#1332](https://github.com/mudler/vllm.cpp/issues/1332) M0+M1 and NOT fixed in that flow, because it changes preflight semantics and adds a refusal path, which `AGENTS.md` routes to the normal row, spec and fresh-review path | bug |
| [#1376](https://github.com/mudler/vllm.cpp/issues/1376) | `ENG-CUDAGRAPH-BREAK` | `main` was red on `tests/scripts/test_check_gate_commands.py`, measured at `601b576c6` in a detached worktree of `origin/main`: 8 failures of 44 tests, every one a comparison between the computed runnable population and `RUNNABLE_BASELINE`. `ENG-CUDAGRAPH-BREAK` was in the first and absent from the second. Cause: W5 of that row ([#1361](https://github.com/mudler/vllm.cpp/issues/1361)) filled its spec's `## Gates` section with runnable evidence, including a named test binary with its case and assertion counts and an exit status, which is exactly what moves a row into the runnable population. The ratchet's own error text instructs a re-pin in the SAME change, and the re-pin was not made. This is the growth case the ratchet exists to force a decision about, not a defect in that row's work. **It landed with no remote verdict**: the continuous integration lane that would have caught it independently has not executed for this repository since roughly 07:43Z on 19 August 2026, with runs queueing and none starting while GitHub reports Actions operational. FIXED IN FLOW while merging `origin/main` into `row/ENG-HF-MODEL-DOWNLOAD` for [#1280](https://github.com/mudler/vllm.cpp/issues/1280), because the fix is small and clear and a red `main` blocks every other row's gate. The entry is added with a justifying comment in the form the neighbouring entries use, no checker semantics change, and no test is weakened. After the re-pin the suite reports 45 tests OK and the audit reads 39 runnable of 119 gated rows | bug |
| [#1375](https://github.com/mudler/vllm.cpp/issues/1375) | `MODEL-DIFFUSION-LTX25` | First end-to-end per-forward cost for the FULL 21.004 B LTX-2.5 DiT on GB10, measured on run `20260819T150230Z` with binary `0a43a750` built from [`7b9e207b1`](https://github.com/mudler/vllm.cpp/commit/7b9e207b1) (#1252). At 1024x576/25f (2304 latent tokens) the governor resolved **7 forward starts from the GPU busy/idle edge counter** and measured `per_forward ~162.0 s` with `first_dit = 481.5 s`, so the recipe's fixed 60 forwards (30 steps x 2 CFG legs, `ltx2_pipeline.cpp:521-529`) project **10 803 s against the rung's 7 153 s budget** and the rung was refused rather than run to the wall. The same lease then COMPLETED 768x448/25f (1344 tokens) in 2990 s, so the ceiling is geometry against lease length, not a defect. TWO instrument facts belong with the number, because both have already caused a wrong reading: `gpu_edges=0` means the GPU never went idle long enough to sample an edge (SATURATED), not that no work ran — this rung sampled 85% of 3191 samples above 50% utilisation; and `eu-stack` resolves no frames in the rc worker container, so phase attribution came from the cpu%/rss signature rather than from symbols. Owned by the LTX-2.5 row; spec [`ltx-2-5.md`](specs/ltx-2-5.md) | measurement |
| [#838](https://github.com/mudler/vllm.cpp/issues/838) | `ROCM-GEMMA4-INDEXED-MAX-T` | Gemma4 indexed MoE gate widened to T<=63 with injectable dispatch + retire-in-scope | perf |
23 changes: 23 additions & 0 deletions .agents/specs/rocm-gemma4-indexed-max-t-donor-gate-911-933.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Device-indexed FP8 MoE for small packed T — no router D2H, no host top-k gather.
// T=1: original KEEP decode path (hipGraph-stable TLS acc).
// T=2..min(MAX, batch_min-1): P1 concurrent-decode gap (research 2026-08-11).
// VT_GEMMA4_DECODE_INDEXED_MAX_T: default 63; =1 → T=1 only; clamp [1,63].
static const int64_t kDecodeIndexedMaxT = []() -> int64_t {
const char* e = std::getenv("VT_GEMMA4_DECODE_INDEXED_MAX_T");
if (e == nullptr || !e[0]) return 63;
const long v = std::strtol(e, nullptr, 10);
if (v < 1) return 1;
if (v > 63) return 63;
return static_cast<int64_t>(v);
}();
// P0 overlap enabler (default OFF): keep the enqueue-only indexed path for
// prefill T so layer-split does not hipStreamSynchronize after router D2H.
// Not a KEEP speed path — per-token launches. Cap 8192 (pipe ubatch).
static const int64_t kPrefillIndexedNoSyncMaxT = []() -> int64_t {
const char* e = std::getenv("VT_GEMMA4_PREFILL_INDEXED_NOSYNC");
if (!e || e[0] != '1') return 0;
return 8192;
}();
const int64_t indexed_max_t =
(kPrefillIndexedNoSyncMaxT > kDecodeIndexedMaxT) ? kPrefillIndexedNoSyncMaxT
: kDecodeIndexedMaxT;
23 changes: 23 additions & 0 deletions .agents/specs/rocm-gemma4-indexed-max-t-donor-ok-1088-1110.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
}
static std::atomic<int> grp_fail{0};
if (grp_fail.fetch_add(1) < 4) {
std::fprintf(stderr, "gemma4 moe: device-group FAIL T=%lld — falling back\n",
static_cast<long long>(T));
std::fflush(stderr);
}
}
const bool indexed_ok_t =
(T >= 1 && T <= indexed_max_t && top_k <= 8 && top_k > 0 && fp8_res &&
(kPrefillIndexedNoSyncMaxT > 0 || T < kPrefillBatchMinT));
// Indexed only while T is below the group-by-expert crossover (unless nosync).
if (indexed_ok_t) {
// per-expert scale on device (once per layer/E).
struct EscTls {
int dev = -1;
int64_t E = 0;
const void* host_key = nullptr;
std::optional<DBuf> sc;
};
static thread_local EscTls esc_slots[2];
EscTls& esc = esc_slots[(compute_dev == 1) ? 1 : 0];
float* escale_ptr = nullptr;
21 changes: 21 additions & 0 deletions .agents/specs/rocm-gemma4-indexed-max-t-donor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Donor evidence — #838 indexed-max-T

Pinned **bytes**, not a dirty-tree HEAD. Implementation must copy these slices (or a later
immutable replacement that research re-reviews), not re-read `/home/don/llms/vllm.cpp`.

Donor includes `kPrefillIndexedNoSyncMaxT` / `DEVICE_GROUP` neighbors. **Those are out of
scope for this row.** Only `kDecodeIndexedMaxT` (default 63, clamp [1,63]) and the
`indexed_ok_t` predicate **without** the nosync disjunct are in scope.

| Field | Value |
|---|---|
| Donor tree | `/home/don/llms/vllm.cpp` |
| Donor git HEAD | `2bb4bd8a` (dirty; these slices are **uncommitted** on that tree) |
| File | `src/vllm/model_executor/models/gemma4_moe.cpp` |
| Slice A | `rocm-gemma4-indexed-max-t-donor-gate-911-933.log` lines 911–933 SHA256 `d0d28f3d55ff7d526475c9a2a1d028792cc245ba4cc2b421ebf994fed9b96e59` |
| Slice B | `rocm-gemma4-indexed-max-t-donor-ok-1088-1110.log` lines 1088–1110 SHA256 `5509f3f77dcadd023ce73743e13a2a1a0237d8dd0a8e25a98a765430fc577bd0` |
| Recipient | `origin/main` `3ce5a1dc` `gemma4_moe.cpp:735` (`T == 1` only) / `:1345` serial |
| Captured | 2026-08-14 |

`sha256sum` of each slice file must match the table. Do not treat `2bb4bd8a` as a clean
donor commit.
Loading
Loading