Evaluate Qwen30 prefill simulator fidelity

This commit is contained in:
2026-07-17 03:11:45 +08:00
parent 97c2f34700
commit 3a59d5df96
20 changed files with 8280 additions and 28 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@@ -0,0 +1,462 @@
#!/usr/bin/env python3
"""Compare the frozen Frontier surface with conservative real capacities."""
from __future__ import annotations
import argparse
import csv
import hashlib
import json
import math
import re
from collections import defaultdict
from datetime import datetime
from pathlib import Path
from typing import Any
RUN_PATTERN = re.compile(r"qwen30-prefill-real-tp(?P<tp>\d+)-mns(?P<mns>\d+)-")
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument("--fleet-artifacts", type=Path, required=True)
parser.add_argument(
"--simulator-manifest", type=Path, action="append", required=True
)
parser.add_argument("--output-root", type=Path, required=True)
return parser.parse_args()
def sha256(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as handle:
for chunk in iter(lambda: handle.read(1024 * 1024), b""):
digest.update(chunk)
return digest.hexdigest()
def load_json(path: Path) -> dict[str, Any]:
return json.loads(path.read_text())
def sign(value: float) -> int:
return (value > 0) - (value < 0)
def kendall_tau_b(real: list[float], simulated: list[float]) -> dict[str, Any]:
if len(real) != len(simulated):
raise ValueError("ranking vectors have different lengths")
concordant = discordant = real_only_ties = simulated_only_ties = both_ties = 0
for left in range(len(real)):
for right in range(left + 1, len(real)):
real_sign = sign(real[left] - real[right])
sim_sign = sign(simulated[left] - simulated[right])
if real_sign == 0 and sim_sign == 0:
both_ties += 1
elif real_sign == 0:
real_only_ties += 1
elif sim_sign == 0:
simulated_only_ties += 1
elif real_sign == sim_sign:
concordant += 1
else:
discordant += 1
denominator = math.sqrt(
(concordant + discordant + real_only_ties)
* (concordant + discordant + simulated_only_ties)
)
tau = (concordant - discordant) / denominator if denominator else None
return {
"kendall_tau_b": tau,
"concordant": concordant,
"discordant": discordant,
"real_only_ties": real_only_ties,
"simulator_only_ties": simulated_only_ties,
"both_ties": both_ties,
}
def result_files_by_anchor(root: Path) -> dict[tuple[str, str], Path]:
selected: dict[tuple[str, str], Path] = {}
digests: dict[tuple[str, str], str] = {}
for path in root.glob("artifacts/**/round*/results/r*.json"):
if path.name.startswith("warmup_"):
continue
round_name = path.parent.parent.name
key = (round_name, path.name)
digest = sha256(path)
if key in digests and digests[key] != digest:
raise RuntimeError(
f"conflicting duplicate real anchor {key} under {root}"
)
digests[key] = digest
if key not in selected or len(path.parts) < len(selected[key].parts):
selected[key] = path
return selected
def find_real_runs(root: Path) -> dict[str, Path]:
candidates: dict[str, list[Path]] = defaultdict(list)
for path in root.iterdir():
if not path.is_dir():
continue
match = RUN_PATTERN.search(path.name)
if not match:
continue
name = f"tp{int(match.group('tp'))}_mns{int(match.group('mns'))}"
candidates[name].append(path)
selected: dict[str, Path] = {}
for name, paths in candidates.items():
complete = [
path
for path in paths
if (path / "remote_run" / "exit_code").is_file()
and (path / "remote_run" / "exit_code").read_text().strip() == "0"
]
measured_counts = {
path: len(result_files_by_anchor(path))
for path in complete
}
if not measured_counts:
raise RuntimeError(f"no successful run for {name}")
maximum = max(measured_counts.values())
richest = [path for path, count in measured_counts.items() if count == maximum]
if len(richest) != 1:
raise RuntimeError(f"ambiguous richest successful run for {name}: {richest}")
selected[name] = richest[0]
if len(selected) != 12:
raise RuntimeError(f"expected 12 real configs, got {sorted(selected)}")
return selected
def campaign_resources(root: Path) -> dict[str, Any]:
runs = []
gpu_hours = 0.0
for path in sorted(root.iterdir()):
match = RUN_PATTERN.search(path.name)
exit_code = path / "remote_run" / "exit_code"
started_at = path / "remote_run" / "started_at"
finished_at = path / "remote_run" / "finished_at"
if (
not path.is_dir()
or not match
or not exit_code.is_file()
or exit_code.read_text().strip() != "0"
or not started_at.is_file()
or not finished_at.is_file()
):
continue
started = datetime.fromisoformat(started_at.read_text().strip())
finished = datetime.fromisoformat(finished_at.read_text().strip())
duration_seconds = (finished - started).total_seconds()
tp = int(match.group("tp"))
run_gpu_hours = duration_seconds * tp / 3600.0
gpu_hours += run_gpu_hours
runs.append(
{
"run": path.name,
"tp": tp,
"duration_seconds": duration_seconds,
"gpu_hours": run_gpu_hours,
}
)
return {
"successful_fleet_jobs": len(runs),
"gpu_hours": gpu_hours,
"runs": runs,
}
def parse_real_config(name: str, run_root: Path) -> dict[str, Any]:
result_files = sorted(result_files_by_anchor(run_root).values())
if len(result_files) not in {10, 16}:
raise RuntimeError(f"expected 10 base or 16 refined anchors for {name}, got {len(result_files)}")
by_rate: dict[float, list[dict[str, Any]]] = defaultdict(list)
for path in result_files:
payload = load_json(path)
rate = float(payload["workload"]["offered_request_rate"])
by_rate[rate].append(
{
"path": str(path.resolve()),
"sha256": sha256(path),
"summary": payload["summary"],
}
)
tp = int(name.split("_")[0][2:])
base_rates = [4.0, 8.0, 16.0, 32.0, 64.0]
refined_rates = sorted({*base_rates, *(tp * value for value in (5.0, 6.0, 7.0))})
if tuple(sorted(by_rate)) not in {tuple(base_rates), tuple(refined_rates)}:
raise RuntimeError(f"unexpected rate grid for {name}: {sorted(by_rate)}")
anchors = []
for rate, rounds in sorted(by_rate.items()):
if len(rounds) != 2:
raise RuntimeError(f"expected two rounds for {name}@{rate}, got {len(rounds)}")
round_feasible = [bool(row["summary"]["slo"]["feasible"]) for row in rounds]
anchors.append(
{
"rate": rate,
"rounds": rounds,
"conservative_feasible": all(round_feasible),
"round_feasible": round_feasible,
"round_ttft_p95_ms": [
float(row["summary"]["ttft_p95_ms"]) for row in rounds
],
}
)
feasible = [row["rate"] for row in anchors if row["conservative_feasible"]]
capacity = max(feasible, default=0.0)
return {
"name": name,
"tp": tp,
"mns": int(name.split("_mns")[1]),
"anchors": anchors,
"capacity": capacity,
"capacity_per_gpu": capacity / tp,
"source_run": str(run_root.resolve()),
}
def parse_simulator(manifests: list[Path]) -> tuple[dict[str, Any], list[dict[str, str]]]:
configs: dict[str, Any] = {}
sources = []
for path in manifests:
payload = load_json(path)
if payload["status"] not in {"complete", "partial_not_decision_bearing"}:
raise RuntimeError(f"simulator manifest has invalid status: {path}")
sources.append({"path": str(path.resolve()), "sha256": sha256(path)})
result_by_name = {
result["config"]["name"]: result for result in payload["config_results"]
}
for capacity in payload["capacity"]:
name = capacity["config"]["name"]
result = result_by_name.get(name)
if result is None:
raise RuntimeError(f"missing simulator config result {name}")
entry = configs.setdefault(
name,
{
"name": name,
"tp": int(capacity["config"]["tp"]),
"mns": int(capacity["config"]["mns"]),
"anchor_by_rate": {},
},
)
for load in result["loads"]:
rate = float(load["offered_request_rate"])
if rate in entry["anchor_by_rate"]:
raise RuntimeError(f"duplicate simulator anchor {name}@{rate}")
entry["anchor_by_rate"][rate] = {
"rate": rate,
"feasible": bool(load["score"]["feasible"]),
"pass_rate": float(load["score"]["pass_rate"]),
"ttft_p95_ms": float(load["score"]["ttft_p95_ms"]),
}
if len(configs) != 12:
raise RuntimeError(f"expected 12 simulator configs, got {sorted(configs)}")
for entry in configs.values():
entry["anchors"] = [
entry["anchor_by_rate"][rate] for rate in sorted(entry["anchor_by_rate"])
]
del entry["anchor_by_rate"]
feasible = [row["rate"] for row in entry["anchors"] if row["feasible"]]
entry["capacity"] = max(feasible, default=0.0)
entry["capacity_per_gpu"] = entry["capacity"] / entry["tp"]
return configs, sources
def compare(real: dict[str, Any], simulated: dict[str, Any]) -> dict[str, Any]:
names = sorted(real, key=lambda name: (real[name]["tp"], real[name]["mns"]))
if set(names) != set(simulated):
raise RuntimeError("real and simulator config sets differ")
real_scores = [real[name]["capacity_per_gpu"] for name in names]
sim_scores = [simulated[name]["capacity_per_gpu"] for name in names]
real_best = max(real_scores)
sim_best = max(sim_scores)
real_top = [name for name in names if real[name]["capacity_per_gpu"] == real_best]
sim_top = [
name for name in names if simulated[name]["capacity_per_gpu"] == sim_best
]
worst_sim_choice = min(real[name]["capacity_per_gpu"] for name in sim_top)
best_sim_choice = max(real[name]["capacity_per_gpu"] for name in sim_top)
tau = kendall_tau_b(real_scores, sim_scores)
pairwise = {"all": {"comparable": 0, "correct": 0}, "within_tp": {}}
for left in range(len(names)):
for right in range(left + 1, len(names)):
real_sign = sign(real_scores[left] - real_scores[right])
sim_sign = sign(sim_scores[left] - sim_scores[right])
if real_sign:
pairwise["all"]["comparable"] += 1
pairwise["all"]["correct"] += int(real_sign == sim_sign)
if real[names[left]]["tp"] == real[names[right]]["tp"] and real_sign:
key = f"tp{real[names[left]]['tp']}"
bucket = pairwise["within_tp"].setdefault(
key, {"comparable": 0, "correct": 0}
)
bucket["comparable"] += 1
bucket["correct"] += int(real_sign == sim_sign)
for bucket in [pairwise["all"], *pairwise["within_tp"].values()]:
bucket["accuracy"] = (
bucket["correct"] / bucket["comparable"]
if bucket["comparable"]
else None
)
confusion = {"real_pass_sim_pass": 0, "real_pass_sim_fail": 0,
"real_fail_sim_pass": 0, "real_fail_sim_fail": 0}
for name in names:
real_anchors = {row["rate"]: row for row in real[name]["anchors"]}
sim_anchors = {row["rate"]: row for row in simulated[name]["anchors"]}
if set(real_anchors) != set(sim_anchors):
raise RuntimeError(f"anchor grids differ for {name}")
for rate in real_anchors:
real_pass = real_anchors[rate]["conservative_feasible"]
sim_pass = sim_anchors[rate]["feasible"]
key = f"real_{'pass' if real_pass else 'fail'}_sim_{'pass' if sim_pass else 'fail'}"
confusion[key] += 1
return {
"config_order": names,
"real_top_set": real_top,
"simulator_top_set": sim_top,
"top_set_exact_match": real_top == sim_top,
"top_set_overlap": sorted(set(real_top) & set(sim_top)),
"top1_regret_best": (real_best - best_sim_choice) / real_best,
"top1_regret_worst": (real_best - worst_sim_choice) / real_best,
"real_best_capacity_per_gpu": real_best,
"simulator_best_capacity_per_gpu": sim_best,
"kendall": tau,
"pairwise_non_tied": pairwise,
"anchor_confusion": confusion,
}
def write_csv(path: Path, rows: list[dict[str, Any]]) -> None:
with path.open("w", newline="") as handle:
writer = csv.DictWriter(
handle, fieldnames=list(rows[0]), lineterminator="\n"
)
writer.writeheader()
writer.writerows(rows)
def plot(path: Path, rows: list[dict[str, Any]], metrics: dict[str, Any]) -> None:
import matplotlib.pyplot as plt
import numpy as np
labels = [f"TP{row['tp']}\nMNS{row['mns']}" for row in rows]
x = np.arange(len(rows))
width = 0.36
figure, axes = plt.subplots(
1, 2, figsize=(13.5, 5.0), gridspec_kw={"width_ratios": [3.3, 1.0]}
)
axis = axes[0]
axis.bar(x - width / 2, [row["real"] for row in rows], width, label="Real vLLM")
axis.bar(
x + width / 2,
[row["simulator"] for row in rows],
width,
label="Frontier profile-only",
)
axis.set_xticks(x, labels, fontsize=8)
axis.set_ylabel("Max tested SLO-feasible request rate / GPU")
axis.set_title("Qwen3-30B-A3B prefill-only: config ranking")
axis.grid(axis="y", alpha=0.25)
axis.legend(frameon=False, ncols=2)
for separator in (3.5, 7.5):
axis.axvline(separator, color="0.75", linewidth=0.8)
tau = metrics["kendall"]["kendall_tau_b"]
annotation = f"worst regret={metrics['top1_regret_worst'] * 100:.1f}%"
annotation += (
f"\nKendall τ-b={tau:.3f}"
if tau is not None
else "\nKendall τ-b=undefined"
)
axis.text(
0.01,
0.98,
annotation,
transform=axis.transAxes,
va="top",
fontsize=9,
bbox={"facecolor": "white", "edgecolor": "0.8", "alpha": 0.9},
)
confusion = metrics["anchor_confusion"]
matrix = np.array(
[
[confusion["real_pass_sim_pass"], confusion["real_pass_sim_fail"]],
[confusion["real_fail_sim_pass"], confusion["real_fail_sim_fail"]],
]
)
image = axes[1].imshow(matrix, cmap="Blues", vmin=0)
axes[1].set_xticks([0, 1], ["Sim pass", "Sim fail"])
axes[1].set_yticks([0, 1], ["Real pass", "Real fail"])
axes[1].set_title(f"{int(matrix.sum())} anchor decisions")
for row in range(2):
for column in range(2):
axes[1].text(column, row, int(matrix[row, column]), ha="center", va="center")
figure.colorbar(image, ax=axes[1], fraction=0.047, pad=0.04)
figure.suptitle("ISL=2048, OSL=1, TTFT≤1256 ms, 95% pass gate; two real rounds")
figure.tight_layout()
figure.savefig(path, dpi=180, bbox_inches="tight")
plt.close(figure)
def main() -> None:
args = parse_args()
real_runs = find_real_runs(args.fleet_artifacts.resolve())
real = {name: parse_real_config(name, path) for name, path in real_runs.items()}
simulated, simulator_sources = parse_simulator(
[path.resolve() for path in args.simulator_manifest]
)
metrics = compare(real, simulated)
rows = [
{
"config": name,
"tp": real[name]["tp"],
"mns": real[name]["mns"],
"real": real[name]["capacity_per_gpu"],
"simulator": simulated[name]["capacity_per_gpu"],
}
for name in metrics["config_order"]
]
resources = campaign_resources(args.fleet_artifacts.resolve())
resources["fresh_server_anchors"] = sum(
len(config["anchors"]) * 2 for config in real.values()
)
resources["measured_requests"] = resources["fresh_server_anchors"] * 64
resources["warmup_requests"] = sum(
min(32, max(4, math.ceil(anchor["rate"] * 2.0))) * 2
for config in real.values()
for anchor in config["anchors"]
)
args.output_root.mkdir(parents=True, exist_ok=True)
payload = {
"schema": "qwen30-prefill-fidelity-comparison-v1",
"objective": "maximum_tested_slo_feasible_offered_request_rate_per_gpu",
"contract": {
"model": "Qwen3-30B-A3B",
"input_tokens": 2048,
"output_tokens": 1,
"prefix_caching": False,
"ttft_slo_ms": 1256.0,
"target_pass_rate": 0.95,
"real_anchor_merge": "both_fresh_server_rounds_must_pass",
},
"metrics": metrics,
"real_campaign_resources": resources,
"real": real,
"simulator": simulated,
"simulator_sources": simulator_sources,
}
(args.output_root / "comparison.json").write_text(
json.dumps(payload, indent=2, sort_keys=True) + "\n"
)
write_csv(args.output_root / "capacity.csv", rows)
plot(args.output_root / "qwen30-prefill-ranking.png", rows, metrics)
print(json.dumps(metrics, indent=2, sort_keys=True))
if __name__ == "__main__":
main()

View File

@@ -1,6 +1,6 @@
# 实验 EXP-SIMFID-PHASE-FACTORIAL:prefill-only 是否是 simulator ranking 的容易区间?
> **状态:** 已批准,运行中(用户于 2026-07-17 明确要求先完成 235B mixed 与 30B prefill-only)
> **状态:** 已完成(2026-07-17)
## Claim 与决策
@@ -17,6 +17,7 @@
- **30B system context:** community vLLM 0.20.0+cu129,BF16 weights/activation/KV,TP∈{1,2,4},MNS∈{8,16,32,64},MBT=8192,chunked prefill on,prefix off;real 保留 runtime 默认 CUDA graph,Frontier profile-only 不做 E2E calibration。
- **30B workload:** fixed ISL=2048、OSL=1,64 个不同 token-chain prompts,uniform open-loop QPS;fresh server per `(config, rate, round)`,target-rate warmup 与 measured requests 分离。
- **30B SLO:** TTFT≤1256 ms,至少 61/64 requests 通过;primary score 为最大共同 tested feasible req/s / 实际 TP GPUs。
- **Boundary refinement rule:** base grid `{4,8,16,32,64}` 先定位每个 TP 的 pass→fail 区间;若除以 TP 后的离散容量产生无法区分的 top tie,则在查看最终 ranking 前追加共同 per-GPU lattice `5/6/7 req/s/GPU`,即 TP1 测 `{5,6,7}`、TP2 测 `{10,12,14}`、TP4 测 `{20,24,28}`。refinement 不替换或删除 base anchors。
- **235B baseline:** 已冻结 `ISL=2048, OSL=128`、8 configs、68 个 fresh-server anchors;primary sensitivity TTFT≤1256 ms、TPOT≤150 ms。
- **Baselines:** real community vLLM;Frontier same-stack profile-only;historical Qwen30 mixed profile-only;historical frozen per-TP calibration 只作为 upper bound,不参与本 case 拟合。
- **Metrics:** top set、worst tie-break regret、Kendall τ-b、exact/non-tied pair direction、anchor confusion、absolute capacity、TTFT p50/p95、real trial variance与GPU-hour。
@@ -35,7 +36,7 @@
| Selective benchmarking | PASS for initial screen | 同时报已有 235B mixed success和内部 pairwise failure;后续 expansion 由预注册 verdict 触发 |
| Simplified workload | NEEDS EVIDENCE | fixed-shape 只用于 phase isolation,不外推 trace-faithful mixed |
| Calibration=evaluation | PASS | 新 case 不用 serving E2E 数据拟合 scale |
| Missing significance | NEEDS EVIDENCE until run | boundary anchors做独立 fresh-server repeat,保留 disagreement |
| Missing significance | PASS for ranking screen | 96 个 config-rate cells 均做两个独立 fresh-server rounds;两轮都 pass 才算 feasible |
| Relative-only result | PASS by design | 同时报 req/s/GPU、TTFT distribution、rank/regret |
## 复现信息
@@ -43,12 +44,13 @@
- **Code:** AITuner branch `codex/fidelity-prefix-pilot-20260714`;Frontier upstream `d9cfeb6d8791fbf2f295dd9744c56a666171776e` + frozen known patches。
- **Environment:** 只使用 dash0 8×H20;Qwen30 venv `/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1`;model `/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B`。
- **产物路径:** local/remote `runs/frontier-phase-factorial-v0/`;raw GPU artifacts 由 fleet harvest,condensed JSON/CSV 进入结果目录。
- **已知 deviation:** 235B 为 FP8/vLLM0.10.2/FlashInfer eager,30B 为 BF16/vLLM0.20/FA3/default CUDA graph;因此跨模型只检验 hypothesis consistency,causal phase claim 最终仍需 same-model phase pair。
- **已知 deviation:** 235B 为 FP8/vLLM0.10.2/FlashInfer eager,30B 为 BF16/vLLM0.20/FA3/default CUDA graph;因此跨模型只检验 hypothesis consistency,causal phase claim 最终仍需 same-model phase pair。初始 continuous fleet monitor 未在 fresh-server 间隙保留 controller-level GPU reservation,产生重叠 launch;该 attempt 整体移动到 `invalid-overlap-*`,不进入统计。后续一次试图在“其余 4 卡”上并行 refinement 时,探针再次命中 TP4 fresh-server 空窗,把 4 个 TP1 jobs 放到了同一 GPU set。这四个 jobs 尚未产生 measured result;但当时 TP4/MNS64 已产生的单个 anchor 也按污染处理。两者都整体移到 `invalid-overlap-20260716T1750Z`,TP4/MNS64 从空目录重跑。此后的 barrier waves 不在运行中追加 job;但 Wave 3 的 harvest monitor 在未及时返回 launch 状态时已发射 MNS16/32,紧接的 monitor retry 又在它们的启动空窗发射 MNS64。三者都未产生 measured result,整体移到 `invalid-overlap-20260716T1836Z`。最终 TP4 waves 使用只含本波 jobs 的独立 queue state,不再依赖 pending-job 探针调度。
## 结果
- **观察事实:** 235B fixed-shape mixed 已完成:real/sim TP4 top set exact match,worst regret=0、τ-b=0.8944;但 20 个 real non-tie pairs 只保持 16 个,10/34 anchors false-infeasible,TP8 MNS×MBT interaction 被漏掉。30B prefill-only 待运行。
- **异常:** 无。
- **Interpretation 与剩余 alternatives:** 强版本“mixed 必然失败”已被 235B top-set result 削弱;仍可能存在 phase-dependent error magnitude,由 topology margin 掩盖。
- **Claim update:** unchanged,等待 30B prefill-only。
- **下一步:** freeze 30B simulator surface → guided real anchors → joint verdict;只有判定需要时扩展 decode-heavy 235B 或 trace-shaped 30B prefill。
- **观察事实:** 235B fixed-shape mixed 中 real/sim 的四个 TP4 top configs 完全一致,worst regret=0、τ-b=0.8944;但 20 个 real non-tie pairs 只保持 16 个,10/34 anchors false-infeasible,TP8 MNS×MBT interaction 被漏掉。30B prefill-only 中真机 capacity/GPU 为 TP1=7、TP2=7、TP4=8,Frontier 为 TP1=8、TP2=8、TP4=6;real top set 是四个 TP4 configs,simulator top set 是全部八个 TP1/TP2 configs,无交集。worst regret=12.5%、τ-b=-1.0,32 个 real non-tie pairs 中 0 个同序。96 个 anchor labels 中有 8 个 false-feasible 和 8 个 false-infeasible。
- **实验成本:** 接受 24 个 fleet jobs、192 个 fresh-server anchors、12,288 个 measured requests 和 4,512 个 warmups,消耗 12.0744 H20-GPU-hours。
- **异常与排除:** fleet controller 在 fresh-server 空窗期没有保留 GPU reservation,产生了三批重叠 launch。污染 attempt 不进入 accepted artifact root,未产生 measured result 的重叠 jobs 也不被计数;同一波中已产生的 TP4/MNS64 单 anchor 同样按污染丢弃,从空目录重跑。最终 TP4 refinement 使用彼此独立的 queue states。analyzer 按 `(round, filename)` 去重相同 harvest copy,如果 hash 冲突则直接报错。
- **Interpretation 与剩余 alternatives:** `H-phase` 的强形式(prefill-only 是 fidelity 充分条件)被否证;`H-margin` 与数据更一致。235B 的真机 TP4/TP8 最优 margin 为 2×,足以掩盖内部 residual;30B 的 8-vs-7 margin 被 TP-dependent saturation residual 穿过。但这是跨 stack comparison,不能把差异因果归结为 model size。
- **Claim update:** “prefill-only 容易,decode/mixed 困难”的强假设被否证。新的可证伪命题是:config-ranking fidelity 取决于 scheduler-state-conditioned action residual 是否大于 real decision margin。
- **下一步:** 不继续扩展跨模型 phase cases。在 Qwen30 prefill-only 上依次做 measured-collective injection、batch-composition-conditioned pure-prefill attention/step profile、TP1@8/TP2@16/TP4@32 的 scheduler batch/queue/per-step trace 对齐,最后再测 routing/graph。

View File

@@ -0,0 +1,24 @@
version = 1
[paths]
state_dir = "runs/frontier-phase-factorial-v0/fleet-state-base-rerun"
artifacts_dir = "runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive"
[ssh]
connect_timeout_sec = 10
[scheduler]
gpu_free_memory_mb = 95000
gpu_free_utilization_pct = 5
prefer_pack = true
[sync]
mode = "scp"
local_path = "runs/frontier-phase-factorial-v0/remote-sync-marker"
[[hosts]]
name = "dash0"
ssh_alias = "dash0"
enabled = true
sync_remote_path = "/home/admin/cpfs/wjh/aituner/phase-factorial-sync-marker"
fleet_root = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0"

View File

@@ -0,0 +1,24 @@
version = 1
[paths]
state_dir = "runs/frontier-phase-factorial-v0/fleet-state-exclusive"
artifacts_dir = "runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive"
[ssh]
connect_timeout_sec = 10
[scheduler]
gpu_free_memory_mb = 95000
gpu_free_utilization_pct = 5
prefer_pack = true
[sync]
mode = "scp"
local_path = "runs/frontier-phase-factorial-v0/remote-sync-marker"
[[hosts]]
name = "dash0"
ssh_alias = "dash0"
enabled = true
sync_remote_path = "/home/admin/cpfs/wjh/aituner/phase-factorial-sync-marker"
fleet_root = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0"

View File

@@ -0,0 +1,24 @@
version = 1
[paths]
state_dir = "runs/frontier-phase-factorial-v0/fleet-state-refine-tp4-wave3"
artifacts_dir = "runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive"
[ssh]
connect_timeout_sec = 10
[scheduler]
gpu_free_memory_mb = 95000
gpu_free_utilization_pct = 5
prefer_pack = true
[sync]
mode = "scp"
local_path = "runs/frontier-phase-factorial-v0/remote-sync-marker"
[[hosts]]
name = "dash0"
ssh_alias = "dash0"
enabled = true
sync_remote_path = "/home/admin/cpfs/wjh/aituner/phase-factorial-sync-marker"
fleet_root = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0"

View File

@@ -0,0 +1,24 @@
version = 1
[paths]
state_dir = "runs/frontier-phase-factorial-v0/fleet-state-refine-tp4-wave4"
artifacts_dir = "runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive"
[ssh]
connect_timeout_sec = 10
[scheduler]
gpu_free_memory_mb = 95000
gpu_free_utilization_pct = 5
prefer_pack = true
[sync]
mode = "scp"
local_path = "runs/frontier-phase-factorial-v0/remote-sync-marker"
[[hosts]]
name = "dash0"
ssh_alias = "dash0"
enabled = true
sync_remote_path = "/home/admin/cpfs/wjh/aituner/phase-factorial-sync-marker"
fleet_root = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0"

View File

@@ -0,0 +1,24 @@
version = 1
[paths]
state_dir = "runs/frontier-phase-factorial-v0/fleet-state-refine"
artifacts_dir = "runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive"
[ssh]
connect_timeout_sec = 10
[scheduler]
gpu_free_memory_mb = 95000
gpu_free_utilization_pct = 5
prefer_pack = true
[sync]
mode = "scp"
local_path = "runs/frontier-phase-factorial-v0/remote-sync-marker"
[[hosts]]
name = "dash0"
ssh_alias = "dash0"
enabled = true
sync_remote_path = "/home/admin/cpfs/wjh/aituner/phase-factorial-sync-marker"
fleet_root = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0"

View File

@@ -0,0 +1,21 @@
version = 1
[[jobs]]
name = "qwen30-prefill-real-tp4-mns64-20260717-v2b-exclusive"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns64-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "64"
RATES = "4 8 16 32 64"
SERVER_PORT = "8731"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns64-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"

View File

@@ -1,7 +1,7 @@
version = 1
[[jobs]]
name = "qwen30-prefill-real-tp1-mns8-20260717-v1"
name = "qwen30-prefill-real-tp1-mns8-20260717-v2-exclusive"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
@@ -21,7 +21,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns16-20260717-v1"
name = "qwen30-prefill-real-tp1-mns16-20260717-v2-exclusive"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
@@ -41,7 +41,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns32-20260717-v1"
name = "qwen30-prefill-real-tp1-mns32-20260717-v2-exclusive"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
@@ -61,7 +61,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns64-20260717-v1"
name = "qwen30-prefill-real-tp1-mns64-20260717-v2-exclusive"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
@@ -81,7 +81,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns8-20260717-v1"
name = "qwen30-prefill-real-tp2-mns8-20260717-v2-exclusive"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
@@ -101,7 +101,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns16-20260717-v1"
name = "qwen30-prefill-real-tp2-mns16-20260717-v2-exclusive"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
@@ -121,7 +121,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns32-20260717-v1"
name = "qwen30-prefill-real-tp2-mns32-20260717-v2-exclusive"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
@@ -141,7 +141,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns64-20260717-v1"
name = "qwen30-prefill-real-tp2-mns64-20260717-v2-exclusive"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
@@ -161,7 +161,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns8-20260717-v1"
name = "qwen30-prefill-real-tp4-mns8-20260717-v2-exclusive"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
@@ -181,7 +181,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns16-20260717-v1"
name = "qwen30-prefill-real-tp4-mns16-20260717-v2-exclusive"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
@@ -201,7 +201,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns32-20260717-v1"
name = "qwen30-prefill-real-tp4-mns32-20260717-v2-exclusive"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
@@ -221,7 +221,7 @@ VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns64-20260717-v1"
name = "qwen30-prefill-real-tp4-mns64-20260717-v2-exclusive"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]

