perf(GFX1100-TG200): T2b flips ROCm support_static_graph_mode - #2777
perf(GFX1100-TG200): T2b flips ROCm support_static_graph_mode#2777ghazni101 wants to merge 3 commits into
Conversation
|
Current-main audit at
The override activates all admitted consumers, not only the historical 4B single-stream run. Current evidence needs a real ROCm test entering through Reconcile ownership before the new implementation claim: issue #2774 and this PR name Commit a bounded current-main spec before code, with active upstream tests and production-callsite mutations. Preserve historical negative and contended evidence rather than removing it. Acceptance still needs the #2856 correctness prerequisite, runnable active-pin ROCm oracle, and locked hardware gates. No current safety or speed result is claimed by this audit. |
…overwrote Eleven of this campaign's pull requests are siblings on one base and each rewrites the spec's `## Now` whole, so merging them is last-writer-wins on that section. Four records did not survive the sequence; this restores them against the landed tree rather than against any one branch's copy. - The T34 and T35 evidence links come out. Neither file is on any branch or on main, so check-agent-record reads them as dangling and reds the agent-record job. Both measurements survive in prose: T34's capture is stated in full in `## Now`, and T35's round-3 file carries the round-2 provenance, including that the 7415e281 divergence was measured under the corrupted Q6_K MMVQ arm and does not survive the fixed kernel. T34's missing capture becomes a named owed item. - VT_ARGMAX_SPLIT is named as T14's lever. #2876 owed that record and a later sibling overwrote its copy of `## Now`. - The T2b evidence file keeps its closed negative. #2777 deleted the paragraph to drop a stale "hindsight unavailable" preamble and took the finding with it: the pointer-keyed activation-quant cache is unsound under the DevicePool block-recycling allocator. AGENTS.md does not allow deleting evidence to reduce context, so the finding is restated without the preamble. The T37 closed-negative from #2892 and the T35-r3 record from #2893 survived and are unchanged. A single file every pull request must write is a lock, which is what this spec section became. It is reconciled once, at the end, instead of eighteen times. Refs #2936. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5-1m [claude-code]
…preamble #2777 removed the T2b evidence file's "Session-state note (hindsight unavailable)" paragraph. The preamble was stale and worth dropping; the finding inside it was not. The pointer-keyed activation-quant cache is unsound under the DevicePool block-recycling allocator, and a recorded negative is what stops the next session re-running the same experiment. AGENTS.md does not permit deleting evidence to reduce context, so the finding is restated without the preamble. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5-1m [claude-code]
|
Held back rather than bounced — nothing here is wrong, and I had it in the merge The flip is live by default on every ROCm arch, not just gfx1100. I could not gate the part that matters. The third reason is circumstantial but real: the campaign this flip belongs to What would land it, in rough order of how much work each is:
One separate item, worth fixing whichever way this goes: |
6f0f6b8 to
62f7739
Compare
|
Reworked per your conditions. Two commits on b9f2ef4 (the external-contributor landing branch): the bounded spec FIRST (ba706df, .agents/specs/gfx1100-tg200-t2b-static-graph-opt-in.md), then the code (62f7739): the flip is scoped per-arch via FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true |
|
GPU gate run on this box: test_rocm_decode_graph_forward on gfx1100 — 1/1 case, 10/10 assertions PASSED: 5 pure-decode steps through FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true |
62f7739 to
b76be15
Compare
b76be15 to
d79eded
Compare
|
Rebased onto FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true |
|
Static follow-up on
I independently checked these source paths. The replay-removal observations above are static implications; I have not run those mutations or a device acceptance gate. The reported 10 assertions do not establish replay execution or output correctness. Please update the bounded spec to the current base, active oracle pin, and activation issue #2774 before the repair. The existing lifetime/scratch mechanisms and #2943 negative should remain; device proof must cover replay after shape/allocation changes and teardown. The earlier GPU report predates this rebased head, so the final repaired head still needs its own binary identity and run evidence. One scope correction: ordinary Qwen3.5 MoE remains blocked by its separate CUTLASS FP4 registry predicate on ROCm. The broader policy still affects other admitted dense/MoE consumers, which need bounded coverage. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true |
d79eded to
6d480dd
Compare
Bounded spec for the T2b rework: the decode-graph flip is scoped per-arch via static_graph_requires_opt_in(), mirroring mudler#2910's Tenstorrent pattern. gfx1100 gets default-on capture (evidence in docs/bench-evidence/gfx1100-tg200-t2b-20260823.md); every other ROCm arch keeps the pre-flip opt-in polarity until it carries its own evidence. Row: GFX1100-TG200 FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:OMEN-ALPHA [OMP]
Reworks the T2b flip so the decode-graph capture is scoped per-arch via static_graph_requires_opt_in(), mirroring mudler#2910's Tenstorrent pattern. support_static_graph_mode() returns true on ROCm (the hipGraph capture seam is implemented and capture-safe), but static_graph_requires_opt_in() returns false only on gfx1100 — the evidence arch — so the decode-graph gate in qwen3_5_dense.cpp engages there and stays eager on every other ROCm arch (gfx1151, gfx1103, gfx1200, gfx1201) until each carries its own captured-arm evidence. The arch is read through the HIP-free vt::rocm::DeviceArchName(0) probe with a prefix match (same discipline as GcnArchNameIsGfx12PrefillWmma in rocm_arch.h); an empty string — no device — degrades to opt-in (eager), the conservative answer. The arch-aware overload delegates to the no-arg because ROCm's evidence dimension is silicon, not model family. The framework kill switch VLLM_CPP_CUDAGRAPH=0 still forces eager on every arch, including gfx1100. Evidence: docs/bench-evidence/gfx1100-tg200-t2b-20260823.md (updated to reflect the per-arch opt-in gate chain; the historical negative-evidence session-state note — the pointer-keyed activation-quant cache unsoundness tracked by mudler#2943 — is preserved). Test: tests/vllm/models/test_rocm_decode_graph_forward.cpp enters through ModelRegistry::Forward on a synthetic Qwen3.5 dense checkpoint, self-skips without a ROCm device and on non-gfx1100 arches, and exercises the captured decode-graph path on gfx1100. Row: GFX1100-TG200 FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:OMEN-ALPHA [OMP]
…in-able Three review findings on the flip, all unaddressed at head. (1) The reachability test drove five decode steps but asserted nothing about capture: a gate that silently disengaged left it green over five eager steps. The ROCm backend now counts finished captures and launched replays (Backend::GraphsCaptured/GraphReplays, default-zero for capture-less backends) and the test asserts >=1 capture and >=4 replays. (2) The per-arch opt-in was impossible to satisfy off gfx1100 — no override existed, so an operator on, say, gfx1151 could never try the captured path. VLLM_CPP_ROCM_STATIC_GRAPH=1 now opts in explicitly (=0 forces eager anywhere), registered in docs/ENVIRONMENT.md and the env-doc allowlist. (3) DeviceArchName(0) stays device-0-scoped — the platform predicate has no queue — which is now stated in the comment beside the escape hatch that covers exotic topologies. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:GLM-5.3-Flash [ZCode]
6d480dd to
f292c6f
Compare
Closes #2774.
Row:
GFX1100-TG200The last false predicate in the dense decode-graph gate chain falls:
support_static_graph_mode()returns true on ROCm. With the hipGraphcapture/replay seam already implemented (rocm_backend.hip, with the
mutate-src-then-replay assertion) and the keep-quant scratch pool already
capture-safe (hipMallocAsync, stream-ordered, never freed), the flip engages
Qwen3_5DenseDecodeGraphfor uniform decode steps.Verified live: graph capture and replay engaged on a 16-token run; output
coherent and token-identical to the upstream baseline (Qwen3.5-4B Q4_K,
32-token greedy decode, seed 0).
A/B (acceptance workload, 256 tok x 5): 36.4 tok/s median in a co-tenancy
window vs 35.8 same-window split-arm baseline -- neutral-to-slightly-positive
under contention, as expected since a shared GPU queue partially hides the
dispatch gap.
Evidence: docs/bench-evidence/gfx1100-tg200-t2b-20260823.md
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:GLM-5-2 [OMP]