Skip to content

Commit 0854b2d

Browse files
committed
fix(BACKEND-TENSTORRENT-MISTRAL): the gate could report green having gated nothing, and the row had no issue (#670)
Review repairs pushed to the PR branch so lu-zero keeps authorship of the work itself. Their two commits are untouched. GATE DEFECTS. 1. A bootstrap run reported a green gate that gated nothing. `test_mistral_paged_engine.cpp` `continue`s every prompt when `bootstrap_only` is set, then fell through to the summary and `REQUIRE(fail == 0)`. With every prompt skipped, `strict_exact`, `neartie_only` and `fail` are all 0, so it printed "0/16 prompts PASS ... 0 forward-divergent" and PASSED -- indistinguishable in a log from a gate that ran. Reachable on a TT box with `VT_DUMP_IDS=1` and the device goldens missing: a fresh checkout, a new device suffix, a partial fetch. The mirrored Qwen3 gate returns early with a BOOTSTRAP banner and this copy dropped it; restored, with the reason stated at the site. 2. The backend proof dropped the rope escape it says it mirrors. It asserted `kRopeNeox` selections > 0 unconditionally, but Mistral reuses the Qwen3-dense `dense_attn::AttnBlock`, where `VT_QWEN3_ROPE_CACHE` is DEFAULT ON and routes rope through `kRopeFromCache`; both cache ops are registered on TT. So a cache-path run would CHECK-fail "kRopeNeox was never dispatched" on a CORRECT engine -- a false RED. Mirrors the Qwen3 gate's `rope_alt` escape exactly, including resetting the alternative ops' stats, rather than inventing a second shape. 3. `EnableOpProviderCallStats(true)` was disarmed only inside `if (device_golden && !bootstrap_only)`, so a bootstrap run left a process-global instrument on. Moved to every device_golden path. RECORDS. 4. No GitHub issue existed. The row, spec and claim all cited PR #354 -- a merged PR, not an issue -- so nothing in the tree pointed at anything trackable. Filed #670 and linked it in the three places AGENTS.md requires. 5. Three records disagreed on lifecycle state: the matrix row said `ACTIVE`, the claim said `SPIKE` with a note still reading "e2e gate BLOCKED on two env prerequisites", and the spec header said "DRAFT ... owes the RED mutation + on-card run" while its own Outcome recorded the run passing. All three now agree, and the claim records what actually cleared. 6. The public documents a new ACTIVE row owes: `docs/FEATURES.md` (the TT row listed two architectures and now names the third), `docs/STATUS.md`, and `docs/BENCHMARKS.md` -- the last stating plainly that no speed number is owed or claimed, so a correctness gate cannot be mistaken for one. Added the spec's `## Now`. 7. The oracle was named wrong in four places. Comments and the spec's port map said `qwen3-neartie-gap.py` teacher-forces vLLM; the committed goldens came from `qwen3-neartie-gap-transformers.py`. Anyone regenerating from those instructions would have produced a golden from a DIFFERENT oracle than the one committed. Now names `transformers` and points at the registry entry -- the sanctioned path, since vLLM has no Tenstorrent backend at all. CHECKER EVIDENCE. This PR bumps the BACKEND ratchet 81 -> 82, and `check-pr-size` requires a governance-checker change to carry executable mutation evidence. Added `TenstorrentMistralRowIsCounted`, keyed to THIS row per the `b55f6ec14` precedent: the row exists exactly once, it names its issue and spec, and removing it breaks the pinned count. That mutation test was wrong twice and both are worth recording. Patching `Path.read_text` globally fed backend content to every matrix, so it went green on errors unrelated to the removal. Writing the mutated copy to `/tmp` then raised `ValueError: not in the subpath of` from `check_matrices`'s own `relative_to(ROOT)`. The landed version writes under ROOT and redirects BOTH `MATRIX_PATHS` and `MATRICES` -- rows are parsed from the first while the count is pinned in the second, so patching only the latter counts zero rows for a reason that has nothing to do with the mutation. Verified: removing the row from the matrix turns the suite RED (4 failed, 20 errors); restored, `check-agent-record` reports BACKEND=82 and the suite is 55 passed, 2 subtests. The final tree was diffed against a clean merge of origin/main with the PR head: it differs by exactly the edits listed above and nothing from main was lost. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude:claude-opus-5 [Claude Code]
1 parent 6c9e98d commit 0854b2d

8 files changed

Lines changed: 161 additions & 17 deletions

File tree

.agents/coordination.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1990,7 +1990,7 @@ this claim will meet. The tiled row is speed-gatable on dgx.
19901990
| `CLAIM-PARAKEET-MODEL-P4` | `MODEL-AUDIO-PARAKEET-ENCODER`, `MODEL-AUDIO-PARAKEET-TRANSDUCER` | Claude Opus 5 (1M context) | isolated worktree `/home/mudler/_git/vllm.cpp-parakeet` (CPU-only) | branch `row/MODEL-AUDIO-PARAKEET-ENCODER`, base `main` | The encoder, the CTC head with greedy collapse, the log-mel front end, an HF-safetensors loader and the RNN-T/TDT transducer. Owns `src/vllm/model_executor/models/parakeet_*`, `src/vllm/multimodal/parakeet_audio_processor.*`, `examples/parakeet_transcribe/`, the Parakeet tests and the two model-matrix rows. | `ACTIVE` | 2026-08-07 CPU-LANDED + gated against a HF `ParakeetForCTC` oracle with EXACT token ids; transcribes ctc-0.6b/1.1b, rnnt-0.6b, tdt-0.6b-v3. No CUDA, no aarch64, no speed number claimed. |
19911991
| `CLAIM-BACKEND-TENSTORRENT-SPIKE` | `BACKEND-TENSTORRENT` (`INVENTORIED`→`ACTIVE`; W0 skeleton, one op) | Claude Code (claude-sonnet-5) | isolated worktree `/home/lu_zero/Sources/vllmcpp-tenstorrent`; real Blackhole (P150) hardware available all session | branch `row/BACKEND-TENSTORRENT`, base `origin/main` `7534da65`, draft PR [#197](https://github.com/mudler/vllm.cpp/pull/197) | New extension platform (no upstream vLLM equivalent, same class as Metal/Vulkan): `DeviceType::kTENSTORRENT`, `vt::tenstorrent::Backend` (host-staged, discrete PCIe), `TenstorrentPlatform`, ONE op (`kMatmul`, F32/rank-2) via `ttnn::operations::matmul::matmul`. Owns `include/vt/device.h`, `src/vllm/platforms/{platform,tenstorrent}.cpp`, `src/vt/tenstorrent/`, `tests/vt/test_tenstorrent_backend.cpp`, the `VLLM_CPP_TENSTORRENT` CMake wiring, the backend-matrix/porting-inventory/spec, and this claim. | `ACTIVE` | 2026-08-09 W0 LANDED: 3/3 test cases, 8/8 assertions PASS on real hardware (registration, Platform/Backend mirror, kMatmul vs host F32 reference within bf16 tolerance, max_abs_diff 0.03375). Two bugs found+fixed in the same pass (nlohmann-json ABI collision between vllm.cpp's vendored copy and tt-metal's, isolated via a separate OBJECT library; a process-exit segfault from static MeshDevice teardown ordering, fixed by a deliberate leak) — both documented in the spec's Risks/decisions. Not reviewed. No model runs; one op only; host round-trip per call, no perf claim. |
19921992
| `CLAIM-BACKEND-TENSTORRENT-RESIDUAL-GOLDEN` | `BACKEND-TENSTORRENT-RESIDUAL-GOLDEN` (NEW child of `BACKEND-TENSTORRENT`; `INVENTORIED`→`SPIKE`) | Maki (zai/glm-5.2), helper role | isolated worktree `/home/lu_zero/Sources/vllmcpp-tenstorrent`; real Blackhole (P150) hardware | branch `row/BACKEND-TENSTORRENT-RESIDUAL-GOLDEN`, base `origin/main` `f64f2b71` | Owes the bot-flagged residual-RMS numerics evidence at the `kDeviceResidualMinRows == 32` boundary: the device path (`ttnn::add`+`ttnn::rms_norm` in bf16) vs the CPU/host f32 oracle (`cpu_ops.cpp:371`). Owns ONLY: NEW `.agents/specs/tenstorrent-residual-golden.md`, the NEW `BACKEND-TENSTORRENT-RESIDUAL-GOLDEN` backend-matrix row, the NEW op-level cross-device test, and this claim. No model/perf/MoE change. | `SPIKE` | 2026-08-11 spike committed; no measurement yet. |
1993-
| `CLAIM-BACKEND-TENSTORRENT-MISTRAL` | `BACKEND-TENSTORRENT-MISTRAL` (NEW child of `BACKEND-TENSTORRENT`; `INVENTORIED`→`SPIKE`) | Maki (zai/glm-5.2), helper role | isolated worktree `/home/lu_zero/Sources/vllmcpp-tenstorrent`; real Blackhole (P150) hardware | branch `row/BACKEND-TENSTORRENT-MISTRAL`, base `origin/main` `6dbedf9f` | Allowlist `MistralForCausalLM` on TT (Mistral-7B-v0.3 reuses the Qwen3-dense forward verbatim — qk-norm skipped, plain rope, untied lm_head; every op already registered, no new kernel) + make `test_mistral_paged_engine.cpp` device-aware (mirror the Qwen3 gate's tenstorrent branch + device-appropriate golden pair). Owns ONLY: NEW `.agents/specs/tenstorrent-mistral.md`, the NEW `BACKEND-TENSTORRENT-MISTRAL` backend-matrix row, `src/vllm/platforms/tenstorrent.cpp` (one allowlist line), `tests/parity/test_mistral_paged_engine.cpp` (device-aware wiring), the NEW TT golden pair, and this claim. No new op/kernel/model code. | `SPIKE` | 2026-08-11 spike committed. Code steps (allowlist + device-aware wiring) unblocked; e2e gate BLOCKED on two env prerequisites being staged by the developer: the 7B checkpoint (~14 GB download authorized) + a vLLM 0.25.0 oracle for `qwen3-neartie-gap.py` teacher-forcing. |
1993+
| `CLAIM-BACKEND-TENSTORRENT-MISTRAL` | `BACKEND-TENSTORRENT-MISTRAL` (NEW child of `BACKEND-TENSTORRENT`; `INVENTORIED`→`SPIKE`) | Maki (zai/glm-5.2), helper role | isolated worktree `/home/lu_zero/Sources/vllmcpp-tenstorrent`; real Blackhole (P150) hardware | branch `row/BACKEND-TENSTORRENT-MISTRAL`, base `origin/main` `6dbedf9f` | Allowlist `MistralForCausalLM` on TT (Mistral-7B-v0.3 reuses the Qwen3-dense forward verbatim — qk-norm skipped, plain rope, untied lm_head; every op already registered, no new kernel) + make `test_mistral_paged_engine.cpp` device-aware (mirror the Qwen3 gate's tenstorrent branch + device-appropriate golden pair). Owns ONLY: NEW `.agents/specs/tenstorrent-mistral.md`, the NEW `BACKEND-TENSTORRENT-MISTRAL` backend-matrix row, `src/vllm/platforms/tenstorrent.cpp` (one allowlist line), `tests/parity/test_mistral_paged_engine.cpp` (device-aware wiring), the NEW TT golden pair, and this claim. No new op/kernel/model code. | `ACTIVE` | 2026-08-12 gate PASSED on Blackhole P150: 16/16 prompts, 12/16 strict-exact, max near-tie gap 0.062 nats, BACKEND PROOF 0 declines. Both former blockers cleared -- the 7B checkpoint is staged and the goldens are teacher-forced by `transformers`, not vLLM, which has no Tenstorrent backend at all (AGENTS.md "When vLLM has no implementation"; `.agents/oracles/transformers.md`). Issue #670. |
19941994
| `CLAIM-ENG-LOAD-DIRECT-UPLOAD` | `ENG-LOAD-DIRECT-UPLOAD` (engine-matrix, NEW row -> `ACTIVE`) | Claude Code (opus-5) | isolated worktree `.claude/worktrees/agent-a122a5ddc3546bf31`; GB10 `dgx.casa` tree `~/work/load150/src` (Vulkan `build-vk` + CUDA `build-cuda`), every GPU stage under `flock $HOME/gpu.lock`, `local-ai-worker` parked and restored | branch `row/ENG-LOAD-DIRECT-UPLOAD`, base `origin/main` `375a471e` | Issue #150. Owns ONLY: the refcounted safetensors mapping + byte counters (`include/vllm/model_executor/model_loader/safetensors_reader.h`, `src/vllm/model_executor/model_loader/safetensors_reader.cpp`), `BorrowStTensorBytes` + the `AdoptDeviceBytesAsHost` mmap branch + `OwnedTensor::mmap_src` (`include/vllm/model_executor/models/qwen3_5_weights.h`, `src/vllm/model_executor/models/qwen3_5_weights.cpp`), the qualifying call sites in `include/vllm/model_executor/models/dense_weight_loaders.h` and `src/vllm/model_executor/models/qwen3_5_dense_weights.cpp`, the upload counter in `include/vllm/model_executor/models/dense_attn_block.h`, the `VT_LOAD_STATS` phase timing in `src/vllm/entrypoints/model_loader.cpp`, NEW `tests/vllm/test_load_direct_upload.cpp` + its `tests/CMakeLists.txt` line, NEW `.agents/specs/load-direct-upload.md`, the NEW engine-matrix row + its Loading/Total rollup, the `#150` roadmap intake cell, two `docs/ENVIRONMENT.md` rows, this claim, `.agents/NOW.md`, and the `docs/STATUS.md`/`docs/BENCHMARKS.md` one-liners. **NON-COLLISION:** no new kernel, no model registry change, no CMake target change beyond one test line; every non-verbatim loader helper is untouched and the lever is same-binary A/B-able (`VT_LOAD_DIRECT_UPLOAD=0`). MUST NOT touch README, Metal/SACRED/apex/darwin, or any model/kernel source | `ACTIVE` | 2026-08-09 — mechanism test 6/6 (77) and RED under two mutations; GB10 Vulkan gates on the changed tree green (`test_vulkan_backend` 35/35·2650, `test_backend_cross_device` 11/11·132, `test_opt_paged_engine` 6/6 prompts token-exact 96/96, 0 declines, device type 3); GB10 CUDA full `ctest` 383/393 with BOTH SACRED gates PASS and all 10 failures reproduced on a clean `origin/main` build; 27B bf16 load 1.54x warm / 1.61x cold, bytes moved 100.196 -> 81.260 GiB; `local-ai-worker` restored (`--restart=always`, Up). Fresh scoped review OWED |
19951995
| `CLAIM-ENG-RELEASE-CONTAINERS-W1-W7` | `ENG-RELEASE-CONTAINERS` (`INVENTORIED`->`READY`->`ACTIVE`; spike spec + W1-W5/W7) | Claude Code (opus-5), helper role | isolated worktree `/home/mudler/_git/vllm.cpp-containers`; local Docker only -- NO GPU, NO registry push, NO publication | `row/ENG-RELEASE-CONTAINERS`, base `origin/main` `24306364`, PR [#307](https://github.com/mudler/vllm.cpp/pull/307) | Container spike spec, `docker/Dockerfile` (cpu/vulkan/cuda calling the release scripts), container matrix + checker, image validator, workflow + least-privilege guard, and the SIGTERM fix the boot gate surfaced (#312). Excludes W6 matching-hardware runtime evidence and any GHCR publication | `ACTIVE` | 2026-08-10 -- cpu lane built and gated e2e (config+layout+boot, clean SIGTERM 0.25 s, RED 137 before the fix); mutation suites 31/31 and 22/22; cuda/vulkan gated statically but never built here; nothing published |
19961996
| `CLAIM-ROCM-GDN-KERNELS` | `BACKEND-ROCM` (stays `ACTIVE` — M3 GDN kernel slice, issue #41) | pi (kimi-k3) | isolated worktree `/home/vikash/vllm.cpp-rocm-gdn-kernels`, base `origin/main` `5812b8b6`; 4x RX 7900 XTX gfx1100 discrete, ROCm 7.14, GPU jobs hold `~/gpu.lock` | `row/ROCM-GDN-KERNELS` | The M3 GDN kernel family unblocking Qwen3.5-0.8B M2 on discrete ROCm. Owns ONLY: NEW `.agents/specs/rocm-gdn-kernels.md`; NEW `src/vt/rocm/rocm_gdn.hip` (10 ops: kGdnStateGather/Scatter 77/78, kCausalConv1dFwd/Update 5/6, kRmsNormGated 9, kSigmoidGateBf16 58, kGdnPrefill/Decode 10/11, kGdnPostConv 65, kAttnQkNormRopeGate 67 — hand-translated from `src/vt/cuda/cuda_gdn.cu`/`cuda_ops.cu` donors); ADDITIVE registration entries in `src/vt/rocm/rocm_ops.hip`; ADDITIVE GDN cases + buffer helpers in `tests/vt/test_backend_cross_device.cpp`; this claim + `.agents/NOW.md`. **NON-COLLISION:** every new file is ROCm-only; the two shared-file edits are additive registration/case blocks that change no existing behavior (unregistered-op backends skip; CUDA/CPU/Vulkan paths byte-identical). Disjoint from #234 (sampling), #317 (gemma4 FP8/WMMA), #273 (near-tie docs). | `ACTIVE` | 2026-08-11 — **ALL 5 FAMILIES LANDED AS STACKED DRAFT PRs + M2 E2E COMPLETE.** #334 (spec + state I/O), #336 (conv), #341 (postconv), #343 (recurrence), #345 (norm-gate/preamble + the SupportsCompressedGdnState capability seam). Qwen3.5-0.8B runs e2e all-native on discrete gfx1100, deterministic; 'The sky is' 8/8 CPU parity; open-prompt divergence characterized as not-state-rounding, GDN-path drift analysis named open. Gates per family: cross-device green (162/162 total), focused 3/3, full-suite zero-delta vs base. NEXT: fresh review + operator gate per PR; then the MoeRouterTopK bf16-logits arm (the named MoE-path blocker) and the GDN-path divergence characterization. |

.agents/roadmap_v1.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ issue is not yet placed. Keyed record: update in place, never append.
150150
| [#567](https://github.com/mudler/vllm.cpp/issues/567) | `ROAD-V1-LTX25` | `OpNameImpl` makes a SECOND file every new `OpId` must edit; collapse the enum and its names into one derived list | bug |
151151
| [#644](https://github.com/mudler/vllm.cpp/issues/644) | `ROAD-V1-LTX25` | LTX-2.5 FULL PORT campaign. Row 0 `LTX25-PROMPT-ADALN` (spec [`ltx25-prompt-adaln.md`](specs/ltx25-prompt-adaln.md)): `use_prompt_adaln_single` defaults TRUE in BOTH references and the shipped DiT carries its 18 tensors, but `ltx2_loader.cpp:988` cleared the flag unconditionally, so every render dropped the timestep-conditioned half of the prompt K/V modulation — invisible to every shape and finiteness check | feature |
152152
| [#615](https://github.com/mudler/vllm.cpp/issues/615) | `GATE-PR-SIZE-BINARY` | `check-pr-size` fail-closes on every binary path with no exemption route, so no golden-bearing PR can merge: it blocks #431 and post-dates the golden precedent it rejects, spec [`gate-pr-size-binary.md`](specs/gate-pr-size-binary.md) | bug |
153+
| [#670](https://github.com/mudler/vllm.cpp/issues/670) | `BACKEND-TENSTORRENT-MISTRAL` | Tenstorrent: allowlist `MistralForCausalLM` and gate it on-device; goldens are `transformers`-teacher-forced because vLLM has no TT backend, spec [`tenstorrent-mistral.md`](specs/tenstorrent-mistral.md) | feature |
153154
| [#238](https://github.com/mudler/vllm.cpp/issues/238) | `SAMPLE-LOGPROB-TOKEN-IDS` | `logprobs_mode`: three of four modes are runtime-refused stubs | bug |
154155
| [#264](https://github.com/mudler/vllm.cpp/issues/264) | `SAMPLE-LOGPROB-TOKEN-IDS` | `logprob_token_ids`: generative scoring over an explicit token set is unported | feature |
155156
| [#365](https://github.com/mudler/vllm.cpp/issues/365) | `PERF-27B-DENSE-MARLIN-GATEUP` | 27B gap decomposed vs vLLM's own decode profile; dense W4A16 MLP bypassed the fused gate_up seam (spec `specs/perf-27b-dense-marlin-gateup.md`) | bug |

.agents/specs/tenstorrent-mistral.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Tenstorrent Mistral allowlist + device-aware gate — spike
22

3-
Status: **DRAFT, 2026-08-11.** Owes the RED mutation + on-card run before the
3+
Status: **ACTIVE, 2026-08-12.** The RED mutation and the on-card run are DONE;
4+
see `## Outcome`. Issue: [#670](https://github.com/mudler/vllm.cpp/issues/670).
5+
Superseded draft note, kept for provenance: owed the RED mutation + on-card run before the
46
row leaves `SPIKE`. Two environmental prerequisites (7B checkpoint + vLLM
57
oracle) are required for the e2e gate and are being staged in parallel.
68

@@ -72,7 +74,7 @@ gate lacks the device-aware branch; (3) no TT golden pair exists; (4) the
7274
|---|---|
7375
| `src/vllm/platforms/tenstorrent.cpp:53` | Add `\|\| architecture == "MistralForCausalLM"` to `supports_model_architecture` |
7476
| `tests/parity/test_mistral_paged_engine.cpp` | Mirror `test_qwen3_paged_engine.cpp:221-296`: read `run_dev`, set `tenstorrent = run_dev == kTENSTORRENT`, `device_golden = tenstorrent`, op-registration proof for the Mistral op set, device-appropriate golden selection (`our_ids_tenstorrent.npy` / `neartie_gap_mnats_tenstorrent.npy`) with the existing BOOTSTRAP dump path. |
75-
| `tests/parity/goldens/mistral_greedy_7b/` | NEW `our_ids_tenstorrent.npy` + `neartie_gap_mnats_tenstorrent.npy` (captured via `VT_DUMP_IDS=1` on Blackhole → `scripts/qwen3-neartie-gap.py` teacher-force against the vLLM oracle). |
77+
| `tests/parity/goldens/mistral_greedy_7b/` | NEW `our_ids_tenstorrent.npy` + `neartie_gap_mnats_tenstorrent.npy` (captured via `VT_DUMP_IDS=1` on Blackhole → `scripts/qwen3-neartie-gap-transformers.py` teacher-force against the `transformers` SECONDARY oracle -- vLLM has no Tenstorrent backend, so it cannot produce this at all; see AGENTS.md "When vLLM has no implementation" and [`transformers.md`](../oracles/transformers.md)). |
7678

7779
The Mistral op set for the registration proof (untied lm_head → includes
7880
`kMatmul`):
@@ -179,6 +181,27 @@ suffix so the CUDA `our_ids.npy` is not overwritten.)
179181
# on kTENSTORRENT. Commit the two new .npy goldens + record the counts here.
180182
```
181183

184+
## Now
185+
186+
`ACTIVE`. The gate PASSED on a Blackhole P150 on 2026-08-12: 16/16 prompts, 12/16
187+
strict token-exact against the oracle, 4/16 inside the near-tie band, 0
188+
forward-divergent, max gap 0.062 nats, BACKEND PROOF with 0 declines
189+
(`kMatmul` selections 256 = the untied lm_head running on device,
190+
`kPagedAttention` 8192).
191+
192+
Both former blockers are cleared. The 7B checkpoint is staged, and the goldens
193+
are teacher-forced by `transformers` rather than a vLLM oracle -- vLLM has no
194+
Tenstorrent backend, so it cannot produce this comparison at all. That is the
195+
sanctioned path under AGENTS.md "When vLLM has no implementation"; see
196+
[`transformers.md`](../oracles/transformers.md).
197+
198+
Not owed and not claimed: any speed number. This row is correctness only.
199+
200+
Next: nothing on this row. Device-residency and `ttnn::sdpa_decode` belong to
201+
the parent `BACKEND-TENSTORRENT`. Decode-graph capture is separately established
202+
as unavailable on this hardware -- trace capture refuses host readbacks -- but
203+
that spike's spec is not merged yet, so this row does not link it.
204+
182205
## Outcome (2026-08-12)
183206

184207
**Mistral-7B-v0.3 e2e gate PASSED on real Blackhole P150.**

docs/BENCHMARKS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ built on it rather than keeping the flattering one.
451451
| Vulkan vs llama.cpp Vulkan (`BENCH-VK-LLAMA`) | 25 NATIVE (+8 GDN). **27B prefill 21.5x**; decode **4.36 vs 4.35, MET** (7 clean legs). Smart barriers skip 19.8%/tok, GPU -1.09 ms; e2e 8/12, unresolved. OFF. [source](../benchmarks/demo/vulkan_27b_llamacpp.json) | `VK-C` coopmat A/B on Thor (`VT_VULKAN_COOPMAT=0` A/Bs it): **11.1x-32.9x** vs our UNTILED scalar kernel, not vs a competent GEMM. `VK-E`: llama.cpp `-DGGML_VULKAN=ON` at `237ad9b96` on dgx, same GGUF, three columns |
452452
| ROCm (`BACKEND-GATE-ROCM-VLLM` / `-SGLANG`) | **PENDING: no binding throughput number.** Runtime-green on 5 gfx archs. Gemma-3 is 48/48 exact vs two vLLM-ROCm oracles; Qwen3.5-0.8B correctness remains open | Same model, quantization, request shape and cache policy vs pinned vLLM-ROCm on one idle AMD host. Add equivalent SGLang; close correctness first ([#41](https://github.com/mudler/vllm.cpp/issues/41)) |
453453
| Tenstorrent Blackhole (`BACKEND-TENSTORRENT`) | **NOT APPLICABLE (speed).** Correctness: OPT-125m STRICT 6/6 e2e on real hardware. Qwen3-0.6B has a device-specific golden and short 4-token warm smoke (~0.28 tok/s), not a completed speed run | Full 16x16 Qwen3 gate, then device-resident tensors + `ttnn::sdpa_decode` before any performance comparison. [Spec](../.agents/specs/tenstorrent-backend.md) |
454+
| Mistral-7B-v0.3 on Tenstorrent (`BACKEND-TENSTORRENT-MISTRAL`) | **NOT APPLICABLE (speed).** Correctness only: 16/16 on a Blackhole P150, 12/16 strict, max gap 0.062 nats. No vLLM ratio exists or can, since vLLM has no TT backend | No speed number owed until device-residency lands. [Spec](../.agents/specs/tenstorrent-mistral.md) |
454455
| Prompt logprobs (`SAMPLE-PROMPT-LOGPROBS`, #223) | **NO number measured, claimed or owed.** Correctness-only, CPU. Upstream ships this path explicitly unoptimized (`gpu_model_runner.py:5622-5623`); a step where no request asks is unchanged | Floor if one is ever wanted: vLLM's own `prompt_logprobs=k`, same model and prompt |
455456
| `logprobs_mode` (`SAMPLE-LOGPROB-TOKEN-IDS`, #238) | **NO number measured, claimed or owed.** Correctness-only, CPU. One [n, vocab] device->host copy per step when a processed mode is engaged, nothing when not | Nothing to close: observation modes, not a path vLLM optimizes either |
456457
| `logprob_token_ids` scoring (#264) | **No number owed:** correctness-only, CPU-gated; inert unless set | Owed once the OpenAI field is wired |

0 commit comments

Comments
 (0)