View File

@@ -0,0 +1,240 @@
version = 1
[[jobs]]
name = "qwen30-prefill-real-tp1-mns8-20260717-v3-refine"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp1-mns8-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "1"
MNS = "8"
RATES = "5 6 7"
SERVER_PORT = "8720"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp1-mns8-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns16-20260717-v3-refine"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp1-mns16-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "1"
MNS = "16"
RATES = "5 6 7"
SERVER_PORT = "8721"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp1-mns16-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns32-20260717-v3-refine"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp1-mns32-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "1"
MNS = "32"
RATES = "5 6 7"
SERVER_PORT = "8722"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp1-mns32-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp1-mns64-20260717-v3-refine"
gpus = 1
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp1-mns64-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "1"
MNS = "64"
RATES = "5 6 7"
SERVER_PORT = "8723"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp1-mns64-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns8-20260717-v3-refine"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp2-mns8-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "2"
MNS = "8"
RATES = "10 12 14"
SERVER_PORT = "8724"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp2-mns8-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns16-20260717-v3-refine"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp2-mns16-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "2"
MNS = "16"
RATES = "10 12 14"
SERVER_PORT = "8725"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp2-mns16-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns32-20260717-v3-refine"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp2-mns32-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "2"
MNS = "32"
RATES = "10 12 14"
SERVER_PORT = "8726"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp2-mns32-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp2-mns64-20260717-v3-refine"
gpus = 2
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp2-mns64-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "2"
MNS = "64"
RATES = "10 12 14"
SERVER_PORT = "8727"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp2-mns64-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns8-20260717-v3-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns8-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "8"
RATES = "20 24 28"
SERVER_PORT = "8728"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns8-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns16-20260717-v3-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns16-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "16"
RATES = "20 24 28"
SERVER_PORT = "8729"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns16-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns32-20260717-v3-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns32-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "32"
RATES = "20 24 28"
SERVER_PORT = "8730"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns32-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns64-20260717-v3-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns64-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "64"
RATES = "20 24 28"
SERVER_PORT = "8731"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns64-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"

