# AITuner Harness Design Contract 本文总结当前 AITuner harness 的设计语义。它不是实验流水账,也不是最终论文文字; 它的作用是把我们能 claim 的系统贡献、各模块做法、隐含假设和限制说清楚。 核心结论: ```text AITuner harness 的贡献不是“LLM 会调参”,也不是“写了一组专家 if/else 规则”。 Harness 的目标是把 black-box knob search 转成: measurement-grounded, mechanism-guided, validator-controlled experiments。 ``` 换句话说,planner 可以是 LLM、BO、bandit、deterministic heuristic 或人工选择。 Harness 负责把观测转换成可审计的机制假设,生成合法候选,并用真实测量验证或否定这些假设。 ## 核心状态机 ```mermaid flowchart LR S[State
workload, constraints, history] --> E[Evidence
SLO symptoms to mechanism signals] E --> C[CandidateSet
typed interventions] C --> V[Validator
legal, novel, covered?] V -->|run trial| M[Measurement
verdict] M --> S V -->|no justified candidate| X[Stop / report] ``` Harness 的核心循环只有五步: 1. **State**:维护 workload、SLO、engine/hardware constraints 和历史 trial measurement。 2. **Evidence**:把 probe 结果从 raw logs 转成 serving-stage symptom signals。 3. **CandidateSet**:在 mechanism space 中生成有限个 typed interventions。 4. **Validator**:检查 legality、full-config novelty、failure memory 和 coverage。 5. **Measurement**:执行被验证过的 intervention,用真实 SLO verdict 更新状态;若没有 justified candidate,则 stop 或报告 measurement/coverage gap。 这个状态机表达的是 harness 的最小设计,不依赖具体 planner。LLM、BO、bandit 或 deterministic heuristic 都只能在 `CandidateSet` 上排序或选择,不能绕过 `Validator` 直接构造 config,也不能单方面决定 stop。 ## 核心设计不变量 后续所有低层模块都服务于三个不变量: | 不变量 | 含义 | 为什么重要 | | --- | --- | --- | | Measurement-grounded | 每个状态转移都由真实 probe/SLO verdict 更新 | 防止 planner 把自然语言猜测当成事实 | | Mechanism-typed | 候选不是裸 knob vector,而是 topology/scheduler/admission/cache 等 intervention | 降低搜索维度,并让每个 trial 有可解释假设 | | Validator-controlled | candidate 和 stop 必须通过 legality、no-repeat、coverage 和 failure guards | 防止重复实验、非法配置和 premature stop | ## 从 High Level 到 Low Level 的展开 下面各节按实现层次展开: 1. Observation schema 定义 harness 能看到什么; 2. Evidence compiler 说明 symptom 如何变成机制证据; 3. Mechanism space 说明候选空间从哪里来; 4. CandidateSet 说明如何构造 intervention; 5. Planner interface 说明 LLM/BO/heuristic 的边界; 6. Validator 说明什么能执行、什么能停止。 每一层都区分两件事:当前 prototype 的具体做法,以及这些做法的假设和限制。 ## 详细模块语义 ### 1. Observation Schema Harness 先把一次 trial/probe 的结果转成结构化 observation: ```text O_t = { workload summary, SLO rules, effective engine config, best feasible probe, limiting probe, failed_reason_counts, early_stop_reason, pass_rate, request_rate_per_gpu, launch / OOM status } ``` 其中 `failed_reason_counts` 的定义是 request-level SLO violation reason 的 multiset 计数: ```text ttft_ms>threshold request 的 TTFT 超 SLO tpot_ms>threshold request 的 TPOT 超 SLO arrival_lag_s>limit synthetic arrivals 已经追不上 probe_elapsed_s>limit probe 总耗时超过上限 slo_pass_rate_unrecoverable 已失败过多,数学上无法达到 target pass rate request_failed / timeout / completion mismatch 请求级失败 ``` 重要限制: - 一个 request 可以同时贡献 `ttft_ms>...` 和 `tpot_ms>...`; - `failed_reason_counts` 是 symptom evidence,不是 root-cause ground truth; - queueing/admission 主要来自 probe 调度层 early stop,而不是单个 request latency 的精确分解。 因此文档和论文里必须避免说“failed count 证明 root cause 是 TTFT/TPOT”。更准确的说法是: ```text failed_reason_counts gives SLO violation symptoms. Harness infers serving-stage hypotheses from these symptoms. ``` ### 2. Evidence Compiler / Bottleneck Hypotheses 当前 prototype 做两层聚合。 第一层是单个 probe 的 active bottleneck。当前实现用 count-majority: ```text ttft_count = sum(count(reason startswith "ttft")) tpot_count = sum(count(reason startswith "tpot")) other_request_failed_count = non-TTFT, non-TPOT request failures if ttft_count >= max(tpot_count, other_request_failed_count): active = ttft_prefill elif tpot_count >= max(ttft_count, other_request_failed_count): active = decode_tpot else: active = admission_or_queueing ``` 这一步是 heuristic。它的语义基础是 TTFT/TPOT/arrival-lag 对应不同 serving stages, 但 “majority label = root cause” 并不成立。 第二层是跨 trial 的 ranked hypotheses。它把以下证据合成 score: - workload prior:decode-only + TPOT SLO 更支持 decode hypothesis;长 prompt tail 更支持 prefill hypothesis; - latest probe active label; - historical probe evidence; - `failed_reason_counts` 中 TTFT/TPOT/queueing symptom ratio; - launch failure / OOM。 更稳健的目标设计应该把第一层 hard label 改成 soft evidence vector: ```text e_prefill = normalized count of TTFT symptoms e_decode = normalized count of TPOT symptoms e_admission = normalized count of arrival lag / elapsed / unrecoverable / request failures e_memory = launch or OOM evidence ``` Candidate generator 应该基于 evidence distribution 生成 top mechanism probes,而不是只相信一个 hard dominant bottleneck。当前 prototype 的 hard label 是工程近似,不是最终 contribution。 ### 3. Mechanism Space Harness 不在 raw knob Cartesian product 中盲搜: ```text raw space = {TP, DP, EP, GMU, MNS, MBT, chunked-prefill, ...} ``` 它先把 knobs 映射到 serving pipeline 上的可控 mechanism: | Mechanism family | Example knobs | 机制含义 | 典型 evidence | | --- | --- | --- | --- | | Topology / resource partition | TP, DP, EP, visible GPUs | 改变 compute/memory 分布、replica 数、per-GPU efficiency | TTFT/TPOT pressure, topology frontier 未覆盖 | | Prefill scheduler | chunked prefill, MBT | 改变 prefill quantum 和 head-of-line blocking | TTFT symptoms, long prompt tail, low prefix reuse | | Admission / concurrency | MNS | 改变活跃 sequence 数和 batch/admission pressure | arrival lag, pass-rate unrecoverable, concurrency underuse | | KV/cache headroom | GMU, block/cache knobs | 改变 KV cache blocks 和 memory feasibility | cache pressure, launch/memory, topology settled 后仍有 SLO pressure | | Launch/memory feasibility | env, memory-affecting flags | 确认 engine 是否能启动、是否 OOM | launch failure, OOM | | Frontier delta transfer | measured runtime delta applied to other Pareto anchors | 将已测 runtime 改动投影到未测 frontier anchor | 同 topology 上 runtime delta 为正,且存在其他 Pareto anchor | 这些 family 的依据不是某个 case 的 winning config,而是 LLM serving pipeline: ```text arrival/admission -> prefill -> decode -> memory/launch feasibility ``` 每个 family 必须满足三条约束: 1. 它对应一个可解释的 serving mechanism; 2. 它只生成 engine schema 和 hardware constraints 下合法的 candidate; 3. 它的 confirm/reject condition 由真实 measurement 决定。 限制: - Mechanism family 是 domain-specific,不是 engine-agnostic magic; - vLLM/SGLang 等 engine 的 knob 名称不同,需要 adapter 把 engine knobs 映射到同一 mechanism vocabulary; - family 本身有系统依据,但当前 score 常数和部分 gate 仍是 heuristic。 ### 4. CandidateSet / Intervention Generation Candidate 不是“一个 patch”这么简单。一个合法 candidate 应包含: ```text candidate = { mechanism_family, config_patch, hypothesis, expected_effects, confirm_condition, reject_condition, effective_full_config_signature } ``` 当前 prototype 的候选顺序大致是: 1. topology candidates; 2. frontier-delta projection candidates; 3. runtime candidates。 其中 runtime candidates 又包含 prefill scheduler、MBT、MNS、GMU 等 family。 设计假设: - topology/resource partition 通常改变较大的 capacity frontier; - runtime knobs 通常是同一 topology 下的 local refinement; - 当 topology frontier 未覆盖时,过早 runtime hill-climbing 可能把搜索困在坏 topology; - 当一个 runtime delta 已在某个 topology 上测得正收益时,把这个 delta 投影到其他 Pareto anchor 是比完整 factorial grid 更便宜的 interaction test。 限制: - `topology-before-runtime` 是强 prior,不是定理;需要 ablation; - frontier delta transfer 依赖已测 history,如果 history 太少就不能工作; - 当前 prototype 中一些 target step 和 score 常数仍然是人工 heuristic。 ### 5. Planner Interface Planner 的职责应该被限制为: ```text rank/select candidate from CandidateSet explain why this candidate is worth the next trial ``` Planner 不应该: - 构造 schema 外的 knob; - 绕过 topology / memory constraints; - 重复已经测试过的 effective full config; - 单方面决定 stop; - 把自然语言猜测当成 measurement verdict。 这也是 no-LLM harness 能工作的原因:只要 `CandidateSet` 和 `Validator` 足够有信息, 一个 deterministic planner 也可以完成 tuning。LLM 的价值在于组合 evidence、解释 tradeoff、 在候选较多时排序,而不是提供 tuning correctness 的唯一来源。 ### 6. Validator / Stop Authority Validator 是 harness 防止 prompt engineering 化的关键。它负责: - canonicalize effective full config; - 拒绝 no-op 或 repeat; - 检查 legal topology / visible GPU / tunable schema; - 记录 failure memory; - 判断 measurement ceiling,例如 `search.high` 是否不足; - 在 candidate coverage 不足时禁止 premature stop; - 只有在覆盖和 measurement guards 都满足时授权 stop。 重要设计修正: ```text no-repeat must use normalized effective full-config signature, not patch signature. ``` 因为 runtime-only patch 在 materialization 时会继承 incumbent topology。 如果只看 patch signature,可能把 `{"gmu": 0.9}` 误认为新 config, 但真实执行时它可能 materialize 成已测过的 full config。 限制: - Validator 只能保证相对于声明的 grammar/operator set 的 coverage; - 它不能证明全 raw knob space 没有更优点; - measurement ceiling 不足时应报告并请求人类确认,而不是静默合成 arrivals 或重复窗口。 ## 精确贡献表述 我们应该 claim: ```text AITuner introduces a planner-agnostic harness that converts LLM serving configuration tuning from black-box knob search into typed, measurement-grounded counterfactual experiments over serving mechanisms. ``` 可拆成三点贡献: 1. **Serving-stage evidence compiler** 将 workload profile、SLO violation symptoms、probe early stop 和 launch failure 转换为 prefill/decode/admission/memory/launch 的机制证据,而不是只给 planner 一个 scalar score。 2. **Typed mechanism action space** 将 raw knobs 组织为 topology、prefill scheduler、admission/concurrency、cache headroom、 frontier transfer 等 intervention families,使搜索发生在 mechanism space 而不是任意 knob vector space。 3. **Validator-controlled experimental loop** 用 full-config signature、constraints、failure memory、coverage 和 measurement guards 控制 proposal 与 stop,使 LLM/BO/heuristic 都只能在合法、可审计的 candidate set 上工作。 我们不应该 claim: - bottleneck classifier 永远正确; - `failed_reason_counts` 是 root cause label; - 当前 heuristic score 常数有理论最优性; - harness 覆盖完整 raw knob space; - stop 证明全局最优; - 某个 case 的 winning config 被系统“证明”出来。 ## 必须补的证据 为了证明贡献不是 rule accumulation,后续实验必须 ablate family 和 authority,而不是只报最终性能: | Ablation | 证明什么 | | --- | --- | | classifier off / shuffled evidence | evidence attribution 是否真的影响正确方向 | | mechanism space off,改用 raw random/BO | mechanism action space 是否压缩搜索并提升收敛 | | topology-before-runtime off | 大 frontier intervention prior 是否必要 | | frontier-delta projection off | cross-topology runtime transfer 是否解决 bad-start/local trap | | validator off / patch signature only | full-config validator 是否避免重复和 false progress | | no-LLM deterministic planner | harness 是否是 planner-agnostic substrate | | weak planner + harness vs strong planner naive | harness 是否能补偿 planner 能力差距 | 最终论文表达应保持这个边界: ```text Harness makes the search more structured, auditable, and measurement-efficient. It does not replace measurement, does not prove global optimality, and does not turn symptom labels into perfect causal diagnosis. ```