Files
aituner/docs/aituner-maas-collab-overview-20260703.md

222 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AITunerMaaS Serving Config 自动调优 — 合作概述
> 面向:配置调优团队
> 目的:介绍 AITuner 是什么、为什么它比纯 LLM loop 可靠、以及我们建议的 pilot 合作方式。
> 日期2026-07-03
## 一句话总结
AITuner 把 LLM serving engine 的 config tuning 从"人工试错 / LLM 黑盒瞎猜"变成
**基于真实测量、按 bottleneck 机制分类、由 validator 把关的自动实验循环**
我们希望在贵团队的真实环境上跑通 1-2 个 case验证它能否成为你们的日常工具。
## 1. 问题背景
MaaS 场景下 tuning 的现状:
- 平台上有**数百个模型**,模型本身还在持续迭代;
- 硬件平台在更新,同一个模型在不同硬件上的最优 config 不同;
- 每个 (model, hardware, workload, SLO) 组合都是一个独立的 tuning case
- 人力远远覆盖不了所有 case大量 case 只能用默认或粗调的 config 上线,
留下吞吐和成本上的浪费。
AITuner 的目标:**自动化 tune 这些没人力覆盖的 case**,输出满足 SLO 的
engine config并附带可审计的实验证据。
## 2. 为什么"纯 LLM 自动调参"不够
直接让 LLM 在循环里提 config、跑一轮、再提 config实践中有两个硬伤
**(a) 缺 domain-specific 知识和内部 context。**
- LLM 会误读 engine knob 的语义,典型例子是 vLLM 的 DPLLM 常把它当成
"免费加吞吐"的开关,忽略它改变的是 replica 数和 per-GPU 效率,
在 per-GPU 指标下盲目 scale-out 反而变差;
- 内部平台(如 dash有大量内部环境变量和 launch 约束LLM 完全没有这部分
context提出的 config 经常直接 launch failure 或 OOM。
**(b) 缺 bottleneck breakdown不会像专家一样理解系统。**
- LLM 拿到的往往只是"pass rate 低了"这样的 scalar 结果,
它无法区分瓶颈在 prefill、decode、admission/queueing 还是 memory
- 没有瓶颈归因proposal 就退化成 knob space 里的随机游走:
重复已试过的配置、在错误的 knob family 上反复消耗 GPU trial。
AITuner 的设计就是补上这两块:把系统知识和瓶颈分析放进一个 **harness**
LLM 只负责在 harness 给出的合法候选里做排序和取舍。
## 3. AITuner 是怎么工作的(概述)
一句话AITuner 是一个自动实验循环——对目标 case 做真实压测,
从结果做瓶颈归因,按系统机制生成下一个 config 候选,
经 validator 把关后执行下一轮测量,直到证据表明继续实验不再值得。
```text
真实压测 ──> 瓶颈归因 ──> 机制化候选 ──> Validator 把关 ──> 下一轮压测 / 停止
```
对使用方来说,需要知道的只有四点:
1. **每一步决策都来自真实测量**,不是 LLM 的自然语言猜测——每轮以
SLO verdict、pass rate、`request_rate_per_gpu`、launch/OOM 状态为准;
2. **像专家一样先归因再动手**:把 SLO 违约症状聚合成 prefill / decode /
admission / memory 瓶颈假设,候选 config 只从对应的机制
拓扑切分、prefill 调度、并发准入、KV cache 余量等)中生成,
不在 knob 空间里盲搜;
3. **Validator 挡住不合法和重复的实验**engine 参数合法性、硬件/拓扑约束、
内部平台 launch 约束、已测配置查重、失败记忆——包括 LLM 在内的任何
proposal 来源都必须过这一关;
4. **知道什么时候该停**:验证充分或触及测量上限时确定性停止,
不多烧 GPU也不会静默宣称"已经最优"。
架构与模块细节见 `docs/aituner-harness-design-contract.md`
pilot 阶段可按需深入,这里不展开。
## 4. 关键性质:不被单一 LLM 绑死
Harness 是 **planner-agnostic**LLM、确定性 heuristic 甚至 BO/bandit
都只是在同一个 CandidateSet 上做排序。目前已经验证:
- **No-LLM 模式**:在没有任何 LLM endpoint 的情况下harness 可以作为
deterministic planner 完成整轮 tuningbaseline → 假设 → 候选 → 打分 →
proposal/stop已有 Qwen30B 真实轨迹;
- 高分确定性候选存在时根本不调 LLMLLM 只在候选需要复杂 tradeoff
排序时介入。
这意味着**换 LLM 供应商的风险是可控的**tuning 的正确性来自
harness 的证据编译和 validator而不是某个特定模型的能力。
## 5. 已有证据内部实验3 个 case
对照组均为"纯 LLM loop"(同一 LLM、同一压测框架只关闭 harness
指标为满足 SLO 的 `request_rate_per_gpu`(每 GPU 可承载请求率,越高越好)。
### Case 1qwen27b chat 0-8kdash0 内部 vLLMH20
真实 trace 窗口回放(`chat_w20260311_1000`SLO95% pass rate、
TTFT 2s/4s/6s 分档、TPOT ≤ 50ms。
详见 `docs/qwen27b-chat-0-8k-current-config-fig18-20260506.md`
| | 纯 LLM loop | AITuner |
| --- | --- | --- |
| 最终最优 config | TP2/DP1**0.2025** req/s/GPU | TP4**0.4429** req/s/GPU**约 2.2x** |
| baseline起点相同 | TP1/DP10.0350 | TP1/DP10.0350 |
| 搜索路径 | 第 2/3 轮先选 DP2、DP4per-GPU 吞吐反而回落;第 4 轮才到 TP2 | 瓶颈归因判定 TTFT/prefill 主导,第 2 轮直接 TP20.2142),第 4 轮 TP40.4429 |
| tuning 开销 | 跑满 12 轮 GPU trial其中第 5-12 轮全部是无可行点的 runtime probe纯浪费 | 第 8 轮确定性 stop实际执行 4 次 GPU trial全程约 2.5 小时 |
两个值得注意的点:
- 纯 LLM loop 的前几轮正是第 2 节所说的 DP 误读实例——LLM 把 DP scale-out
当成免费吞吐per-GPU 效率被稀释,绕了 3 轮弯路;
- 单轮真实 trialengine launch + 多个二分 probe约 1 小时,跑满 12 轮
意味着 10 小时以上的 GPU 占用AITuner 在拿到约 2.2x 的 config 的同时,
把整个 tuning 过程压到约 2.5 小时。
### Case 2qwen235b thinking prefill大模型TP4 baseline
详见 `docs/qwen235b-thinking-prefill-harness-20260427.md`
| | 纯 LLM loop | AITuner |
| --- | --- | --- |
| 最优 config | TP8**0.3794** req/s/GPU**10** 轮才找到 | TP8**0.3863** req/s/GPU**2** 轮即超过对照组 12 轮的最优值 |
| 搜索路径 | 中途浪费在 DP2、EP4 等失败探索上 | 从 baseline 直接跳到 TP8/DP1跳过对照组踩过的失败方向 |
| tuning 开销 | 12 轮预算 | 到达最优的迭代数从 10 降到 2**5x** |
大模型 case 上单轮 trial 更贵,少跑 8 轮的绝对 GPU 成本节省也更大。
### Case 3Qwen3-30B-A3B社区 vLLM 0.20(非内部环境同样适用)
详见 `docs/qwen30b-community-vllm020/harness-early-stop-ablation-20260502.md`
两个子实验:
- **测量上限识别**search 上限较低时):默认 config 已触及压测搜索上限。
AITuner 只执行 1 次 GPU trial 就识别出"当前压测范围测不出更优配置"
停止并明确报告原因;纯 LLM loop 把 12 轮预算烧完——第 2 轮 DP2 使
per-GPU 吞吐减半,第 3-12 轮**连续 10 轮 launch failure**。
净节省 11 轮 GPU 占用。
- **放宽上限后的真实搜索**AITuner 第 4 轮到达最优 config family
TP2 + runtime 精调)并在第 5 轮 stop纯 LLM loop 经历 EP launch
failure、不可行 DP probe 等弯路后第 7 轮才到同一 family单次测值差
约 1.5%,在重复压测噪声内)。
### 汇总
| Case | config 性能vs 纯 LLM loop 最优) | 到达最优迭代数 | 省下的无效 GPU trial |
| --- | --- | --- | --- |
| qwen27b 内部 vLLM | **约 2.2x**0.4429 vs 0.2025 | 4 vs 4但对照组随后 8 轮全部无效 | 8 轮 infeasible probe |
| qwen235b thinking | 持平略优0.3863 vs 0.3794 | **2 vs 105x** | 8 轮失败/弱探索 |
| qwen30b 社区 vLLM | 同一 config family±1.5% | 4 vs 7上限场景 1 vs 12 | 最多 11 轮(含 10 轮 launch failure |
诚实说明:以上是有限 case 上的证据qwen30b 子实验使用了有界压缩回放
(固定输出长度)做收敛性测试,不等同生产 benchmark结论是"更快收敛到
同等或更好的 config、大幅减少无效 GPU trial",不是全局最优性证明。
这正是我们想通过 pilot 在你们的真实 case 上进一步验证的。
## 6. 你们会得到什么
对每个 caseAITuner 的产出不只是一个 config
1. **满足 SLO 的 engine config**(以 `request_rate_per_gpu` 为主要
跨拓扑指标);
2. **完整可审计的实验轨迹**:每个 trial 的假设、预期效果、真实测量、
confirm/reject 结论,以及 probe 级别的明细(`probe_details.jsonl`
3. **瓶颈归因报告**:这个 case 的限制因素是 prefill、decode、admission
还是 memory为什么
4. **明确的 stop 理由**:是候选耗尽、验证充分,还是 measurement 上限
(比如 search 范围)不够——不会静默糊弄。
这些轨迹本身对你们的人工 tuning 经验沉淀也有价值。
## 7. 建议的合作方式pilot
我们目前缺少的是贵团队每个 case 的真实环境和硬件。建议直接在你们的
环境上做,分四步:
**Phase 0 — 选 case、对齐输入约 1 周)**
- 双方选定 1-2 个有代表性的 case
- 每个 case 需要:模型 + 硬件规格、SLO 定义TTFT/TPOT/pass rate
workload trace 或可复现的流量描述、当前人工 config作对照基线
- 我们把 dash 平台的内部环境变量 / launch 约束接入 harness 的
launch-feasibility 层和 validator。
**Phase 1 — 在你们环境跑通1-2 周)**
- 部署 AITuner先跑 baseline 建立测量基线,再跑完整 tune loop
- 我们负责跑通和调试,你们提供环境访问和平台侧支持。
**Phase 2 — 对比评估**
- AITuner 结果 vs 你们的人工 configSLO 达标情况、`request_rate_per_gpu`
消耗的 GPU trial 数、时间成本;
- 全部结果附实验轨迹,可复查。
**Phase 3 — 决策**
- 若 pilot 达标,讨论扩展到更多 case 的方式(接入流程、权限、
运行成本、维护分工)。
## 8. 当前依赖与风险(如实说明)
1. **LLM 依赖**:当前 planner 使用 gpt-5.5。计划切换到百炼
qwen3.7-max 的 dog-fooding API并做同 case 的效果对比。
风险缓冲harness 的 no-LLM deterministic 路径已经能独立完成
相当一部分 tuning见第 4 节planner 模型的能力差距被 harness
部分补偿,切换成本预计可控——但对比数据出来之前这是一个待验证项。
2. **Engine 适配**:当前 mechanism families 主要针对 vLLM 的 knob
语义SGLang 等其他 engine 需要一层 adapter 把 knobs 映射到相同的
mechanism vocabulary架构上已预留工作量取决于目标 engine
3. **平台适配**dash 内部环境变量和 launch 约束需要在 Phase 0 一次性
接入,之后由 failure memory 持续积累。
4. **边界**AITuner 保证的是结构化、可审计、测量高效的搜索;
它不证明全局最优,瓶颈分类是 symptom-based 的启发式归因而非
完美因果诊断。对生产决策来说,可审计比"号称最优"更重要。
## 9. 我们需要贵团队提供的
- 1-2 个 case 的测试环境和硬件访问(或由你们的同学代跑,我们远程支持);
- 每个 case 的 SLO 定义和 workload trace
- dash 平台内部环境变量 / launch 约束的文档或对接人;
- 百炼 qwen3.7-max dog-fooding API 的配额(用于 LLM 切换对比)。
---
附:更完整的设计语义见 `docs/aituner-harness-design-contract.md`
harness 各机制与实验证据见 `docs/aituner-harness-summary.md`