View File

@@ -0,0 +1,41 @@
version = 1
[[jobs]]
name = "qwen30-prefill-real-tp4-mns16-20260717-v4-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns16-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "16"
RATES = "20 24 28"
SERVER_PORT = "8729"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns16-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"
[[jobs]]
name = "qwen30-prefill-real-tp4-mns32-20260717-v4-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns32-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "32"
RATES = "20 24 28"
SERVER_PORT = "8730"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns32-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"

View File

@@ -0,0 +1,21 @@
version = 1
[[jobs]]
name = "qwen30-prefill-real-tp4-mns64-20260717-v4-refine"
gpus = 4
gpu_model = "H20"
hosts = ["dash0"]
command = "cd /home/admin/cpfs/wjh/aituner/aituner-qwen30-vllm020-profile-v1/runs/frontier-phase-factorial-v0 && timeout --signal=TERM --kill-after=30s 7200 bash run_qwen30_prefill_real_config.sh"
artifacts = ["artifacts/real-tp4-mns64-v1"]
[jobs.env]
HOME = "/tmp/wjh"
XDG_CACHE_HOME = "/tmp/wjh/.cache"
VLLM_CACHE_ROOT = "/tmp/wjh/.cache/vllm"
TP = "4"
MNS = "64"
RATES = "20 24 28"
SERVER_PORT = "8731"
OUTPUT_ROOT = "/home/admin/cpfs/wjh/aituner/gpu-fleet-phase-factorial-v0/artifacts/real-tp4-mns64-v1"
VENV_ROOT = "/tmp/wjh/venvs/vllm-0.20.0-cu129-profiler-v1"
MODEL_ROOT = "/home/admin/cpfs/wjh/models/Qwen/Qwen3-30B-A3B"

View File

