241 lines
12 KiB
Markdown
241 lines
12 KiB
Markdown
# Static-policy oracle-gap protocol
|
|
|
|
Status: **FROZEN WITH A-OG-1 THROUGH A-OG-4 AMENDMENTS**.
|
|
|
|
Date frozen: 2026-07-13 (Asia/Singapore). Existing Phase-3 measurements were
|
|
inspected only to choose the workload pair and rate brackets. They are
|
|
exploratory calibration data, not primary observations in this protocol.
|
|
|
|
### A-OG-4 — close a majority-shifted boundary (before confirmation scores)
|
|
|
|
After all four primary frontiers and 70 scores were complete, the controller
|
|
was interrupted before the first confirmation produced a score. The partial
|
|
`P01-C10-r26-rep1` attempt contained no result, sanity file, or score and is
|
|
archived separately. This amendment is therefore blind to confirmation
|
|
outcomes.
|
|
|
|
The original confirmation schedule still runs first. Afterward, each cell's
|
|
majority-vote frontier is recomputed. If either side of the *actual* final
|
|
boundary has fewer than three trials because the provisional boundary moved,
|
|
the controller runs only enough repetitions at that existing rate to reach
|
|
three, high-to-low, on a fresh server for that config. It then recomputes the
|
|
boundary and repeats for at most three closure rounds. No new rate anchor may
|
|
be added. Failure to obtain a monotone, bracketed boundary with three trials
|
|
per side within three rounds or the 6 H20-hour cap makes the experiment
|
|
inconclusive.
|
|
|
|
This fills a stopping-rule omission: it does not change any existing score,
|
|
majority rule, phase, config, rate grid, SLO, or oracle calculation.
|
|
|
|
### A-OG-3 — freeze a per-logical-trial transport retry rule (after 62 scores)
|
|
|
|
The first attempt at `P06-C10-r1.9-rep0` reproduced the same isolated local
|
|
transport signature seen in A-OG-2: one clean request raised
|
|
`ClientOSError` 3.56 ms after admission, with HTTP status 0, no first token,
|
|
and no output. The other 343 requests produced exactly 512 tokens, the server
|
|
stayed healthy, drain took 4.00 s, and every other client invariant passed.
|
|
The controller again rejected the attempt before creating a `score.json`.
|
|
|
|
For the remainder of this experiment, an attempt may be quarantined and the
|
|
identical logical trial retried once on a fresh server only if all of the
|
|
following hold: the sole failed client invariant is `clean_failures_zero`;
|
|
exactly one clean request failed; its error is `ClientOSError`, HTTP status is
|
|
0, it produced neither a first token nor output, and it completed within 10
|
|
ms of admission; every successful request has exact output; and the server
|
|
has no crash or error. The attempt is never scored. A second invalid attempt
|
|
for the same logical key, more than one failed request, or any other error
|
|
signature is a stop condition and makes the experiment inconclusive.
|
|
|
|
This rule is independent of config, rate, and observed performance, and
|
|
supersedes the one-key wording in A-OG-2 without changing how that retry was
|
|
executed. Existing scores remain immutable. No client, grid, policy,
|
|
threshold, order, SLO, or oracle calculation changes.
|
|
|
|
### A-OG-2 — retry one transport-invalid attempt (after 49 scored trials)
|
|
|
|
The first attempt at `P06-C01-r2.2-rep0` produced one local
|
|
`ClientOSError` 3.27 ms after admission, with HTTP status 0, no first token,
|
|
and no output. The other 399 requests completed successfully, every successful
|
|
request produced exactly 512 tokens, the server stayed healthy, and all other
|
|
client invariants passed. The controller rejected the attempt before creating
|
|
a `score.json`; no TTFT/TPOT result from this attempt was used to choose the
|
|
recovery rule.
|
|
|
|
This is a measurement-transport failure, not an observed server SLO outcome.
|
|
The entire attempt is content-hashed and moved under `invalid-attempts/`, then
|
|
the identical logical trial (phase, config, rate, repetition, derived manifest,
|
|
seeds, timeline, and SLO) is run once on a fresh C01 server. All 49 existing
|
|
scores remain immutable. A second client transport failure in the retry is a
|
|
stop condition and makes the experiment inconclusive; it must not be retried
|
|
again. No grid, policy, threshold, order, or oracle calculation changes.
|
|
|
|
### A-OG-1 — extend the P06 upper bracket (after trial 33)
|
|
|
|
The controller stopped as registered after C00/P06 remained SLO-feasible at
|
|
every original and upward-extension anchor through 2.3 requests/s. At that
|
|
point 33 trials and 1.519475 H20-hours were complete, all GPU memory had been
|
|
released, and no C00/P06 infeasible upper bound existed. No oracle inference
|
|
was performed.
|
|
|
|
This amendment changes only the P06 upward-extension list from
|
|
`2.1,2.2,2.3` to `2.1,2.2,2.3,2.4,2.5,2.6,2.8,3.0`. The controller stops at
|
|
the first bracket exactly as before. Existing trials are immutable and are
|
|
reused; config order, P01 rates, SLO, timelines, repetitions, placement,
|
|
metrics, and decision threshold do not change. The resumable controller may
|
|
accept the new code/protocol fingerprint only when all immutable runtime,
|
|
client, model, manifest, config, and base-grid fields match the pre-amendment
|
|
state, and it records both fingerprints under `A-OG-1`.
|
|
|
|
## Question and decision gate
|
|
|
|
The candidate motivation is:
|
|
|
|
> A single global static batching policy leaves at least 10% end-to-end
|
|
> SLO-goodput on the table when serving temporally heterogeneous phases; a
|
|
> phase-aware runtime policy can recover that gap without changing hardware,
|
|
> model, precision, or tensor-parallel topology.
|
|
|
|
This experiment tests a necessary condition in the existing TP1 policy space
|
|
`{C00,C10,C01,C11}`. The optimistic oracle knows the phase and switches with
|
|
zero delay, zero state-transfer cost, and no prediction error. If even this
|
|
oracle cannot beat the best one-config-for-all-phases policy by 10%, an online
|
|
controller over these MNS/MBT choices cannot do so either.
|
|
|
|
The primary gate uses a conservative capacity bracket:
|
|
|
|
- `L[p,c]`: highest offered rate accepted as SLO-feasible for phase `p` and
|
|
config `c`;
|
|
- `U[p,c]`: lowest higher offered rate accepted as SLO-infeasible;
|
|
- oracle upper bound at phase-time weights `w`:
|
|
`sum_p w[p] * max_c U[p,c]`;
|
|
- best-static lower bound:
|
|
`max_c sum_p w[p] * L[p,c]`.
|
|
|
|
We scan every P01/P06 time mixture, including pure endpoints. The current
|
|
motivation is **REFUTED** if the maximum conservative ratio
|
|
`oracle_upper / static_lower - 1` is below 10%. It is **NOT ESTABLISHED** if the
|
|
bound crosses 10% but the observed point estimate does not. A positive result
|
|
requires a point-estimate gap of at least 10% and then a separately
|
|
pre-registered interleaved-trace validation; this frontier experiment alone
|
|
cannot establish a positive E2E contribution.
|
|
|
|
The conclusion is scoped to the measured MNS/MBT policy family and the chosen
|
|
strongest-conflict phase pair. It does not rule out new scheduling mechanisms,
|
|
KV-state policies, topology changes, or other workload phases.
|
|
|
|
## Fixed system boundary
|
|
|
|
| Item | Frozen value |
|
|
|---|---|
|
|
| Host | `dash0`, one run at a time on physical GPU0 |
|
|
| GPU | NVIDIA H20; no other GPU process anywhere on the host |
|
|
| Model | `/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B`, BF16 |
|
|
| Runtime | `/tmp/wjh-opprof-phase2-dash0-20260711/.venv`, vLLM `0.24.1.dev3+g668cfb7e2` |
|
|
| vLLM source | `/home/admin/cpfs/wjh/opprof-phase2-dash0-20260711/vllm-v0.24.0` |
|
|
| Topology | TP1, one server, no data/pipeline parallelism |
|
|
| Fixed mechanisms | chunked prefill on; prefix caching on |
|
|
| Client | Phase-5 timestamp/fixed-rate wrapper over the Phase-3 exact-token client |
|
|
| Seeds | workload `20260712`; trial token-domain seed derived only from phase/rate/repetition, never config |
|
|
|
|
SLO co-location results in Phase 6 showed pass-rate flips despite small
|
|
throughput deltas. Therefore unused H20s remain idle: parallel placement is not
|
|
authoritative for this experiment.
|
|
|
|
## Workloads and policies
|
|
|
|
The pair is chosen before new measurements because Phase 3 showed the strongest
|
|
opposing static preference:
|
|
|
|
- **P01:** input `U[128,512]`, output exactly 64 tokens, deterministic steady
|
|
arrivals. C10 lost 24.27% saturation throughput relative to C00.
|
|
- **P06:** 50/50 input mixture `U[128,512]`/`U[4096,8192]`, output exactly 512
|
|
tokens, deterministic bursts of eight. C10 gained 3.37% over C00.
|
|
|
|
Both reuse the immutable 32,768-row Phase-3 manifests. For every trial a
|
|
derived manifest preserves request order, lengths, outputs, and arrival class,
|
|
but applies a trial-specific token-seed offset. The same derived manifest is
|
|
used for all four configs. This prevents prefix-cache carry-over when a hot
|
|
server executes several anchors without changing the logical workload.
|
|
|
|
| Config | Effective MNS | Effective MBT | Extra flags |
|
|
|---|---:|---:|---|
|
|
| C00 | 1024 | 8192 | none |
|
|
| C10 | 64 | 8192 | `--max-num-seqs 64` |
|
|
| C01 | 1024 | 2048 | `--max-num-batched-tokens 2048` |
|
|
| C11 | 64 | 2048 | both flags |
|
|
|
|
Startup logs must confirm these values. A default drift is a stop condition.
|
|
|
|
## Load grid, order, and repetitions
|
|
|
|
Primary grids:
|
|
|
|
- P01: `{26,28,30,32,34,36}` requests/s; execution order
|
|
`32,26,36,28,34,30`.
|
|
- P06: `{1.4,1.5,1.6,1.7,1.8,1.9,2.0}` requests/s; execution order
|
|
`1.7,1.4,2.0,1.5,1.9,1.6,1.8`.
|
|
|
|
Every primary anchor runs once. For each phase/config, the highest primary
|
|
feasible anchor and its next higher primary anchor are then run two more times,
|
|
giving three trials at both sides of the boundary. If all primary anchors are
|
|
feasible, extend upward in the fixed order P01 `38,40,42` or P06
|
|
`2.1,2.2,2.3,2.4,2.5,2.6,2.8,3.0`.
|
|
If all are infeasible, extend downward in the fixed order P01 `24,22,20` or P06
|
|
`1.3,1.2,1.1`. Stop extending at the first bracket.
|
|
|
|
One primary server is launched per config in order `C11,C00,C01,C10`.
|
|
Confirmation servers are fresh and launch in reverse order
|
|
`C10,C01,C00,C11`; their boundary anchors run high-to-low. This balances
|
|
machine-time drift and makes confirmation independent of the primary server's
|
|
cache/compiler state.
|
|
|
|
Timelines:
|
|
|
|
- P01: 60 s warm-up + 60 s clean measurement; drain cap 120 s.
|
|
- P06: 60 s warm-up + 120 s clean measurement; drain cap 240 s.
|
|
- no Kineto profiling; exact greedy output with `ignore_eos`; maximum client
|
|
concurrency 256.
|
|
|
|
A trial is SLO-feasible when at least 95% of requests admitted during the clean
|
|
interval eventually finish successfully and individually satisfy both:
|
|
|
|
- TTFT <= 2 s for input <= 4,096 tokens; <= 4 s for input <= 32,768; <= 6 s
|
|
otherwise;
|
|
- TPOT <= 50 ms, computed as `(completion - first_token)/(output_tokens - 1)`.
|
|
|
|
SLO-goodput is the number of those passing clean-admission requests divided by
|
|
clean seconds. Client schedule lag must stay <=1 s and achieved clean offered
|
|
rate must be within 5% of target. Failure of either condition makes the anchor
|
|
infeasible; its admitted-only latency is not used to rescue it.
|
|
|
|
At a repeated boundary, feasibility is the majority of three trial verdicts.
|
|
All accepted anchor verdicts must be monotone in offered rate. A persistent
|
|
non-monotone result after the registered repeats is a red flag and stops the
|
|
oracle-gap inference.
|
|
|
|
## Validity and stopping rules
|
|
|
|
Before every server launch record host, GPU, driver, clocks, runtime package
|
|
versions, git/source hashes, manifest hashes, exact commands, and process
|
|
contamination. Stop on another GPU process, request/output mismatch, manifest
|
|
drift, server crash, non-finite latency, ratio outside `[0,1]`, negative
|
|
counter, or discontinuous/non-monotone accepted frontier.
|
|
|
|
The controller is detached and resumable. It kills only process groups it
|
|
created, checks zero GPU memory after every server, never overwrites a complete
|
|
trial, and writes state atomically. The hard budget is 6 H20-hours; expected
|
|
cost is 3.0--4.0 H20-hours and approximately the same wall time because runs
|
|
are serialized.
|
|
|
|
## Required report
|
|
|
|
The report includes every trial's target/achieved rate, clean cohort size,
|
|
pass count/rate, SLO-goodput, TTFT/TPOT percentiles, schedule lag, failure
|
|
reasons, accepted frontier brackets, per-phase oracle choices, best static
|
|
choice, equal-time gap, worst-mixture conservative gap, and GPU-hours.
|
|
|
|
The final statistics section ends with a data-sanity block containing `n`,
|
|
min/max, distinct-value counts, and checks for non-negative counters, ratios in
|
|
`[0,1]`, non-identical per-config results, exact output work, monotone
|
|
frontiers, and continuous rate brackets.
|