Record code-trace calibration and canary gates

This commit is contained in:
2026-07-24 02:03:11 +08:00
parent d5bb9745f8
commit 14ed991059
18 changed files with 1698 additions and 7 deletions

View File

@@ -1,6 +1,8 @@
# EXP-CODE-TRACE从 chat 1h trace 扩展到 code 与 phase-separated replay
> **状态READY_FOR_DATA PREFLIGHT未启动 GPU。** 当前只完成本地适配与实验冻结;`dash1`--`dash4` 有整机空闲后按本文 gate 顺序推进。禁止使用 `dash0`。
> **状态RUNNINGPhase A code P+D。** A0 数据/profile 与 A1 TP4
> max-length smoke 已完成A2 paired canary 正在运行A3 sim calibration
> 已冻结 topology-specific rho。只使用 `dash1`--`dash4`,禁止使用 `dash0`。
## 目标与成功定义
@@ -11,6 +13,16 @@
本轮不是只看“能否跑完”。每个正式 cell 必须满足:同一 request vector、同一 arrival、同一 token shape、同一 prefix/initial-KV 合约、real 零失败、无持续 backlog并同时报告 TTFT/TPOT/E2E、queue/batch、KV/prefix state 与 5min 分窗漂移。
## 当前决策快照
| 项目 | 当前结论 | 下一 gate |
|---|---|---|
| code P+D 数据 | 61min development window、long-context profile-v6、四个 paired full 输入已冻结 | paired canary real-vs-sim |
| TP4 负载 | low/mid/near-knee=`rho 0.0002/0.0008/0.0016`;三点均亚临界 | canary 通过后启动 1h |
| TP2 负载 | low/mid/near-knee=`rho 0.0002/0.0004/0.0008``0.0016` 明确过载 | TP2 canary/KV gate |
| code prefill-only | `rho<=0.0032` 的 paired remap cache 已生成OSL 全为 1 | 独立 sim rho calibration |
| strict decode-only | vLLM 0.20.0 有 `DecodeBenchConnector`Frontier trace generator 尚不能注入 initial computed tokens | C0 contract canary未进入正式结果 |
## 三种 workload mode 的冻结定义
| Mode | 保留 | 改写 | 主指标 | 明确不声称 |
@@ -112,6 +124,14 @@ source-window audit 先用 `40960/65536/98304/131072/262144` 给出完整
`max_model_len` 变大不等于每个请求都预占最大 KV但会改变启动合法性与可表达的单请求上界实际 KV 压力仍由并发 token state 决定。
对本模型,`VLLM_ALLOW_LONG_MAX_MODEL_LEN=1` 只放宽 scheduler/config
校验,不会扩展模型内部 RoPE cacheserver 还必须显式传
`--hf-overrides '{"max_position_embeddings":147456}'`。runner 对
`MAX_MODEL_LEN>40960` 自动同时设置这两层。长上下文 job 默认使用
host-local vLLM compile cacheFlashInfer workspace 按 topology 复用,
避免每个 rho/trial 重编译同一组 fused-MoE kernels。两者只影响启动
不进入 replay latency。
### G6每种 mode 独立标定 rho
不能复用 P+D rho
@@ -122,6 +142,12 @@ source-window audit 先用 `40960/65536/98304/131072/262144` 给出完整
每种 workload×mode 选择 `low/mid/near-knee` 三点;正式点必须亚临界:全请求完成、无持续 backlog、drain tail≤10%、waiting p99 不单调随时间增长。跨 knee 点若运行,只作为 overload boundary不支持“不发散”结论。
`drain tail` 必须同时列出最后完成请求的 arrival、ISL、OSL、waiting
和 E2E。早于 cutoff 到达但 OSL 很长的请求可以在最后 arrival 后继续
decode这属于 intrinsic response tail不等价于 arrival cutoff 时仍有
持续增长的 queue backlog。亚临界判断以 queue/waiting trajectory 和
tail driver 分解共同决定,不能只用一个 drain 秒数。
### G7strict decode-only capability gate
先在 10min synthetic trace 上验证:
@@ -147,6 +173,10 @@ source-window audit 先用 `40960/65536/98304/131072/262144` 给出完整
若某 topology 的 near-knee 过载,像现有 chat TP2/ρ0.01 一样排除,不为凑齐矩阵强跑。
当前状态A0 完成A1 的 TP4 完成、TP2 由 paired canary 同时验证;
A2 运行中A3 完成A4 的 paired input 已物化但尚未在 canary gate
前启动。
### Phase Bchat/code prefill-only
- 复用各自已物化 window只把 OSL 改为 1
@@ -165,6 +195,20 @@ source-window audit 先用 `40960/65536/98304/131072/262144` 给出完整
decode profile/serving anchors 至少覆盖实际 batch p99。当前 whole-layer grid 只对少数 b≤8 有证据,且 b6 有长尾;在 MNS128 case 前必须补 b{1,2,4,8,16,32,64,128} 或实际访问 bucket不能把 b8 常数外推到 b128。
已安装 vLLM 0.20.0 的 `DecodeBenchConnector` 会在首次 schedule 时把
`request.num_tokens-num_computed_tokens-1` 个 token 标为 external
同步向已分配的每层 KV blocks 写 dummy non-zero values再从最后一个
prompt token 开始 forward。因此它适合测大 context 下的 decode
compute/scheduling但 connector fill 发生在 client admission 之后:
fill time 必须单独记账并从 KV-ready arrival/TPOT 口径中排除。
dummy KV 也不提供真实 prompt-content 或 MoE-routing fidelity。
Frontier commit `deadc4a3``Request` 已支持构造
`num_processed_tokens`,但 `TraceReplayRequestGenerator` 不读取该列;
因此 sim 侧仍需一个显式、可测试的 `initial_computed_tokens` trace
contract。C0 必须同时证明 real 首个 model step 是 decode、Frontier
首个 ledger stage 是 decode之后才能解除 strict decode-only 的 BLOCKED。
## 指标与判据
共同口径:
@@ -238,3 +282,29 @@ mode-specific
`VLLM_ALLOW_LONG_MAX_MODEL_LEN=1` 下成功;该 override 只支持
performance/shape fidelity不形成生成质量或模型长上下文正确性 claim
并作为 provenance 中的显式实验变量。
- profile-v6-code-longctx 覆盖 TP1/2/4、KV context 到 131072
33 个 long-context rows两次 fresh-process repeat 的最大相对差
4.648%,旧 anchor drift 最大 1.7%。attention profile SHA256 =
`fbcf7e1f95789a6f6d771e24d1fc60958b7daf04eb0db260d27869a19d71d550`
- TP4 `max_model_len=147456` smoke 已在 dash4 通过。server 日志同时确认
`max_model_len=147456``hf_overrides.max_position_embeddings=147456`
20,051+78、119,702+68、136,774+242 三个 shape 均成功。对应
TTFT=853.29/12,699.04/3,820.55msTPOT=16.65/7.21/8.13ms。
最长请求的非单调 TTFT 来自 cold compile/cache state因此这里只作为
runtime support gate不作为 profile accuracy 数据。
- calibration 全部使用同一 profile-v6 SHA。TP4 的 `rho=0.0016`
decode batch max=16、drain=21.07s,仍通过 10% 亚临界 gateTP2 的
`rho=0.0016` waiting p50=332.97s、drain=976.86s,明确过载并排除。
完整 compact table 在 `results/calibration-summary.json`
- TP2/TP4 的 `rho={0.0002,0.0004,0.0008,0.0016}` 61min full paired
inputs 已在 CPFS 物化;每个 paired row digest 和 Frontier CSV SHA
均与 calibration input 逐项一致。manifest 副本在
`results/paired-input-manifests/`。最大一个目录约 901MiB不把大型
token arrays 提交进 Git。
- code prefill-only 的最大 calibration cache 已物化:
3477 requests、总 prefill 115,828,371 tokens、OSL 全为 1
paired digest=`40865068e02414612ba1cd4595894e20e85e01fd34d73f8660185552d531ecea`
- 多 host 并发 server startup 暴露出 shared CPFS AOT cache 和每-job
FlashInfer JIT 的 apparatus cost。它发生在 readiness 前,不进入 TTFT
runner commit `d5bb974` 改为长上下文默认使用 host-local vLLM cache
并按 topology 复用 FlashInfer workspace。