@@ -0,0 +1,13 @@
config,tp,mns,real,simulator
tp1_mns8,1,8,7.0,8.0
tp1_mns16,1,16,7.0,8.0
tp1_mns32,1,32,7.0,8.0
tp1_mns64,1,64,7.0,8.0
tp2_mns8,2,8,7.0,8.0
tp2_mns16,2,16,7.0,8.0
tp2_mns32,2,32,7.0,8.0
tp2_mns64,2,64,7.0,8.0
tp4_mns8,4,8,8.0,6.0
tp4_mns16,4,16,8.0,6.0
tp4_mns32,4,32,8.0,6.0
tp4_mns64,4,64,8.0,6.0
1 config tp mns real simulator
2 tp1_mns8 1 8 7.0 8.0
3 tp1_mns16 1 16 7.0 8.0
4 tp1_mns32 1 32 7.0 8.0
5 tp1_mns64 1 64 7.0 8.0
6 tp2_mns8 2 8 7.0 8.0
7 tp2_mns16 2 16 7.0 8.0
8 tp2_mns32 2 32 7.0 8.0
9 tp2_mns64 2 64 7.0 8.0
10 tp4_mns8 4 8 8.0 6.0
11 tp4_mns16 4 16 8.0 6.0
12 tp4_mns32 4 32 8.0 6.0
13 tp4_mns64 4 64 8.0 6.0

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,461 @@
{
"capacity": [
{
"config": {
"mns": 16,
"name": "tp1_mns16",
"tp": 1
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 7.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 32,
"name": "tp1_mns32",
"tp": 1
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 7.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 64,
"name": "tp1_mns64",
"tp": 1
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 7.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 8,
"name": "tp1_mns8",
"tp": 1
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 7.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
}
],
"config_results": [
{
"config": {
"mns": 8,
"name": "tp1_mns8",
"tp": 1
},
"loads": [
{
"config": {
"mns": 8,
"name": "tp1_mns8",
"tp": 1
},
"elapsed_seconds": 10.505136728286743,
"offered_request_rate": 5.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "914a1261d25b03b812dfa30880c3b0a0d7b697a8c13a9f3a26a7bb6eaecd0734",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.011124187030024,
"ttft_max_ms": 171.58529929215405,
"ttft_p50_ms": 171.58529929215405,
"ttft_p95_ms": 171.58529929215405
},
"status": "completed",
"trace_sha256": "98e4ac5df766b1cb5bfb7469f2d76368808c2e085e22eb3553cb8627592cacd7"
},
{
"config": {
"mns": 8,
"name": "tp1_mns8",
"tp": 1
},
"elapsed_seconds": 10.398303508758545,
"offered_request_rate": 6.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "d8f0fe2fbf2ffb42b7e5033f611fc22f3293264859264b5f8d67f13f3a5b66c9",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.915042512446176,
"ttft_max_ms": 432.43322440414465,
"ttft_p50_ms": 282.618152646152,
"ttft_p95_ms": 333.9001759332376
},
"status": "completed",
"trace_sha256": "e0f9adf28d29542fcf834d482c990781724426f3d5cdcc043af53888393d1f64"
},
{
"config": {
"mns": 8,
"name": "tp1_mns8",
"tp": 1
},
"elapsed_seconds": 10.264978170394897,
"offered_request_rate": 7.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7ba9181767b8cbd741db3794bc7729920d7741d63b795ade4aa1fe28a89f3a63",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 6.89299458621687,
"ttft_max_ms": 432.97081304433016,
"ttft_p50_ms": 297.34516049744997,
"ttft_p95_ms": 427.64609771465524
},
"status": "completed",
"trace_sha256": "3734627d83aa731c9f09a4c4fea7d994f110bcbe937e157906354a4eda9cbf48"
}
]
},
{
"config": {
"mns": 16,
"name": "tp1_mns16",
"tp": 1
},
"loads": [
{
"config": {
"mns": 16,
"name": "tp1_mns16",
"tp": 1
},
"elapsed_seconds": 10.103909015655518,
"offered_request_rate": 5.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "914a1261d25b03b812dfa30880c3b0a0d7b697a8c13a9f3a26a7bb6eaecd0734",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.011124187030024,
"ttft_max_ms": 171.58529929215405,
"ttft_p50_ms": 171.58529929215405,
"ttft_p95_ms": 171.58529929215405
},
"status": "completed",
"trace_sha256": "98e4ac5df766b1cb5bfb7469f2d76368808c2e085e22eb3553cb8627592cacd7"
},
{
"config": {
"mns": 16,
"name": "tp1_mns16",
"tp": 1
},
"elapsed_seconds": 10.05237078666687,
"offered_request_rate": 6.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "d8f0fe2fbf2ffb42b7e5033f611fc22f3293264859264b5f8d67f13f3a5b66c9",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.915042512446176,
"ttft_max_ms": 432.43322440414465,
"ttft_p50_ms": 282.618152646152,
"ttft_p95_ms": 333.9001759332376
},
"status": "completed",
"trace_sha256": "e0f9adf28d29542fcf834d482c990781724426f3d5cdcc043af53888393d1f64"
},
{
"config": {
"mns": 16,
"name": "tp1_mns16",
"tp": 1
},
"elapsed_seconds": 10.048887729644775,
"offered_request_rate": 7.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7ba9181767b8cbd741db3794bc7729920d7741d63b795ade4aa1fe28a89f3a63",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 6.89299458621687,
"ttft_max_ms": 432.97081304433016,
"ttft_p50_ms": 297.34516049744997,
"ttft_p95_ms": 427.64609771465524
},
"status": "completed",
"trace_sha256": "3734627d83aa731c9f09a4c4fea7d994f110bcbe937e157906354a4eda9cbf48"
}
]
},
{
"config": {
"mns": 32,
"name": "tp1_mns32",
"tp": 1
},
"loads": [
{
"config": {
"mns": 32,
"name": "tp1_mns32",
"tp": 1
},
"elapsed_seconds": 10.058743476867676,
"offered_request_rate": 5.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "914a1261d25b03b812dfa30880c3b0a0d7b697a8c13a9f3a26a7bb6eaecd0734",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.011124187030024,
"ttft_max_ms": 171.58529929215405,
"ttft_p50_ms": 171.58529929215405,
"ttft_p95_ms": 171.58529929215405
},
"status": "completed",
"trace_sha256": "98e4ac5df766b1cb5bfb7469f2d76368808c2e085e22eb3553cb8627592cacd7"
},
{
"config": {
"mns": 32,
"name": "tp1_mns32",
"tp": 1
},
"elapsed_seconds": 10.106712818145752,
"offered_request_rate": 6.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "d8f0fe2fbf2ffb42b7e5033f611fc22f3293264859264b5f8d67f13f3a5b66c9",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.915042512446176,
"ttft_max_ms": 432.43322440414465,
"ttft_p50_ms": 282.618152646152,
"ttft_p95_ms": 333.9001759332376
},
"status": "completed",
"trace_sha256": "e0f9adf28d29542fcf834d482c990781724426f3d5cdcc043af53888393d1f64"
},
{
"config": {
"mns": 32,
"name": "tp1_mns32",
"tp": 1
},
"elapsed_seconds": 10.1020348072052,
"offered_request_rate": 7.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7ba9181767b8cbd741db3794bc7729920d7741d63b795ade4aa1fe28a89f3a63",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 6.89299458621687,
"ttft_max_ms": 432.97081304433016,
"ttft_p50_ms": 297.34516049744997,
"ttft_p95_ms": 427.64609771465524
},
"status": "completed",
"trace_sha256": "3734627d83aa731c9f09a4c4fea7d994f110bcbe937e157906354a4eda9cbf48"
}
]
},
{
"config": {
"mns": 64,
"name": "tp1_mns64",
"tp": 1
},
"loads": [
{
"config": {
"mns": 64,
"name": "tp1_mns64",
"tp": 1
},
"elapsed_seconds": 9.897645235061646,
"offered_request_rate": 5.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "914a1261d25b03b812dfa30880c3b0a0d7b697a8c13a9f3a26a7bb6eaecd0734",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.011124187030024,
"ttft_max_ms": 171.58529929215405,
"ttft_p50_ms": 171.58529929215405,
"ttft_p95_ms": 171.58529929215405
},
"status": "completed",
"trace_sha256": "98e4ac5df766b1cb5bfb7469f2d76368808c2e085e22eb3553cb8627592cacd7"
},
{
"config": {
"mns": 64,
"name": "tp1_mns64",
"tp": 1
},
"elapsed_seconds": 9.957297325134277,
"offered_request_rate": 6.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "d8f0fe2fbf2ffb42b7e5033f611fc22f3293264859264b5f8d67f13f3a5b66c9",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 5.915042512446176,
"ttft_max_ms": 432.43322440414465,
"ttft_p50_ms": 282.618152646152,
"ttft_p95_ms": 333.9001759332376
},
"status": "completed",
"trace_sha256": "e0f9adf28d29542fcf834d482c990781724426f3d5cdcc043af53888393d1f64"
},
{
"config": {
"mns": 64,
"name": "tp1_mns64",
"tp": 1
},
"elapsed_seconds": 9.799486875534058,
"offered_request_rate": 7.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7ba9181767b8cbd741db3794bc7729920d7741d63b795ade4aa1fe28a89f3a63",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 6.89299458621687,
"ttft_max_ms": 432.97081304433016,
"ttft_p50_ms": 297.34516049744997,
"ttft_p95_ms": 427.64609771465524
},
"status": "completed",
"trace_sha256": "3734627d83aa731c9f09a4c4fea7d994f110bcbe937e157906354a4eda9cbf48"
}
]
}
],
"contract": {
"arrival": "open_loop_uniform",
"input_tokens": 2048,
"output_tokens": 1,
"prefix_caching": false,
"rates": [
5.0,
6.0,
7.0
],
"requests_per_anchor": 64,
"target_pass_rate": 0.95,
"ttft_slo_ms": 1256.0
},
"frontier": {
"git_head": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"git_status_short": " M frontier/config/config.py\n M frontier/entities/request.py\n M frontier/events/cluster_schedule_event.py\n M frontier/execution_time_predictor/sklearn_execution_time_predictor.py\n M frontier/metrics/constants.py\n M frontier/metrics/metrics_store.py\n M frontier/profiling/common/layers/rotary_embedding.py\n M frontier/profiling/moe/moe_impl.py\n M frontier/profiling/moe/moe_vllm_kernel.py\n M frontier/scheduler/cluster_scheduler/__init__.py\n M frontier/scheduler/cluster_scheduler/base_cluster_scheduler.py\n M frontier/scheduler/cluster_scheduler/cluster_scheduler_registry.py\n M frontier/scheduler/cluster_scheduler/sticky_lor_cluster_scheduler.py\n M frontier/scheduler/replica_scheduler/base_replica_scheduler.py\n M frontier/scheduler/replica_scheduler/vllm_v1_engine_replica_scheduler.py\n M frontier/scheduler/replica_stage_scheduler/replica_stage_schduler.py\n M frontier/simulator.py\n M frontier/types/cluster_scheduler_type.py\n?? data/profiling/compute/h20/\n?? frontier/scheduler/cluster_scheduler/prefix_lor_cluster_scheduler.py\n?? runs/\n?? tests/unit/test_attn_prefill_prediction_fallback.py\n",
"source": "/tmp/replayserve-frontier-rs1b"
},
"profiles": {
"coverage": {
"attention": {
"1": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"2": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"4": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
}
},
"manifest": {
"attention_tp_coverage": [
1,
2,
4
],
"environment_contract": {
"dtype": "bfloat16",
"frontier_commit": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"hardware": "NVIDIA H20",
"model": "Qwen3-30B-A3B",
"tensor_parallel_sizes": [
1,
2,
4
],
"vllm_source_commit": "88d34c6409e9fb3c7b8ca0c04756f061d2099eb1",
"vllm_version": "0.20.0"
},
"inputs": {
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp2-20260716-v1-dispatch-aware-20260716T140743025781Z/artifacts/artifacts/allreduce-full-tp2-v1/raw/allreduce-tp2.json": "97c3c76b5a04e95bd9192423c2b891667c668f39cc0dfecbd097d749939f2d0a",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp4-20260716-v1-dispatch-aware-20260716T141106009788Z/artifacts/artifacts/allreduce-full-tp4-v1/raw/allreduce-tp4.json": "809df9baa6f468cf12bf0c99827475acc67894dd9f3f948976590b665fac0e76",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp1-20260716-v2-20260716T135132587012Z/artifacts/artifacts/flashattn-kv-full-v2-tp1/raw/flashattn-tp1.json": "dcb4c1bf7e76b9c765f78ddd2b8a734f2d7ba2adac13ce017689a8a77fe69a27",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp2-20260716-v2-20260716T135134194295Z/artifacts/artifacts/flashattn-kv-full-v2-tp2/raw/flashattn-tp2.json": "43ce042556ba887c8860614b43ccf0f564e5cebc1a0cffbce299d0acb9fa8d07",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp4-20260716-v2-20260716T135135197200Z/artifacts/artifacts/flashattn-kv-full-v2-tp4/raw/flashattn-tp4.json": "84eef31bcad0f556907a093318a420959d14fdc94474823d11f659704bdfec73",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-frontier-linear-full-20260716-v2-max-tokens-20260716T144444676943Z/artifacts/artifacts/frontier-linear-full-v2/profiles/compute/h20/qwen3-a3b-30b-moe/linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-moe-full-20260716-v1-local-shard-20260716T141334565164Z/artifacts/artifacts/moe-full-v1/raw/moe-full.json": "588f6ad0d69c9636d1b852e3df0a12d13cfe731f050ea7ec7aea457cceefbde8",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-router-full-20260716-v3-tp-context-20260716T145446098505Z/artifacts/artifacts/router-full-v3/raw/router.json": "1962972e983bff3e06a721ef4ae4ec65728ff669681497a4a7e7f769b88b4931"
},
"outputs": {
"allreduce.json": "b38d14f990578d668523d25b107aceed433da5020d8ada3b6e44d3562261a3b3",
"attention.csv": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"attention_true_mixed_fused.csv": "43ef4be90bddc9aeac6dbbe339feec24162cd1f2129a08fbd959e6ee4eaf5f60",
"linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"moe.csv": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
},
"profile_id": "qwen3-30b-a3b-bf16-vllm020-h20-tp1-2-4-fused-mixed-total-conserving",
"projection_contract": {
"allreduce": "Frozen exact runtime measurements; base profile-only comparison keeps the historical Frontier CC backend fixed to isolate compute profile fidelity",
"attention": "Pure prefill/extend/decode FA3 core plus separately measured KV update; input/output reshape assumed zero; exported mean is used as median target; true mixed rows use a total-conserving compatibility projection",
"attention_true_mixed": "The directly measured fused total is preserved in diagnostics. Frontier's two targets are projected by the same-TP pure prefill/decode reference ratio, with projected prefill + decode exactly equal to the fused total; the split is a schema compatibility attribution, not an observation",
"linear": "Frontier profiler using vLLM 0.20 CUDA operators",
"moe": "Replicated gate and fused top-k plus TP-local modular expert kernel; expert measurement already includes prepare/finalize so shuffling is zero"
},
"row_counts": {
"allreduce": 24,
"attention_frontier_compatible": 132,
"attention_true_mixed_fused_diagnostic": 30,
"linear": 36,
"moe": 72
},
"schema_version": "frontier_qwen30_vllm020_frozen_profile.v2"
}
},
"root": "/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/frozen/profile-v2",
"sha256": {
"attention": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"linear": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"manifest": "af40545e75aff55c6333cd2d5379ccf042a5a0b7d7fc7df4f745ce256cb290eb",
"moe": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
}
},
"schema": "frontier-qwen30-prefill-surface-v1",
"status": "partial_not_decision_bearing"
}

View File

