# Knob conditional effect 证据整理

本文整理 2026-07-01 到 2026-07-03 在 `dash1` 上跑的 interaction screening 结果，用来支持一个具体论点：

> Serving tuning knobs 不是彼此独立的。一个 knob 的收益方向和收益大小依赖当前 topology、admission/concurrency 和 scheduler context，因此不能假设“逐个 knob tune 到最好”一定可靠。

## Presentation review: 应该怎么展示

原来的 delta summary 能证明 `Delta_knob(context)` 不同，但它不够直观，因为它没有展示 tuning algorithm 会怎么失败。更适合作为 paper 主图的是：

1. **主图：OAT path counterexample**  
   在同一个 measured response surface 上画两条 one-knob-at-a-time 路径。读者能直接看到：同一个起点、不同单维 tuning 顺序，会停在不同点，而且其中一个是 coordinate-wise local optimum。
2. **补充图：interaction residual**  
   用 additive model residual 形式说明：如果 TP 和 MNS 是独立贡献，残差应接近 0；实际残差有结构性正负块。
3. **补充图：delta/context summary**  
   保留为形式化证据，但不作为主图，因为它不能直接展示 OAT 的路径依赖。

因此本文推荐把 `knob-oat-counterexample-c1-qwen30b` 作为主文图，把 C3 crossed lines 和 residual/delta 放在 appendix 或机制分析图中。

## 图 1：OAT path counterexample

![OAT counterexample](figures/knob-oat-counterexample-c1-qwen30b.png)

数据来源：

- `interaction-mixed-qwen30b-tp-mns-surface-high1-dash1-d8899c5-20260701T095858Z`
- `interaction-mixed-qwen30b-tp4-mns-nocap-qps20-dash1-d8899c5-20260701T161900Z`

这张图直接展示为什么“逐个维度独立 tune”不可靠。我们从同一个起点 `TP=1, MNS=8` 出发：

| Strategy | Path | Final req/s/GPU |
|---|---|---:|
| tune MNS first, then TP | `TP1,MNS8 -> TP1,MNS16 -> TP4,MNS16` | `2.44` |
| tune TP first, then MNS | `TP1,MNS8 -> TP2,MNS8 -> TP2,MNS32` | `3.28` |

`TP4,MNS16` 是一个 measured coordinate-wise local optimum：

- 固定 `TP=4` 调 `MNS`：`MNS16/32/64` 都是 `2.44`，没有 strictly improving move；
- 固定 `MNS=16` 调 `TP`：`TP4=2.44` 高于 `TP1=2.35` 和 `TP2=2.27`；
- 但全局最好点 `TP2,MNS32=3.28` 比它高 `25.6%`。

这比单纯说 “MNS 的 delta 依赖 TP” 更有力：它展示了一个实际 tuning path 如何被独立维度假设带到次优点。要从 `TP4,MNS16` 逃到 `TP2,MNS32`，tuner 必须允许非独立的 context-aware move，或者至少维护 frontier/plateau 上的反事实 anchor；单维 greedy OAT 不够。

这里的结论不是“所有 workload 都有强 interaction”，而是更严格地说：

1. 在真实 case 中确实存在明显 conditional effect；
2. 这个现象足以否定 naive one-knob-at-a-time/OAT 作为通用 tuning strategy；
3. harness 需要维护 mechanism-aware context，而不是把 knobs 当作独立维度。

## Formal definition

记某个 engine config 的 SLO-feasible objective 为：

```text
f(config) = max request_rate_per_gpu subject to pass_rate >= target
```

对 knob `x` 的一个 intervention `x_low -> x_high`，在 context `c` 下的效果定义为：

```text
Delta_x(c) = f(x_high, c) - f(x_low, c)
```

如果存在两个 context `c1, c2`，使得：

```text
Delta_x(c1) != Delta_x(c2)
```

则说明 knob `x` 存在 conditional effect。若符号也变化，比如一个 context 下提升、另一个 context 下降，则是更强的 interaction。

## 图 2：C1 Qwen30B mixed workload surface

![C1 Qwen30B surface](figures/knob-conditional-c1-qwen30b-surface.png)

数据来源：

- `interaction-mixed-qwen30b-tp-mns-surface-high1-dash1-d8899c5-20260701T095858Z`
- `interaction-mixed-qwen30b-tp4-mns-nocap-qps20-dash1-d8899c5-20260701T161900Z`

关键观察：

| Context | `MNS=8 -> 32` 的 req/s/GPU 变化 |
|---|---:|
| `TP=1` | `2.10 -> 2.28`, `+8.7%` |
| `TP=2` | `2.28 -> 3.28`, `+44.3%` |
| `TP=4` | `1.28 -> 2.44`, `+90.3%` |

这说明 `max-num-seqs` 的收益强烈依赖 `tensor-parallel-size`。同一个 `MNS` 调整在 `TP=1` 下只是小幅提升，在 `TP=2/4` 下变成决定性能上限的关键 knob。

反过来看，`TP` 的收益也依赖 `MNS`：

- 在 `MNS=8` 时，`TP=4` 是坏点，只有 `1.28 req/s/GPU`；
- 在 `MNS=32` 时，`TP=2` 变成全局最优附近，达到 `3.28 req/s/GPU`。

因此，如果 tuner 固定 `MNS=8` 去判断 topology，会错误低估 `TP=4`，也会无法看到 `TP=2 + MNS=32` 的最佳区域；如果固定 `TP=1` 去调 `MNS`，又会低估更高 TP 下 concurrency knob 的价值。这就是 OAT order sensitivity。

