vllm-ascend-performance-regression · git:20260908.fecf873 · 2026-09-08 · sha256 4062c8f609a1d2d1
vllm-ascend-performance-regression git:20260908.fecf873A
Immutable. This exact content is served forever at /api/v1/blob/4062c8f609a1d2d1.
--- name: vllm-ascend-performance-regression description: Plan, record, and analyze controlled baseline-versus-candidate vLLM Ascend serving performance experiments with isolated sessions, identical non-code configuration, alternating A/B order, warmup exclusion, variance and outlier reporting, and metric-specific regression thresholds. Use for throughput, TTFT, TPOT, ITL, acceptance-rate, startup-time, or HBM regression checks. Do not use for correctness, single-state measurement, HBM component attribution, or profiling root-cause analysis. --- # vLLM Ascend Performance Regression Wrap `vllm-ascend-benchmark` with a controlled two-state experiment. ## Workflow 1. Create independent baseline and candidate worktrees and `session-management` sessions. 2. Use the same machine allocation policy, NPU count, model and weight hash, environment, topology, Serving arguments, Benchmark arguments, dataset, request rate, and concurrency. 3. Put all non-code conditions in the experiment `shared` object. `plan` requires `machine`, `npu_devices`, `model`, `environment`, `topology` (with `tp` and `dp`), `serve_args`, `bench_args`, `dataset`, `max_concurrency`, and `request_rate`; a `shared` object without them cannot produce a parity certificate. 4. Run `scripts/performance_regression.py plan`; set `parent_run_id` in the config when the experiment is evidence for a change-validation plan. 5. Follow `schedule.json` exactly. Before each state executes, establish `remote-code-parity`, start or confirm its service, then call `vllm-ascend-benchmark`. 6. Normalize each raw Benchmark result with `normalize`, then call `record`. 7. Run `analyze` only after the schedule is complete. 8. If the result is failed or inconclusive and operator timing is needed, recommend profiling collection; do not collect heavy profiles automatically. For three measurements the alternating sequence is: ```text baseline warmup candidate warmup baseline 1 candidate 1 candidate 2 baseline 2 baseline 3 candidate 3 ``` ## Entry point `scripts/performance_regression.py` provides: - `plan`: validate that `shared` declares every parity condition, generate the alternating schedule, write a `parity-check.json` that names what it did and did not verify, and create Run Manifest v1; - `normalize`: convert one single-run or aggregated Benchmark result into the measurement contract; - `record`: accept the next normalized measurement only when its state, phase, ordinal, and inlined `shared` match the schedule; - `analyze`: consume an observational comparability certificate built from every measure-phase observation, then exclude warmups, report mean, sample deviation, coefficient of variation, outliers, relative change, and threshold verdict. `passed` requires the certificate. Read: - [Behavior contract](references/behavior.md) for config, schedule, measurement, statistics, and status semantics. - [Command recipes](references/command-recipes.md) for the full lifecycle. - [Acceptance](references/acceptance.md) before claiming a regression or pass. ## Rules - Never compare measurements whose `shared` objects differ. - Never run all baseline measurements before all candidate measurements. - Do not include warmups in statistics. - Preserve raw values even when configured to exclude detected outliers from the decision set. - Return `inconclusive` when required metrics are missing, too few decision values remain, or observed variation exceeds `max_cv`. - Use metric direction explicitly: higher is better or lower is better. - Keep experiment state under `.vaws-local/performance-regression/`.