@@ -0,0 +1,461 @@
{
"capacity": [
{
"config": {
"mns": 16,
"name": "tp2_mns16",
"tp": 2
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 14.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 32,
"name": "tp2_mns32",
"tp": 2
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 14.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 64,
"name": "tp2_mns64",
"tp": 2
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 14.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
},
{
"config": {
"mns": 8,
"name": "tp2_mns8",
"tp": 2
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 14.0,
"maximum_tested_feasible_request_rate_per_gpu": 7.0,
"upper_censored": true
}
],
"config_results": [
{
"config": {
"mns": 8,
"name": "tp2_mns8",
"tp": 2
},
"loads": [
{
"config": {
"mns": 8,
"name": "tp2_mns8",
"tp": 2
},
"elapsed_seconds": 10.598209381103516,
"offered_request_rate": 10.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "3597984a1acaffc6b3e8b1baa3ff41bb94ee1618f8780fcc6cd8d3bdb3d7201b",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 9.814433634929404,
"ttft_max_ms": 300.1784228926625,
"ttft_p50_ms": 211.39433537475938,
"ttft_p95_ms": 297.1650738307572
},
"status": "completed",
"trace_sha256": "92e3001d8467e3f97a243bea8323440ecf254a8ca211e52226fe886ebc9404be"
},
{
"config": {
"mns": 8,
"name": "tp2_mns8",
"tp": 2
},
"elapsed_seconds": 10.660333633422852,
"offered_request_rate": 12.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "06641f2758bd3f801fb7b9c934670bc766372ad7353f5e14aea2988dfbec462a",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 11.55742285377119,
"ttft_max_ms": 389.93612032123883,
"ttft_p50_ms": 296.08352841701094,
"ttft_p95_ms": 384.6764910356253
},
"status": "completed",
"trace_sha256": "cbc40c05fb9e400fa5edea6dd52c4122a957418fe523d102f1e72a784321e681"
},
{
"config": {
"mns": 8,
"name": "tp2_mns8",
"tp": 2
},
"elapsed_seconds": 10.409451007843018,
"offered_request_rate": 14.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "94cf0f3c510015ba50495eb38fd6fb452dd23d16ce0c788dc926229ecd557812",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 13.374732701347012,
"ttft_max_ms": 388.3013907870674,
"ttft_p50_ms": 309.4635231444016,
"ttft_p95_ms": 386.4490667329015
},
"status": "completed",
"trace_sha256": "3e43801bb724218ceaf0d52f17cd4d0fb3863e70f95c4d8d5a43ce7f85c75c01"
}
]
},
{
"config": {
"mns": 16,
"name": "tp2_mns16",
"tp": 2
},
"loads": [
{
"config": {
"mns": 16,
"name": "tp2_mns16",
"tp": 2
},
"elapsed_seconds": 10.360321521759033,
"offered_request_rate": 10.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "3597984a1acaffc6b3e8b1baa3ff41bb94ee1618f8780fcc6cd8d3bdb3d7201b",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 9.814433634929404,
"ttft_max_ms": 300.1784228926625,
"ttft_p50_ms": 211.39433537475938,
"ttft_p95_ms": 297.1650738307572
},
"status": "completed",
"trace_sha256": "92e3001d8467e3f97a243bea8323440ecf254a8ca211e52226fe886ebc9404be"
},
{
"config": {
"mns": 16,
"name": "tp2_mns16",
"tp": 2
},
"elapsed_seconds": 10.402549028396606,
"offered_request_rate": 12.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "06641f2758bd3f801fb7b9c934670bc766372ad7353f5e14aea2988dfbec462a",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 11.55742285377119,
"ttft_max_ms": 389.93612032123883,
"ttft_p50_ms": 296.08352841701094,
"ttft_p95_ms": 384.6764910356253
},
"status": "completed",
"trace_sha256": "cbc40c05fb9e400fa5edea6dd52c4122a957418fe523d102f1e72a784321e681"
},
{
"config": {
"mns": 16,
"name": "tp2_mns16",
"tp": 2
},
"elapsed_seconds": 10.40966272354126,
"offered_request_rate": 14.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "94cf0f3c510015ba50495eb38fd6fb452dd23d16ce0c788dc926229ecd557812",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 13.374732701347012,
"ttft_max_ms": 388.3013907870674,
"ttft_p50_ms": 309.4635231444016,
"ttft_p95_ms": 386.4490667329015
},
"status": "completed",
"trace_sha256": "3e43801bb724218ceaf0d52f17cd4d0fb3863e70f95c4d8d5a43ce7f85c75c01"
}
]
},
{
"config": {
"mns": 32,
"name": "tp2_mns32",
"tp": 2
},
"loads": [
{
"config": {
"mns": 32,
"name": "tp2_mns32",
"tp": 2
},
"elapsed_seconds": 10.155991315841675,
"offered_request_rate": 10.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "3597984a1acaffc6b3e8b1baa3ff41bb94ee1618f8780fcc6cd8d3bdb3d7201b",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 9.814433634929404,
"ttft_max_ms": 300.1784228926625,
"ttft_p50_ms": 211.39433537475938,
"ttft_p95_ms": 297.1650738307572
},
"status": "completed",
"trace_sha256": "92e3001d8467e3f97a243bea8323440ecf254a8ca211e52226fe886ebc9404be"
},
{
"config": {
"mns": 32,
"name": "tp2_mns32",
"tp": 2
},
"elapsed_seconds": 10.103453874588013,
"offered_request_rate": 12.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "06641f2758bd3f801fb7b9c934670bc766372ad7353f5e14aea2988dfbec462a",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 11.55742285377119,
"ttft_max_ms": 389.93612032123883,
"ttft_p50_ms": 296.08352841701094,
"ttft_p95_ms": 384.6764910356253
},
"status": "completed",
"trace_sha256": "cbc40c05fb9e400fa5edea6dd52c4122a957418fe523d102f1e72a784321e681"
},
{
"config": {
"mns": 32,
"name": "tp2_mns32",
"tp": 2
},
"elapsed_seconds": 10.255317687988281,
"offered_request_rate": 14.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "94cf0f3c510015ba50495eb38fd6fb452dd23d16ce0c788dc926229ecd557812",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 13.374732701347012,
"ttft_max_ms": 388.3013907870674,
"ttft_p50_ms": 309.4635231444016,
"ttft_p95_ms": 386.4490667329015
},
"status": "completed",
"trace_sha256": "3e43801bb724218ceaf0d52f17cd4d0fb3863e70f95c4d8d5a43ce7f85c75c01"
}
]
},
{
"config": {
"mns": 64,
"name": "tp2_mns64",
"tp": 2
},
"loads": [
{
"config": {
"mns": 64,
"name": "tp2_mns64",
"tp": 2
},
"elapsed_seconds": 10.106109380722046,
"offered_request_rate": 10.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "3597984a1acaffc6b3e8b1baa3ff41bb94ee1618f8780fcc6cd8d3bdb3d7201b",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 9.814433634929404,
"ttft_max_ms": 300.1784228926625,
"ttft_p50_ms": 211.39433537475938,
"ttft_p95_ms": 297.1650738307572
},
"status": "completed",
"trace_sha256": "92e3001d8467e3f97a243bea8323440ecf254a8ca211e52226fe886ebc9404be"
},
{
"config": {
"mns": 64,
"name": "tp2_mns64",
"tp": 2
},
"elapsed_seconds": 10.112579107284546,
"offered_request_rate": 12.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "06641f2758bd3f801fb7b9c934670bc766372ad7353f5e14aea2988dfbec462a",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 11.55742285377119,
"ttft_max_ms": 389.93612032123883,
"ttft_p50_ms": 296.08352841701094,
"ttft_p95_ms": 384.6764910356253
},
"status": "completed",
"trace_sha256": "cbc40c05fb9e400fa5edea6dd52c4122a957418fe523d102f1e72a784321e681"
},
{
"config": {
"mns": 64,
"name": "tp2_mns64",
"tp": 2
},
"elapsed_seconds": 9.847446918487549,
"offered_request_rate": 14.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "94cf0f3c510015ba50495eb38fd6fb452dd23d16ce0c788dc926229ecd557812",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 13.374732701347012,
"ttft_max_ms": 388.3013907870674,
"ttft_p50_ms": 309.4635231444016,
"ttft_p95_ms": 386.4490667329015
},
"status": "completed",
"trace_sha256": "3e43801bb724218ceaf0d52f17cd4d0fb3863e70f95c4d8d5a43ce7f85c75c01"
}
]
}
],
"contract": {
"arrival": "open_loop_uniform",
"input_tokens": 2048,
"output_tokens": 1,
"prefix_caching": false,
"rates": [
10.0,
12.0,
14.0
],
"requests_per_anchor": 64,
"target_pass_rate": 0.95,
"ttft_slo_ms": 1256.0
},
"frontier": {
"git_head": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"git_status_short": " M frontier/config/config.py\n M frontier/entities/request.py\n M frontier/events/cluster_schedule_event.py\n M frontier/execution_time_predictor/sklearn_execution_time_predictor.py\n M frontier/metrics/constants.py\n M frontier/metrics/metrics_store.py\n M frontier/profiling/common/layers/rotary_embedding.py\n M frontier/profiling/moe/moe_impl.py\n M frontier/profiling/moe/moe_vllm_kernel.py\n M frontier/scheduler/cluster_scheduler/__init__.py\n M frontier/scheduler/cluster_scheduler/base_cluster_scheduler.py\n M frontier/scheduler/cluster_scheduler/cluster_scheduler_registry.py\n M frontier/scheduler/cluster_scheduler/sticky_lor_cluster_scheduler.py\n M frontier/scheduler/replica_scheduler/base_replica_scheduler.py\n M frontier/scheduler/replica_scheduler/vllm_v1_engine_replica_scheduler.py\n M frontier/scheduler/replica_stage_scheduler/replica_stage_schduler.py\n M frontier/simulator.py\n M frontier/types/cluster_scheduler_type.py\n?? data/profiling/compute/h20/\n?? frontier/scheduler/cluster_scheduler/prefix_lor_cluster_scheduler.py\n?? runs/\n?? tests/unit/test_attn_prefill_prediction_fallback.py\n",
"source": "/tmp/replayserve-frontier-rs1b"
},
"profiles": {
"coverage": {
"attention": {
"1": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"2": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"4": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
}
},
"manifest": {
"attention_tp_coverage": [
1,
2,
4
],
"environment_contract": {
"dtype": "bfloat16",
"frontier_commit": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"hardware": "NVIDIA H20",
"model": "Qwen3-30B-A3B",
"tensor_parallel_sizes": [
1,
2,
4
],
"vllm_source_commit": "88d34c6409e9fb3c7b8ca0c04756f061d2099eb1",
"vllm_version": "0.20.0"
},
"inputs": {
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp2-20260716-v1-dispatch-aware-20260716T140743025781Z/artifacts/artifacts/allreduce-full-tp2-v1/raw/allreduce-tp2.json": "97c3c76b5a04e95bd9192423c2b891667c668f39cc0dfecbd097d749939f2d0a",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp4-20260716-v1-dispatch-aware-20260716T141106009788Z/artifacts/artifacts/allreduce-full-tp4-v1/raw/allreduce-tp4.json": "809df9baa6f468cf12bf0c99827475acc67894dd9f3f948976590b665fac0e76",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp1-20260716-v2-20260716T135132587012Z/artifacts/artifacts/flashattn-kv-full-v2-tp1/raw/flashattn-tp1.json": "dcb4c1bf7e76b9c765f78ddd2b8a734f2d7ba2adac13ce017689a8a77fe69a27",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp2-20260716-v2-20260716T135134194295Z/artifacts/artifacts/flashattn-kv-full-v2-tp2/raw/flashattn-tp2.json": "43ce042556ba887c8860614b43ccf0f564e5cebc1a0cffbce299d0acb9fa8d07",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp4-20260716-v2-20260716T135135197200Z/artifacts/artifacts/flashattn-kv-full-v2-tp4/raw/flashattn-tp4.json": "84eef31bcad0f556907a093318a420959d14fdc94474823d11f659704bdfec73",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-frontier-linear-full-20260716-v2-max-tokens-20260716T144444676943Z/artifacts/artifacts/frontier-linear-full-v2/profiles/compute/h20/qwen3-a3b-30b-moe/linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-moe-full-20260716-v1-local-shard-20260716T141334565164Z/artifacts/artifacts/moe-full-v1/raw/moe-full.json": "588f6ad0d69c9636d1b852e3df0a12d13cfe731f050ea7ec7aea457cceefbde8",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-router-full-20260716-v3-tp-context-20260716T145446098505Z/artifacts/artifacts/router-full-v3/raw/router.json": "1962972e983bff3e06a721ef4ae4ec65728ff669681497a4a7e7f769b88b4931"
},
"outputs": {
"allreduce.json": "b38d14f990578d668523d25b107aceed433da5020d8ada3b6e44d3562261a3b3",
"attention.csv": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"attention_true_mixed_fused.csv": "43ef4be90bddc9aeac6dbbe339feec24162cd1f2129a08fbd959e6ee4eaf5f60",
"linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"moe.csv": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
},
"profile_id": "qwen3-30b-a3b-bf16-vllm020-h20-tp1-2-4-fused-mixed-total-conserving",
"projection_contract": {
"allreduce": "Frozen exact runtime measurements; base profile-only comparison keeps the historical Frontier CC backend fixed to isolate compute profile fidelity",
"attention": "Pure prefill/extend/decode FA3 core plus separately measured KV update; input/output reshape assumed zero; exported mean is used as median target; true mixed rows use a total-conserving compatibility projection",
"attention_true_mixed": "The directly measured fused total is preserved in diagnostics. Frontier's two targets are projected by the same-TP pure prefill/decode reference ratio, with projected prefill + decode exactly equal to the fused total; the split is a schema compatibility attribution, not an observation",
"linear": "Frontier profiler using vLLM 0.20 CUDA operators",
"moe": "Replicated gate and fused top-k plus TP-local modular expert kernel; expert measurement already includes prepare/finalize so shuffling is zero"
},
"row_counts": {
"allreduce": 24,
"attention_frontier_compatible": 132,
"attention_true_mixed_fused_diagnostic": 30,
"linear": 36,
"moe": 72
},
"schema_version": "frontier_qwen30_vllm020_frozen_profile.v2"
}
},
"root": "/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/frozen/profile-v2",
"sha256": {
"attention": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"linear": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"manifest": "af40545e75aff55c6333cd2d5379ccf042a5a0b7d7fc7df4f745ce256cb290eb",
"moe": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
}
},
"schema": "frontier-qwen30-prefill-surface-v1",
"status": "partial_not_decision_bearing"
}