## 图 3：C1 additive residual

![C1 interaction residual](figures/knob-interaction-residual-c1-qwen30b.png)

如果 `TP` 和 `MNS` 可以独立建模，一个简单 additive model：

```text
f(TP, MNS) ~= base + effect(TP) + effect(MNS)
```

应该留下接近 0 的 residual。实际 residual 最大达到约 `0.46 req/s/GPU`，而且呈现结构性模式：

- `TP2,MNS32/64` 是正 residual，说明这个组合比独立效应相加更好；
- `TP2,MNS16` 和 `TP4,MNS8` 是强负 residual，说明某些组合显著低于独立假设预测。

这张图适合放在机制/appendix 中，用数学形式支持“不是独立 knob effect”。

## 图 4：C3 Qwen235B decode workload

![C3 Qwen235B decode lines](figures/knob-conditional-c3-qwen235b-decode-lines.png)

数据来源：

- `interaction-qwen235b-decode-c3-topo-mns-mbt-fixed-dash1-d8899c5-20260703T022514Z`

完整 8 点结果：

| Config | req/s/GPU | pass rate |
|---|---:|---:|
| `TP4 DP2 EP8 MNS64 MBT256` | `0.0535` | `1.0000` |
| `TP4 DP2 EP8 MNS64 MBT384` | `0.0535` | `0.9922` |
| `TP4 DP2 EP8 MNS128 MBT256` | `0.0590` | `0.9929` |
| `TP4 DP2 EP8 MNS128 MBT384` | `0.0590` | `0.9929` |
| `TP2 DP4 EP8 MNS64 MBT256` | `0.0590` | `0.9753` |
| `TP2 DP4 EP8 MNS64 MBT384` | `0.0535` | `0.9961` |
| `TP2 DP4 EP8 MNS128 MBT256` | `0.0590` | `0.9788` |
| `TP2 DP4 EP8 MNS128 MBT384` | `0.0590` | `0.9823` |

关键观察：

- `MBT 256 -> 384` 在 `TP4/DP2 + MNS64` 下没有收益；
- 同一个 `MBT 256 -> 384` 在 `TP2/DP4 + MNS64` 下反而下降约 `9.2%`；
- `MNS 64 -> 128` 在 `TP4/DP2` 下提升约 `10.1%`；
- 同一个 `MNS 64 -> 128` 在 `TP2/DP4 + MBT256` 下没有收益，但在 `TP2/DP4 + MBT384` 下恢复约 `10.1%`。

这说明 runtime knobs 的作用不是单调独立的。`MBT` 是否有害取决于 topology 和 `MNS`；`MNS` 是否有用也取决于 topology 和 `MBT`。

## 图 5：Delta 形式的直接证据

![Delta summary](figures/knob-conditional-delta-summary.png)

这张图把上面的论证直接转成 `Delta_x(context)`：

- C1 中，同样是 `MNS 8 -> 32`，收益从 `+8.7%` 到 `+90.3%` 不等；
- C3 中，同样是 `MBT 256 -> 384`，有的 context 是 `0%`，有的 context 是 `-9.2%`；
- C3 中，同样是 `MNS 64 -> 128`，有的 context 是 `0%`，有的 context 是 `+10.1%`。

这就是 conditional effect 的直接测量证据。

## C2 是边界案例，不是反例

C2 Qwen235B prefill tight SLO 的结果更弱：

- `TP4` family: `0.1067~0.1175 req/s/GPU`；
- `TP8` family: `0.1727 req/s/GPU`；
- 在测过的 `MNS={64,128}`、`MBT={8192,16384}` 网格里 runtime knobs 基本平。

这个 case 说明并不是每个 workload 都会在 runtime knobs 上表现出强 interaction。它的主要结论是 topology 主导：`TP8` 相比 `TP4` 约 `+47% req/s/GPU`。

这对 paper framing 反而有用：我们的 claim 不应该是“所有 knobs 总是强耦合”，而应该是：

> Tuning system 不能预设 knobs 独立；它必须通过 measured response 判断当前 case 是 topology-dominant、runtime-interaction-dominant，还是 flat/noisy。Harness 的作用是把这些 measured evidence 维护成 search context。

## 对 harness 设计的含义

这些图支持我们当前 framing：

1. Harness 不应该只做单 knob local search。它需要保留 topology/runtime context，并允许 joint or projected interventions。
2. Candidate generation 不能只说“把某个 knob 调大/调小”，而要说明这个 intervention 所依赖的 context。
3. Validator 不能只比较 raw request rate；必须比较 SLO-feasible `request_rate_per_gpu`，并保存 negative evidence。
4. LLM/planner 的价值不应被描述成“猜一个更好的 knob 值”，而是基于 harness 提供的 measured context 去提出 plausible joint moves。

## 复现图

```bash
python3 scripts/plot_knob_conditional_effects.py
```

输出：

- `docs/harness-ablation/figures/knob-oat-counterexample-c1-qwen30b.png`
- `docs/harness-ablation/figures/knob-interaction-residual-c1-qwen30b.png`
- `docs/harness-ablation/figures/knob-conditional-c1-qwen30b-surface.png`
- `docs/harness-ablation/figures/knob-conditional-c3-qwen235b-decode-lines.png`
- `docs/harness-ablation/figures/knob-conditional-delta-summary.png`
