# Stop-B end-to-end on dense Qwen3.5-27B (the improving trajectory) — 2026-06-16 Branch `feat/two-stop`. Real `gpt-5.4` agentic loop (codex/prism), Stop-A enabled, length-aware TTFT SLO (4s + L_in/8k, TPOT ≤ 50 ms), vLLM 0.11.1, H20, GPUs 2–7, `replay_time_scale=1.0`, `search.high=0.25`, `inherit_incumbent_floor=true`. Config `dash0_qwen27b_stopB_loop.json`. Companion to the 30B run (`stop-b-e2e-20260616.md`); together they cover all Stop-B behaviors. ## Trajectory (incumbent = TP4 @ 1.00 req/s/GPU) | iter | proposed by | config | per_gpu | adopted? | | --- | --- | --- | --- | --- | | 1 | baseline | TP1 | 0.123 | incumbent | | 2 | gpt-5.4 | TP2 | 0.2925 (2.4×) | ✅ new incumbent | | 3 | gpt-5.4 | TP4 | **1.0012 (8.1×)** | ✅ new incumbent | | 4 | gpt-5.4 | TP4 + chunked-prefill + mbt=16384 | 0.942 | ❌ **worse → rejected** | | 5 | gpt-5.4 | TP2 + DP2 | (loop stopped before completing) | — | (Run stopped manually after iter-4 — see "Why stopped" below. Incumbent preserved at TP4.) ## What this demonstrates (the piece the 30B run could not) - **A genuine improving climb.** `gpt-5.4` + the harness raised per-GPU throughput TP1 → TP2 → TP4 (0.123 → 0.29 → 1.00, 8.1×), each step a correctly-diagnosed real gain: TP1 is TPOT-bound, so the agent scaled tensor-parallelism, then — once topology was won — pivoted to **runtime tuning on the winning family** (chunked prefill + larger batched tokens). - **No regression.** The runtime tweak (iter-4) measured *below* plain TP4 (0.942 < 1.00), and the harness correctly **kept TP4 as the incumbent** rather than adopting the worse config — the core Stop-B guarantee, shown live. - Combined with the 30B run (search-high-saturation `validator`-authorized stop + premature-LLM-stop veto), every Stop-B behavior is now validated end-to-end: improving climb, correct bottleneck-driven proposals, no regression, deterministic stop authority, and the LLM-stop veto. ## Process wins / findings - **SIGTERM teardown fix validated in practice.** This loop was stopped with a plain SIGTERM and the engine + EngineCore workers torn down cleanly — GPUs 2–7 freed, no orphan, no leaked memory (contrast: the pre-fix runs twice leaked GPU0/1). Commit `b17b213`. - **Timeout-as-failed-request fix** (`2fcaf80`) held — no trial crashed on request timeouts this run. ## Why stopped (efficiency finding — feeds next round) The loop was stopped after iter-4 rather than run to an explicit Stop-B firing, because each TP4-family trial took ~3 h: at `scale=1.0`, infeasible high-θ probes each run to the **`early_stop_max_elapsed_s=900` cap** (`probe_elapsed_s>900`), and the primary+fallback binary search doubles the probe count. Stop-A truncates a *converged* replay but does not shortcut an *overloaded* probe that simply runs out the clock. **For a practical agentic loop at scale=1.0, lower `early_stop_max_elapsed_s` (≈300 s)** so overloaded probes die fast; consider also having an infeasible-and- overloaded probe early-stop on a fast lag/throughput signal rather than the elapsed cap. The convergence itself was already evident (iter-4's runtime tweak and the queued TP2+DP2 were not beating TP4). ## Next - Lower the elapsed cap and (optionally) re-run to capture the explicit Stop-B stop on this 27B stack. - Land the deferred items: more robust C feature for the low-reuse regime; Stop-C cross-day retune trigger; §7 baselines (SCOOT/naive/community).