View File

@@ -0,0 +1,461 @@
{
"capacity": [
{
"config": {
"mns": 16,
"name": "tp4_mns16",
"tp": 4
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 24.0,
"maximum_tested_feasible_request_rate_per_gpu": 6.0,
"upper_censored": false
},
{
"config": {
"mns": 32,
"name": "tp4_mns32",
"tp": 4
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 24.0,
"maximum_tested_feasible_request_rate_per_gpu": 6.0,
"upper_censored": false
},
{
"config": {
"mns": 64,
"name": "tp4_mns64",
"tp": 4
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 24.0,
"maximum_tested_feasible_request_rate_per_gpu": 6.0,
"upper_censored": false
},
{
"config": {
"mns": 8,
"name": "tp4_mns8",
"tp": 4
},
"lower_censored": false,
"maximum_tested_feasible_request_rate": 24.0,
"maximum_tested_feasible_request_rate_per_gpu": 6.0,
"upper_censored": false
}
],
"config_results": [
{
"config": {
"mns": 8,
"name": "tp4_mns8",
"tp": 4
},
"loads": [
{
"config": {
"mns": 8,
"name": "tp4_mns8",
"tp": 4
},
"elapsed_seconds": 10.649231672286987,
"offered_request_rate": 20.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "2bf5e46241bf3462e21f707f715b4a9fe2c932b19da35b19b4a875f88605eee0",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.74355310200617,
"ttft_max_ms": 779.2433711652614,
"ttft_p50_ms": 476.39050138849325,
"ttft_p95_ms": 718.1022232545545
},
"status": "completed",
"trace_sha256": "da52e3a35a89135dd82d40415cf2dd43738eceb4183f322fcd38d96294a845d4"
},
{
"config": {
"mns": 8,
"name": "tp4_mns8",
"tp": 4
},
"elapsed_seconds": 10.245610237121582,
"offered_request_rate": 24.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "79986860bea420cd6e42385521fc8377dbc237a15010a4daf014bc9a94f71aa7",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.93744325871021,
"ttft_max_ms": 1219.4533647214066,
"ttft_p50_ms": 708.2221064125775,
"ttft_p95_ms": 1155.549457433053
},
"status": "completed",
"trace_sha256": "abae88091c5b7bb5a4b7f3f6fa553e132b10e7943c0dbe18dea203ac85c289fa"
},
{
"config": {
"mns": 8,
"name": "tp4_mns8",
"tp": 4
},
"elapsed_seconds": 9.953459978103638,
"offered_request_rate": 28.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7f33dcb51a6e2a47acbc2f4ee968746f86575c0cbf62482ae08cfaf58216d459",
"score": {
"feasible": false,
"pass_rate": 0.765625,
"passed": 49,
"throughput_requests_per_second": 16.898601280793688,
"ttft_max_ms": 1587.02950504691,
"ttft_p50_ms": 885.3220562610811,
"ttft_p95_ms": 1515.6009336189102
},
"status": "completed",
"trace_sha256": "603b9e57429538d162af2ab5fd99c15611246ab92ab067b09acb4da3963d40e1"
}
]
},
{
"config": {
"mns": 16,
"name": "tp4_mns16",
"tp": 4
},
"loads": [
{
"config": {
"mns": 16,
"name": "tp4_mns16",
"tp": 4
},
"elapsed_seconds": 10.059623956680298,
"offered_request_rate": 20.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "2bf5e46241bf3462e21f707f715b4a9fe2c932b19da35b19b4a875f88605eee0",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.74355310200617,
"ttft_max_ms": 779.2433711652614,
"ttft_p50_ms": 476.39050138849325,
"ttft_p95_ms": 718.1022232545545
},
"status": "completed",
"trace_sha256": "da52e3a35a89135dd82d40415cf2dd43738eceb4183f322fcd38d96294a845d4"
},
{
"config": {
"mns": 16,
"name": "tp4_mns16",
"tp": 4
},
"elapsed_seconds": 10.000702381134033,
"offered_request_rate": 24.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "79986860bea420cd6e42385521fc8377dbc237a15010a4daf014bc9a94f71aa7",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.93744325871021,
"ttft_max_ms": 1219.4533647214066,
"ttft_p50_ms": 708.2221064125775,
"ttft_p95_ms": 1155.549457433053
},
"status": "completed",
"trace_sha256": "abae88091c5b7bb5a4b7f3f6fa553e132b10e7943c0dbe18dea203ac85c289fa"
},
{
"config": {
"mns": 16,
"name": "tp4_mns16",
"tp": 4
},
"elapsed_seconds": 9.852763652801514,
"offered_request_rate": 28.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7f33dcb51a6e2a47acbc2f4ee968746f86575c0cbf62482ae08cfaf58216d459",
"score": {
"feasible": false,
"pass_rate": 0.765625,
"passed": 49,
"throughput_requests_per_second": 16.898601280793688,
"ttft_max_ms": 1587.02950504691,
"ttft_p50_ms": 885.3220562610811,
"ttft_p95_ms": 1515.6009336189102
},
"status": "completed",
"trace_sha256": "603b9e57429538d162af2ab5fd99c15611246ab92ab067b09acb4da3963d40e1"
}
]
},
{
"config": {
"mns": 32,
"name": "tp4_mns32",
"tp": 4
},
"loads": [
{
"config": {
"mns": 32,
"name": "tp4_mns32",
"tp": 4
},
"elapsed_seconds": 9.849465370178223,
"offered_request_rate": 20.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "2bf5e46241bf3462e21f707f715b4a9fe2c932b19da35b19b4a875f88605eee0",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.74355310200617,
"ttft_max_ms": 779.2433711652614,
"ttft_p50_ms": 476.39050138849325,
"ttft_p95_ms": 718.1022232545545
},
"status": "completed",
"trace_sha256": "da52e3a35a89135dd82d40415cf2dd43738eceb4183f322fcd38d96294a845d4"
},
{
"config": {
"mns": 32,
"name": "tp4_mns32",
"tp": 4
},
"elapsed_seconds": 9.80930495262146,
"offered_request_rate": 24.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "79986860bea420cd6e42385521fc8377dbc237a15010a4daf014bc9a94f71aa7",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.93744325871021,
"ttft_max_ms": 1219.4533647214066,
"ttft_p50_ms": 708.2221064125775,
"ttft_p95_ms": 1155.549457433053
},
"status": "completed",
"trace_sha256": "abae88091c5b7bb5a4b7f3f6fa553e132b10e7943c0dbe18dea203ac85c289fa"
},
{
"config": {
"mns": 32,
"name": "tp4_mns32",
"tp": 4
},
"elapsed_seconds": 9.798201560974121,
"offered_request_rate": 28.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7f33dcb51a6e2a47acbc2f4ee968746f86575c0cbf62482ae08cfaf58216d459",
"score": {
"feasible": false,
"pass_rate": 0.765625,
"passed": 49,
"throughput_requests_per_second": 16.898601280793688,
"ttft_max_ms": 1587.02950504691,
"ttft_p50_ms": 885.3220562610811,
"ttft_p95_ms": 1515.6009336189102
},
"status": "completed",
"trace_sha256": "603b9e57429538d162af2ab5fd99c15611246ab92ab067b09acb4da3963d40e1"
}
]
},
{
"config": {
"mns": 64,
"name": "tp4_mns64",
"tp": 4
},
"loads": [
{
"config": {
"mns": 64,
"name": "tp4_mns64",
"tp": 4
},
"elapsed_seconds": 9.800058603286743,
"offered_request_rate": 20.0,
"offered_request_rate_per_gpu": 5.0,
"request_count": 64,
"request_metrics_sha256": "2bf5e46241bf3462e21f707f715b4a9fe2c932b19da35b19b4a875f88605eee0",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.74355310200617,
"ttft_max_ms": 779.2433711652614,
"ttft_p50_ms": 476.39050138849325,
"ttft_p95_ms": 718.1022232545545
},
"status": "completed",
"trace_sha256": "da52e3a35a89135dd82d40415cf2dd43738eceb4183f322fcd38d96294a845d4"
},
{
"config": {
"mns": 64,
"name": "tp4_mns64",
"tp": 4
},
"elapsed_seconds": 9.804483413696289,
"offered_request_rate": 24.0,
"offered_request_rate_per_gpu": 6.0,
"request_count": 64,
"request_metrics_sha256": "79986860bea420cd6e42385521fc8377dbc237a15010a4daf014bc9a94f71aa7",
"score": {
"feasible": true,
"pass_rate": 1.0,
"passed": 64,
"throughput_requests_per_second": 16.93744325871021,
"ttft_max_ms": 1219.4533647214066,
"ttft_p50_ms": 708.2221064125775,
"ttft_p95_ms": 1155.549457433053
},
"status": "completed",
"trace_sha256": "abae88091c5b7bb5a4b7f3f6fa553e132b10e7943c0dbe18dea203ac85c289fa"
},
{
"config": {
"mns": 64,
"name": "tp4_mns64",
"tp": 4
},
"elapsed_seconds": 9.80262541770935,
"offered_request_rate": 28.0,
"offered_request_rate_per_gpu": 7.0,
"request_count": 64,
"request_metrics_sha256": "7f33dcb51a6e2a47acbc2f4ee968746f86575c0cbf62482ae08cfaf58216d459",
"score": {
"feasible": false,
"pass_rate": 0.765625,
"passed": 49,
"throughput_requests_per_second": 16.898601280793688,
"ttft_max_ms": 1587.02950504691,
"ttft_p50_ms": 885.3220562610811,
"ttft_p95_ms": 1515.6009336189102
},
"status": "completed",
"trace_sha256": "603b9e57429538d162af2ab5fd99c15611246ab92ab067b09acb4da3963d40e1"
}
]
}
],
"contract": {
"arrival": "open_loop_uniform",
"input_tokens": 2048,
"output_tokens": 1,
"prefix_caching": false,
"rates": [
20.0,
24.0,
28.0
],
"requests_per_anchor": 64,
"target_pass_rate": 0.95,
"ttft_slo_ms": 1256.0
},
"frontier": {
"git_head": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"git_status_short": " M frontier/config/config.py\n M frontier/entities/request.py\n M frontier/events/cluster_schedule_event.py\n M frontier/execution_time_predictor/sklearn_execution_time_predictor.py\n M frontier/metrics/constants.py\n M frontier/metrics/metrics_store.py\n M frontier/profiling/common/layers/rotary_embedding.py\n M frontier/profiling/moe/moe_impl.py\n M frontier/profiling/moe/moe_vllm_kernel.py\n M frontier/scheduler/cluster_scheduler/__init__.py\n M frontier/scheduler/cluster_scheduler/base_cluster_scheduler.py\n M frontier/scheduler/cluster_scheduler/cluster_scheduler_registry.py\n M frontier/scheduler/cluster_scheduler/sticky_lor_cluster_scheduler.py\n M frontier/scheduler/replica_scheduler/base_replica_scheduler.py\n M frontier/scheduler/replica_scheduler/vllm_v1_engine_replica_scheduler.py\n M frontier/scheduler/replica_stage_scheduler/replica_stage_schduler.py\n M frontier/simulator.py\n M frontier/types/cluster_scheduler_type.py\n?? data/profiling/compute/h20/\n?? frontier/scheduler/cluster_scheduler/prefix_lor_cluster_scheduler.py\n?? runs/\n?? tests/unit/test_attn_prefill_prediction_fallback.py\n",
"source": "/tmp/replayserve-frontier-rs1b"
},
"profiles": {
"coverage": {
"attention": {
"1": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"2": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
},
"4": {
"exact_prefill_2048_rows": 1,
"profile_batch_size": 1
}
},
"manifest": {
"attention_tp_coverage": [
1,
2,
4
],
"environment_contract": {
"dtype": "bfloat16",
"frontier_commit": "d9cfeb6d8791fbf2f295dd9744c56a666171776e",
"hardware": "NVIDIA H20",
"model": "Qwen3-30B-A3B",
"tensor_parallel_sizes": [
1,
2,
4
],
"vllm_source_commit": "88d34c6409e9fb3c7b8ca0c04756f061d2099eb1",
"vllm_version": "0.20.0"
},
"inputs": {
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp2-20260716-v1-dispatch-aware-20260716T140743025781Z/artifacts/artifacts/allreduce-full-tp2-v1/raw/allreduce-tp2.json": "97c3c76b5a04e95bd9192423c2b891667c668f39cc0dfecbd097d749939f2d0a",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-allreduce-full-tp4-20260716-v1-dispatch-aware-20260716T141106009788Z/artifacts/artifacts/allreduce-full-tp4-v1/raw/allreduce-tp4.json": "809df9baa6f468cf12bf0c99827475acc67894dd9f3f948976590b665fac0e76",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp1-20260716-v2-20260716T135132587012Z/artifacts/artifacts/flashattn-kv-full-v2-tp1/raw/flashattn-tp1.json": "dcb4c1bf7e76b9c765f78ddd2b8a734f2d7ba2adac13ce017689a8a77fe69a27",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp2-20260716-v2-20260716T135134194295Z/artifacts/artifacts/flashattn-kv-full-v2-tp2/raw/flashattn-tp2.json": "43ce042556ba887c8860614b43ccf0f564e5cebc1a0cffbce299d0acb9fa8d07",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-flashattn-kv-full-tp4-20260716-v2-20260716T135135197200Z/artifacts/artifacts/flashattn-kv-full-v2-tp4/raw/flashattn-tp4.json": "84eef31bcad0f556907a093318a420959d14fdc94474823d11f659704bdfec73",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-frontier-linear-full-20260716-v2-max-tokens-20260716T144444676943Z/artifacts/artifacts/frontier-linear-full-v2/profiles/compute/h20/qwen3-a3b-30b-moe/linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-moe-full-20260716-v1-local-shard-20260716T141334565164Z/artifacts/artifacts/moe-full-v1/raw/moe-full.json": "588f6ad0d69c9636d1b852e3df0a12d13cfe731f050ea7ec7aea457cceefbde8",
"/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/fleet-artifacts/qwen30-vllm020-router-full-20260716-v3-tp-context-20260716T145446098505Z/artifacts/artifacts/router-full-v3/raw/router.json": "1962972e983bff3e06a721ef4ae4ec65728ff669681497a4a7e7f769b88b4931"
},
"outputs": {
"allreduce.json": "b38d14f990578d668523d25b107aceed433da5020d8ada3b6e44d3562261a3b3",
"attention.csv": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"attention_true_mixed_fused.csv": "43ef4be90bddc9aeac6dbbe339feec24162cd1f2129a08fbd959e6ee4eaf5f60",
"linear_op.csv": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"moe.csv": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
},
"profile_id": "qwen3-30b-a3b-bf16-vllm020-h20-tp1-2-4-fused-mixed-total-conserving",
"projection_contract": {
"allreduce": "Frozen exact runtime measurements; base profile-only comparison keeps the historical Frontier CC backend fixed to isolate compute profile fidelity",
"attention": "Pure prefill/extend/decode FA3 core plus separately measured KV update; input/output reshape assumed zero; exported mean is used as median target; true mixed rows use a total-conserving compatibility projection",
"attention_true_mixed": "The directly measured fused total is preserved in diagnostics. Frontier's two targets are projected by the same-TP pure prefill/decode reference ratio, with projected prefill + decode exactly equal to the fused total; the split is a schema compatibility attribution, not an observation",
"linear": "Frontier profiler using vLLM 0.20 CUDA operators",
"moe": "Replicated gate and fused top-k plus TP-local modular expert kernel; expert measurement already includes prepare/finalize so shuffling is zero"
},
"row_counts": {
"allreduce": 24,
"attention_frontier_compatible": 132,
"attention_true_mixed_fused_diagnostic": 30,
"linear": 36,
"moe": 72
},
"schema_version": "frontier_qwen30_vllm020_frozen_profile.v2"
}
},
"root": "/home/gahow/phd/aituner/runs/frontier-qwen30-vllm020-profile-v1/frozen/profile-v2",
"sha256": {
"attention": "76dcb767cebb4ec1c4e24bd04d93ddd48b5d271986ebfb51a197ab33e1b3d87d",
"linear": "67666cb0a4901b74599d468df2e31bcaa2a11a7842cc0cefba24ffce62508e0c",
"manifest": "af40545e75aff55c6333cd2d5379ccf042a5a0b7d7fc7df4f745ce256cb290eb",
"moe": "0e4dcba72918a1c4cf4e96ced31ee3829248a19ad54553cebef14417725808b0"
}
},
"schema": "frontier-qwen30-prefill-surface-v1",
"status": "partial_not_decision_bearing"
}

View File

@@ -37,3 +37,9 @@ def test_grid_and_trace(tmp_path: Path) -> None:
assert len(lines) == 4
assert lines[1].split(",")[:3] == ["0.000000000000", "2048", "1"]
assert lines[3].split(",")[:3] == ["0.500000000000", "2048", "1"]
def test_kendall_tau_b() -> None:
analysis = load("analyze_qwen30_prefill_fidelity.py")
assert analysis.kendall_tau_b([1, 2, 3], [1, 2, 3])["kendall_tau_b"] == 1
assert analysis.kendall_tau_b([1, 2, 3], [3, 2, 1])["kendall_tau_b"] == -1

View File

@@ -1,6 +1,6 @@
# Frontier simulator fidelity:以 config ranking 为目标的阶段性评测
更新日期:2026-07-16。
更新日期:2026-07-17。
统一实验平台:所有新增与重跑实验只使用 `dash0` 的 8×NVIDIA H20。Qwen30B 的真实 P1 artifacts 也来自 `dash0`;早期文档中的主机 provenance 标注错误,本版已按实验主机和远端 artifact 路径更正。
@@ -14,11 +14,12 @@
- 将 operator profile 更新为与真实 serving 一致的 community vLLM `0.20.0`、BF16、H20、TP1/2/4 栈后,新的 profile-only Frontier **没有恢复排序**:92 个真实 anchors 在 simulator 中全部 SLO-infeasible,12 个 config 因而全部并列,最坏 tie-break regret 为 `60.91%`。这否证了“旧 profile 版本不一致是主要原因”这一简单解释,并把问题收敛到 execution context、operator composition 与 mixed-state schema。
- 在 Qwen3-235B-A22B-FP8 prefill-only 上,补齐 FP8/MoE profile 与 serving semantics、但不做端到端 action calibration 后,Frontier 的最优集合与真机完全一致,Spearman ρ 为 `0.9487`,20/20 个可比较非 tie config pair 同序,选择 regret 为 `0`。
- 在 Qwen3-235B-A22B-FP8 fixed-shape mixed 上,Frontier 同样给出了与真机完全相同的 TP4 top set,Kendall τ-b=`0.8944`、worst tie-break regret=`0`。但这次成功掩盖了一个明确的机制错误:Frontier 认为同一 TP family 内四个 MNS/MBT config 完全等价,真机 TP8 capacity 却形成对角为 0.30、非对角为 0.20 req/s/GPU 的 checkerboard interaction。34 个 config-load labels 中有 10 个 false-infeasible;20 个 real non-tie pairs 中只保持 16 个方向。
- 现有结果表明:**在已对齐的受控 case 中,绝对 capacity 有 gap、甚至 action differential 错误,都不必然妨碍 Frontier 找到当前 surface 的最优 config。** 统一 dash0 campaign 已完整覆盖 Qwen235 FP8 prefill-only 与 fixed-shape mixed,但仍不能外推到 trace-faithful mixed 或 decode-only,也不能忽略达到这种 fidelity 所需的真机 profile、KV capacity、runtime-semantic patch 或 calibration 成本。
- 新增的 Qwen3-30B-A3B BF16 prefill-only 对照在没有 decode、prefix reuse 和 true-mixed attention 的情况下仍然失败:真机 top set 是四个 TP4 config,Frontier top set 却是全部 TP1/TP2 config,top set 无交集,worst regret=`12.5%`、Kendall τ-b=`-1.0`,32 个 real non-tie pairs 全部反向。这直接否证了“prefill-only 是 simulator ranking 充分容易条件”。
- 现有结果更支持一个 **margin-aware fidelity** 解释:action-differential residual 可以很大,但只有当它足以穿过 real decision margin 时才会导致选错。Qwen235 mixed 中真机 TP4 相对最好 TP8 的 margin 是 `2×`,足以掩盖同 TP family 内的机制错误;Qwen30 prefill-only 中 TP scaling 差分更细,Frontier 的 residual 直接反转了 topology ordering。模型大小或 execution phase 单独都不足以解释现有结果。
因此,现阶段最准确的 research statement 不是“simulator 排序一定错误”,而是:
> Simulator 的 usefulness 取决于 compatibility envelope。问题是需要多少、什么类型的真机信息,才能使其 config ranking 可被信任;以及当 workload、runtime 或 execution topology 变化时,如何低成本判断该 envelope 是否仍成立。
> Simulator 的 usefulness 取决于 action-differential residual 是否小于真实 decision margin。问题不是简单区分 prefill 与 mixed,而是定位哪些 scheduler-state-conditioned execution residual 会随 TP、batch composition 和负载被放大,并用最少的真机信息判断 ranking 是否足够可信。
## 评测口径
@@ -89,6 +90,22 @@ Frontier 原生 profile schema 可以按 `num_tensor_parallel_workers` 选择 TP
该 case 是有意设计的 prefill mechanism-isolation workload:output 固定为 1,prefix cache 关闭,并使用固定 64-request cohort。它不保持原 trace 的 output-length distribution 和 prefix reuse,因此不能被称为 trace-faithful workload,也不能代表 mixed serving。
### Case D:Qwen3-30B-A3B BF16 prefill-only
| 项目 | 设置 |
|---|---|
| 真机 | `dash0`,8×NVIDIA H20;每个 job 按 TP 独占 GPU |
| model/runtime | `Qwen/Qwen3-30B-A3B`;community vLLM `0.20.0+cu129`(source `88d34c6409e9fb3c7b8ca0c04756f061d2099eb1`),BF16 weights/activation/KV,FA3,runtime 默认 CUDA graph |
| workload | 64 个不同 token-chain prompts;ISL=2,048、OSL=1、uniform open-loop QPS、prefix cache off |
| config surface | `TP∈{1,2,4} × MNS∈{8,16,32,64}`,MBT=8,192,chunked prefill on,共 12 cells |
| simulator | Frontier commit `d9cfeb6d8791fbf2f295dd9744c56a666171776e` + 当前 compatibility patches + vLLM 0.20 same-stack `profile-v2`;无 E2E calibration、decode graph=`none`、analytical collective |
| load lattice | base system rates `{4,8,16,32,64}` req/s;事先声明的 common refinement 为 `{5,6,7}` req/s/GPU |
| real anchor | 每个 `(config,rate,round)` fresh server;两轮独立运行且第二轮反转顺序;两轮都 pass 才算 feasible |
| SLO | 至少 61/64 requests 满足 TTFT≤1,256 ms |
| primary objective | 最大被测试可行 offered req/s / 实际 TP GPUs |
这个 case 是对“prefill-only 是 simulator 的容易区间”的直接可证伪测试。它刻意去掉 decode、true-mixed batch、prefix reuse 和 KV-residency feedback,但保留 TP 改变下的 local shard、collective、batching 与 scheduler queue。Frontier surface 在查看真机 ranking 前冻结,没有使用本 surface 的 serving latency 拟合 scale。
## Workload fidelity 修正
`thinking_w20260327_1000` 的 600 秒原始窗口包含 15,479 requests,字段包括 exact prompt、arrival、`input_length`、`output_length`、session parent/turn 和 block-size=64 的 `hash_ids`。只读审计得到:
@@ -126,10 +143,11 @@ trace 的 source hash block size 为 64,而 community vLLM 0.10.2 的 CUDA KV
| Qwen30 mixed / old profile-only | 12 | TP2,MNS32 | TP4,MNS32/64 | miss | τ-b=0.000;exact sign=37.88% | 25.63% | 排序错误 |
| Qwen30 mixed / vLLM 0.20 profile-only | 12 | TP2,MNS32 | 全部 12 configs | 不可辨识 | τ-b=0.000;exact sign=7.58% | 60.91% | 同栈 raw profile 仍不足 |
| Qwen30 mixed / frozen per-TP calibration | 12 | TP2,MNS32 | TP2,MNS32/64 | hit,非 exact | τ-b=0.9668;exact sign=93.94% | 0.76% | dash0 |
| Qwen30 BF16 prefill-only / vLLM 0.20 profile-only | 12 | 全部 TP4 configs | 全部 TP1/TP2 configs | miss,无交集 | τ-b=-1.0000;real non-tie=0/32 | 12.50% | topology order 反转 |
| Qwen235 FP8 prefill / best-effort | 8 | TP4,MBT16K,MNS64/128 | 与 real 完全相同 | exact match | ρ=0.9487;non-tied 20/20 | 0 | 足以选最优 config |
| Qwen235 FP8 fixed-shape mixed / frozen full profile | 8 | 四个 TP4 configs | 与 real 完全相同 | exact match | τ-b=0.8944;exact sign=24/28;real non-tie=16/20 | 0 | 选对 topology;漏掉 TP8 MNS×MBT interaction |
最重要的区别是:Qwen30 的 high-fidelity 结果依赖 per-TP E2E calibration;Qwen235 的 high-fidelity 结果不依赖本 case 的 E2E calibration,但依赖同 runtime/hardware 的 operator profile、真实 KV capacity 和多处 compatibility fixes。二者都不能表述为“拿 stock Frontier 零成本预测即可”。
最重要的区别是:Qwen30 的 high-fidelity mixed 结果依赖 per-TP E2E calibration,而新 prefill-only profile-only 实验证明“去掉 decode/mixed 状态”也不足以恢复 ranking。Qwen235 的 high-fidelity 结果不依赖本 case 的 E2E calibration,但依赖同 runtime/hardware 的 operator profile、真实 KV capacity 和多处 compatibility fixes。两个 model 的 stack 和精度不同,所以不能把差异直接归因为 model size;二者也都不能表述为“拿 stock Frontier 零成本预测即可”。
## Case A baseline 结果:Qwen30 mixed serving
@@ -311,6 +329,53 @@ MNS 128 fail pass
原预注册的 TPOT 40 ms 因最低负载已不可行而失去 capacity-ranking 可辨识性;本文已把 150 ms 明确记录为 post-pilot protocol amendment,并保留 40 ms 全部失败的 sensitivity 结果,没有把 SLO change 隐藏成预注册结论。
## Case D 结果:Qwen30 BF16 prefill-only
![Qwen3-30B BF16 prefill-only simulator-vs-real config ranking](docs/assets/simulator-fidelity/qwen30-prefill-ranking.png)
结果不是“绝对 capacity 有偏差但 rank 可用”,而是完整的 topology ordering reversal:
| TP | MNS | Real | Frontier profile-only | 差异 |
|---:|---|---:|---:|---:|
| 1 | 8/16/32/64 | 7.0 | **8.0** | +1.0 |
| 2 | 8/16/32/64 | 7.0 | **8.0** | +1.0 |
| 4 | 8/16/32/64 | **8.0** | 6.0 | -2.0 |
单位为最大被测试 SLO-feasible req/s/GPU。四个 TP4 configs 是真机 top set;Frontier 却把全部八个 TP1/TP2 configs 判为 top set,两者无交集。部署任一 simulator top config 都只能在真机上得到 7 req/s/GPU,因此 optimistic 与 worst tie-break regret 都为 `1-7/8=12.5%`。Kendall τ-b=`-1.0`;32 个 real non-tie pairs 中 0 个同序。96 个 config-load decisions 中 80 个一致,但同时有 8 个 false-feasible 和 8 个 false-infeasible,它们刚好跨过了不同 TP family 的 capacity boundary。
### 错误从哪里开始放大
代表性 `MNS=8` anchors 表明,低负载单次 execution time 并没有数倍偏差,错误主要在接近饱和时被 queue 放大:
| Config / system rate | Real TTFT p95(两轮) | Frontier TTFT p95 | Real / sim SLO |
|---|---:|---:|---|
| TP1 @ 4 req/s | 154.1 / 153.6 ms | 171.6 ms | pass / pass |
| TP1 @ 8 req/s | 1289.2 / 1254.4 ms | 516.4 ms | fail / pass |
| TP2 @ 8 req/s | 97.7 / 93.8 ms | 122.2 ms | pass / pass |
| TP2 @ 16 req/s | 1389.9 / 1365.0 ms | 962.8 ms | fail / pass |
| TP4 @ 4 req/s | 82.3 / 69.6 ms | 93.1 ms | pass / pass |
| TP4 @ 32 req/s | 1136.6 / 1134.0 ms | 1787.9 ms | pass / fail |
这排除了“只要给所有 kernel 乘一个 global scale 就能修好”的解释:相同 stack 在低负载下接近,但在不同 TP 的饱和边界上向相反方向偏移。更符合数据的抽象是:小的 per-step composition residual 改变 service rate,再通过 scheduler queue 的非线性反馈放大成 TTFT 和 capacity 边界错误。
当前证据可以排除一些原因,但还不能唯一定位根因:
1. **Decode/true-mixed schema 不是必要条件。** 这个 workload 没有 decode、FULL decode CUDA graph、fused true-mixed attention 或 initial-KV state,排序仍然失败。这些机制可能在 mixed/decode 中进一步增大误差,但不是本次失败的前提。
2. **Communication 可能解释部分 TP scaling,但不能单独解释全部误差。** `profile-v2/allreduce.json` 已有 24 个 TP2/TP4 实测 rows,但 base Frontier 为了保持历史对照使用 analytical 600-Gbps/1-µs collective,没有注入这些数据。下一步必须单独做 measured-collective ablation;但 TP1 无 collective 仍在 8 req/s 出现 773 ms 的 p95 低估,所以 collective 不会是唯一根因。
3. **Profile 覆盖了 token count,却未必覆盖 scheduler 实际产生的 batch composition。** linear/MoE rows 覆盖到 8,192 tokens,但 exact-2,048 pure-prefill attention 在每个 TP 下只有 batch=1 的直接样本;实际 MBT=8,192 可以产生多个 2,048-token sequence 的组合。这是一个需要补测的 coverage hypothesis,不是已证明根因。
4. **Routing、step composition 和 scheduler batch state 仍然是联合候选。** pure-prefill 只排除了 phase mixing,没有排除 MoE routing、TP-specific local shape、launch/fusion 和持续负载下 batch/queue trajectory 的耦合。
### 为什么 235B 能选对,30B 却选错
现有数据不支持“235B 大所以 simulator 更容易”这种模型大小因果。两个 case 的 precision、vLLM 版本、attention backend、graph mode、EP 和 profile closure 都不同。能被数据直接支持的区别是 **decision margin**:
- 235B mixed 真机中 TP4 最优 capacity 为 0.60 req/s/GPU,最好 TP8 为 0.30,有 `2×` margin;Frontier 虽然漏掉 TP8 的 MNS×MBT interaction,仍预测 TP4/TP8 为 0.40/0.15,所以 residual 没有穿过全局拓扑边界。
- 30B prefill-only 真机 TP4 相对 TP1/TP2 只有 8 vs. 7 req/s/GPU 的 margin。Frontier 预测为 6 vs. 8,TP-dependent residual 大于真实 margin,因而把最优 topology 完整反转。
因此,“prefill-only 容易,decode/mixed 困难”的强假设已被否证。phase 仍可能改变 residual 的幅度,但它不是 fidelity 的充分条件。按预注册 decision rule,此时不应继续无区分度地扩展更多 phase cases,而应在 Qwen30 同一 model/workload 上按单变量顺序做:`measured collective injection` → `batch-composition-conditioned pure-prefill attention/step profile` → 在 TP1@8、TP2@16、TP4@32 对齐 real/sim scheduler batch、queue 与 per-step critical path → 最后再测 routing/graph。
本 case 接受的 ground truth 共 24 个 fleet jobs、192 个 fresh-server anchors、12,288 个 measured requests 和 4,512 个 warmup requests,消耗 12.07 H20-GPU-hours。运行中曾因 fleet controller 在 fresh-server 空窗误判 GPU 为空闲而产生重叠 launch;这些 attempts 未被合并到 accepted artifact root,已整体隔离并用独立 queue state 重跑。最终 comparison SHA256 为 `c9a9cac9f60c7be804d1cb9466c455f8fe9e3a8dc60b9cec3329bde6a8c19334`。
## 尚不能纳入 simulator ranking 的 case
### 原 internal-runtime Qwen235 prefill-only
@@ -328,11 +393,12 @@ MNS 128 fail pass
当前证据的结论是:
1. **绝对 gap 不是否决 simulator 的理由。** Qwen235 中 11%--50% 的 capacity 低估仍可保持 zero-regret config selection。
2. **但 rank 成功不能证明模型机制正确。** Qwen235 prefill 的 TP8 MBT differential 错误,fixed-shape mixed 又漏掉 TP8 的 MNS×MBT 非加性交互;Qwen30 还有 28/92 anchor SLO labels 错误。只是当前 decision margin 足以容忍这些 residual。
3. **alignment 是结果的一部分。** Qwen30 需要 per-TP E2E calibration 才能恢复排序;Qwen235 不需要本 case E2E calibration,但需要同栈 FP8 profiles、真机 KV capacity 和 simulator patches。论文必须报告这部分真机成本,不能把它隐藏在“offline profiles”中。
4. **目前不能建立“simulator 全局选优普遍失败”的 premise。** 受控 prefill、fixed-shape mixed 和历史 mixed surface 上,经过 alignment 的 Frontier 已经能选到最优或 0.76% 内的近最优 config。更有证据的 research premise 是:aggregate selection success 会掩盖 action interaction 与 state-transition model 的错误;若要声称全局选优失败,仍必须在 dash0 的 trace-faithful mixed、decode-only、prefix cache 或跨 topology case 上得到稳定反例。
2. **rank 成功不能证明模型机制正确,rank 失败则表明 residual 穿过了 decision margin。** Qwen235 prefill 的 TP8 MBT differential 错误,fixed-shape mixed 又漏掉 TP8 的 MNS×MBT 非加性交互,但大 topology margin 保住了 top set;Qwen30 prefill-only 的较小 margin 被 TP-dependent saturation residual 穿过,导致 τ-b=-1 和 12.5% regret。
3. **prefill-only 不是 fidelity 的充分容易条件。** Qwen30 在没有 decode、prefix reuse、initial KV 和 true-mixed batch 时仍选错 topology。phase 可以改变 residual,但不能单独作为 compatibility-envelope 边界。
4. **alignment 是结果的一部分。** Qwen30 mixed 需要 per-TP E2E calibration 才能恢复排序,同栈 operator profile 或去掉 mixed phase 都不足;Qwen235 不需要本 case E2E calibration,但需要同栈 FP8 profiles、真机 KV capacity 和 simulator patches。论文必须报告这部分真机成本,不能把它隐藏在“offline profiles”中。
5. **现在有了可复现的全局选优反例,但尚不足以声称 simulator 普遍失败。** Qwen30 BF16 prefill-only 是一个无 top-set overlap 的稳定反例;Qwen235 两个 case 又证明 Frontier 在某些 envelope 内足以选优。更有研究价值的 premise 是:**什么 state-conditioned action residual 决定 ranking 是否能跨过 real margin,以及如何在不做全 surface 真机 sweep 的情况下检测这个风险。**
后续每个 case 建议使用同一 gate:worst selected-config regret ≤5%、tie-aware rank correlation ≥0.8、足够数量的 informative pairs、ground-truth bracket 不足以反转最优决策,并单独报告达到该结果所需的 real-GPU profiling/calibration cost。
后续每个 case 建议使用同一 gate:worst selected-config regret ≤5%、tie-aware rank correlation ≥0.8、足够数量的 informative pairs、ground-truth bracket 不足以反转最优决策,并单独报告达到该结果所需的 real-GPU profiling/calibration cost。当前下一 gate 是在 Qwen30 prefill-only 上做同模型单变量 context ablation,而不是继续扩展跨模型 phase 矩阵。
## 数据与复现
@@ -340,6 +406,10 @@ MNS 128 fail pass
- 画图脚本:[plot_simulator_fidelity.py](scripts/plot_simulator_fidelity.py)
- Qwen30 audit:[report.md](runs/frontier-multicase-sufficiency-v0/results/qwen30-baseline/report.md)
- Qwen30 aligned metrics:[metrics.json](runs/frontier-slo-alignment-v0/results/metrics.json)
- Qwen30 prefill-only experiment card:[experiment-card.md](runs/frontier-phase-factorial-v0/experiment-card.md)
- Qwen30 prefill-only comparison:[comparison.json](runs/frontier-phase-factorial-v0/results/final/comparison.json)
- Qwen30 prefill-only capacity table:[capacity.csv](runs/frontier-phase-factorial-v0/results/final/capacity.csv)
- Qwen30 prefill-only analyzer:[analyze_qwen30_prefill_fidelity.py](runs/frontier-phase-factorial-v0/analyze_qwen30_prefill_fidelity.py)
- Qwen235 fixed-cohort comparison:[v2_refined_comparison.json](runs/frontier-multicase-sufficiency-v0/best_effort/fixed_cohort_evidence/v2_refined_comparison.json)
- Qwen235 full report:[report.md](runs/frontier-multicase-sufficiency-v0/best_effort/fixed_cohort_evidence/report.md)
- Fixed-shape mixed comparison:[comparison.json](runs/frontier-multicase-sufficiency-v1/results/t0-final/comparison.json)
@@ -357,4 +427,17 @@ MNS 128 fail pass
```bash
python3 scripts/plot_simulator_fidelity.py
python3 runs/frontier-phase-factorial-v0/analyze_qwen30_prefill_fidelity.py \
--fleet-artifacts runs/frontier-phase-factorial-v0/fleet-artifacts-exclusive \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-tp1/frontier_surface_frozen.json \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-tp2/frontier_surface_frozen.json \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-tp4/frontier_surface_frozen.json \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-refine-tp1/frontier_surface_frozen.json \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-refine-tp2/frontier_surface_frozen.json \
--simulator-manifest runs/frontier-phase-factorial-v0/simulator-refine-tp4/frontier_surface_frozen.json \
--output-root runs/frontier-phase-factorial-v0/results/final
cp runs/frontier-phase-factorial-v0/results/final/qwen30-prefill-ranking.png \
docs/assets/simulator-fidelity/qwen30-prefill-ranking.png
```