Skip to content

fix(agentx): adopt additive AIPerf main warmup - #2415

Merged
cquil11 merged 1 commit into
mainfrom
agent/bump-aiperf-main-deterministic-warmup
Jul 30, 2026
Merged

fix(agentx): adopt additive AIPerf main warmup#2415
cquil11 merged 1 commit into
mainfrom
agent/bump-aiperf-main-deterministic-warmup

Conversation

@cquil11

@cquil11 cquil11 commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Pin the shared AIPerf submodule to be758d62 on synchronized SemiAnalysisAI/aiperf main.
  • Run mandatory snapshot primers followed by 10 additional warmup requests per lane.
  • In agentx-fast, use one additional warmup request per lane and a 20-minute profile.
  • Keep AIPerf main's timing-faithful spread phase starts; InferenceX does not pass --burst-phase-starts.
  • Emit rolling TTFT, ITL, and throughput metrics every 30 seconds.
  • Forward the new warmup control through AMD sibling clients and remove obsolete duration overrides.

The 10-second cap applies only to whole-system idle periods. Recorded per-trace end-to-start delays remain intact.

Validation

  • python -m pytest utils/matrix_logic/ utils/test_process_changelog.py -q — 238 passed
  • Bash syntax checks for the shared benchmark and AMD sibling-client scripts
  • Normal command: 10 additional warmup requests per lane, 60-minute profile
  • Fast command: 1 additional warmup request per lane, 20-minute profile
  • AIPerf configuration tests — 2,018 passed, 52 skipped
  • AIPerf generated CLI documentation and configuration schema checks
  • AIPerf pre-commit suite
  • B300 validation run: all 12 throughput jobs passed across concurrency 1/2/4/8/16/24, with and without KV offload

The workflow's unrelated full SWE-bench eval was externally canceled; all AgentX throughput jobs completed successfully.

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@cquil11
cquil11 marked this pull request as ready for review July 29, 2026 22:09
@cquil11
cquil11 requested a review from a team July 29, 2026 22:09
@claude

claude Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cquil11's task in 4m 6s —— View job


Review of PR #2415

  • Gather context (diff vs origin/main, read changed files)
  • Review benchmarks/benchmark_lib.sh warmup/metrics changes
  • Verify submodule pin consistency (.gitmodules, workflows, utils/aiperf)
  • Post review feedback

Summary

The core change is sound: build_replay_cmd cleanly swaps time-based cache warmup (--agentic-cache-warmup-duration) for deterministic per-lane warmup (--warmup-requests-per-lane, 10 normally / 1 with agentx-fast), adds --stats-interval 30 with AIPERF_UI_REALTIME_METRICS_ENABLED=true, and the AGENTS.md / workflow-description updates match the new behavior. Both single-node and multi-node agentic paths route through the same build_replay_cmd, so the switch applies consistently.

One 🟡 warning posted inline (benchmarks/benchmark_lib.sh:1745): the removed AIPERF_AGENTIC_CACHE_WARMUP_DURATION knob is still referenced in four deepseek-v4/agentic recipe YAMLs (now a silent no-op) and in the server_sglang.sh client env-forwarding allowlist — which also does not forward the new AIPERF_WARMUP_REQUESTS_PER_LANE, so recipe-level warmup overrides can't reach the AMD multi-node sibling-client container.

Notes on verification scope: this environment couldn't reach the SemiAnalysisAI/aiperf fork (submodule init, gh api, and web fetch are all restricted here), so I could not independently confirm that c57ad643 is on the fork's main or that the new CLI flags exist at that pin — the linked B300 validation run exercises the real command, which covers that in practice. Also, the runner's working tree showed a local revert of .gitmodules to the old branch; the committed PR content correctly points at main, so that's checkout noise, not a PR issue.

No blocking issues found.

@cquil11 cquil11 added agentx-fast Run AgentX throughput with 1 warmup request per lane and a 20-minute profile; not reusable sweep-enabled labels Jul 29, 2026 — with ChatGPT Codex Connector
Comment thread benchmarks/benchmark_lib.sh
@github-actions

Copy link
Copy Markdown
Contributor

Comment thread AGENTS.md
Comment thread benchmarks/benchmark_lib.sh
@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@cquil11
cquil11 force-pushed the agent/bump-aiperf-main-deterministic-warmup branch from 786f856 to 9543505 Compare July 30, 2026 01:17
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@cquil11
cquil11 force-pushed the agent/bump-aiperf-main-deterministic-warmup branch from 9543505 to aac2334 Compare July 30, 2026 02:36
@cquil11 cquil11 removed sweep-enabled agentx-fast Run AgentX throughput with 1 warmup request per lane and a 20-minute profile; not reusable labels Jul 30, 2026
@cquil11 cquil11 changed the title feat(agentx): adopt deterministic AIPerf warmup fix(agentx): adopt additive AIPerf main warmup Jul 30, 2026
Pin the shared AIPerf submodule to the synchronized main revision with additive per-lane warmup after mandatory primers while retaining timing-faithful spread phase starts. Align the workflow documentation with the request-count fast preset.

中文:将共享 AIPerf 子模块固定到已同步的 main 版本,在必需预热请求之后执行额外的逐 lane 预热,并保留符合轨迹时序的分散阶段启动。同步更新工作流文档,使其准确描述基于请求数量的快速预设。
@cquil11
cquil11 force-pushed the agent/bump-aiperf-main-deterministic-warmup branch from aac2334 to 3f788b0 Compare July 30, 2026 02:47
@cquil11
cquil11 merged commit ddeb02e into main Jul 30, 2026
5 checks passed
@cquil11
cquil11 deleted the agent/bump-aiperf-main-deterministic-warmup branch July 30, 2026 02:48
seungrokj pushed a commit that referenced this pull request Jul 30, 2026
Pin the shared AIPerf submodule to the synchronized main revision with additive per-lane warmup after mandatory primers while retaining timing-faithful spread phase starts. Align the workflow documentation with the request-count fast preset.

中文:将共享 AIPerf 子模块固定到已同步的 main 版本,在必需预热请求之后执行额外的逐 lane 预热,并保留符合轨迹时序的分散阶段启动。同步更新工作流文档,使其准确描述基于请求数量的快速预设。
hyukjlee added a commit that referenced this pull request Jul 30, 2026
…armup

Run 30511545046 tried lazy alone and is uninterpretable. It landed just after
#2415 swapped the agentic warmup from --agentic-cache-warmup-duration 600 to
--warmup-requests-per-lane 10 (benchmark_lib.sh:1793, plus a new utils/aiperf
pin), so it moved two variables at once. Its "0 successful / 49 total, OSL=1"
is the new warmup's one-token lane primers, not a lazy-offload symptom -- the
cell never left warmup.

That also invalidates the seven earlier fp8+offload failures as baselines: all
of them ran the old time-based warmup. So run the eager control at c8 on the
SAME warmup as lazy, in one dispatch, and compare those two only.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hyukjlee added a commit that referenced this pull request Aug 3, 2026
…armup

Run 30511545046 tried lazy alone and is uninterpretable. It landed just after
#2415 swapped the agentic warmup from --agentic-cache-warmup-duration 600 to
--warmup-requests-per-lane 10 (benchmark_lib.sh:1793, plus a new utils/aiperf
pin), so it moved two variables at once. Its "0 successful / 49 total, OSL=1"
is the new warmup's one-token lane primers, not a lazy-offload symptom -- the
cell never left warmup.

That also invalidates the seven earlier fp8+offload failures as baselines: all
of them ran the old time-based warmup. So run the eager control at c8 on the
SAME warmup as lazy, in one dispatch, and compare those two only.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
thangquang09 pushed a commit to vngcloud/InferenceX that referenced this pull request Aug 23, 2026
Reference run 30163138459 (v0.5.14, 2026-07-25) is no longer comparable to
anything, because the aiperf load model changed underneath us. Upstream SemiAnalysisAI#2415
(ddeb02e, 2026-07-30) dropped --agentic-cache-warmup-duration 600 for
--warmup-requests-per-lane 10, and SemiAnalysisAI#2457 (ce8a34e, 2026-08-03) added
--trace-idle-gap-cap-seconds 300, which makes the replay honour the trace's
recorded think-time gaps instead of firing back-to-back. Both landed after that
run and reached this fork through the routine main merge 105fa44.

This is not a local regression. No config key here overrides an AIPERF_* timing
variable; the defaults are upstream hard-codes at benchmark_lib.sh:1810 and
:2123; our benchmark_lib.sh delta is remote-bench plumbing only (API-key
redaction, REMOTE_RESET_URL, TLS bypass, cancel trap) and touches no timing line;
and the aiperf submodule moved 0d2aa057 -> 754356e9 with no local pin.

Measured size of the distortion, server-side, reference against run 32585334238
at the same nominal c24: mean #running-req 3.36 -> 2.27, warmup-dropped records
1496 -> 264, total requests 4241 -> 2694. Aggregate throughput therefore reads
low and latency reads good on the newer run purely because the server idles more
of the hour. Any agg_bmk.json comparison across 2026-08-03 is invalid.

glm5.2v0514_fp4_h200_sglang.sh is a byte-identical copy of
glm5.2_fp4_h200_sglang.sh, pinned so later edits to that file cannot silently
redefine this arm -- in particular the pending addition of
--dsa-prefill-backend flashmla_sparse_q8, which the baseline needs on v0.5.18 and
which would defeat this arm's purpose. Verified with git diff against the
reference run's sha 70a7911: the file matches what that run executed.

The arm is safe on v0.5.14 without that flag, and omits it deliberately. Crash #1
(num_splits must have shape (b+1)) needs a prefill CUDA graph captured at
runtime, and v0.5.14 defaults prefill to backend='disabled' where v0.5.18
defaults it to 'breakable'. Neither run passes --cuda-graph-backend-prefill, so
that is an upstream default flip, and crash #1 is a v0.5.18 regression rather
than a latent bug. The reference run confirms the config survives a full 3600s.

conc-list is [16, 24] to match the reference; c8 is omitted because the reference
has no c8 point to compare against.

Read this against glm5.2dplm (run 32585334238), not against the v0.5.18 baseline
arm, which has never produced a result. That pair is a five-variable bundle --
HiCache #30393, the prefill-graph default flip, flashmla_sparse_q8,
--enable-dp-lm-head, --enable-dp-attention-local-control-broadcast -- and is the
honest end-to-end upgrade delta, not an isolation of any one change. The isolated
evidence for #30393 is already in hand from accept metrics: collapsed decode
batches (accept rate < 0.15) fall from 3.28% at c16 and 2.02% at c24 to 0.00% at
every concurrency, mean accept length 2.60 -> 3.04, accept rate 0.53 -> 0.68, and
v0.5.14's accept length degrades with batch size (2.81 at 2 running requests down
to 2.31 at 5) where v0.5.18 holds flat at 3.03-3.07.

Verified: bash -n clean, runners/test_launch_h200_greennode.py passes at 21
benchmarks, inferencex-agentic-dispatch preflight PRECHECK PASSED with 2 matrix
rows on h200-greennode_03.

参照运行 30163138459(v0.5.14,2026-07-25)已无法与任何运行比较,因为 aiperf 的负载
模型在我们脚下发生了变化。上游 SemiAnalysisAI#2415(ddeb02eb,2026-07-30)以
--warmup-requests-per-lane 10 取代了 --agentic-cache-warmup-duration 600,SemiAnalysisAI#2457
(ce8a34e4,2026-08-03)新增了 --trace-idle-gap-cap-seconds 300,使回放遵循 trace 中
记录的真实思考间隔,而非连续发送。两者均在该运行之后合入,并通过常规的 main 合并
105fa44 进入本 fork。

这并非本地引入的回归。此处没有任何 config key 覆盖 AIPERF_* 计时变量;默认值是上游在
benchmark_lib.sh:1810 与 :2123 的硬编码;我们对 benchmark_lib.sh 的改动仅为
remote-bench 管道(API key 脱敏、REMOTE_RESET_URL、TLS 跳过、取消陷阱),未触及任何
计时行;aiperf 子模块由 0d2aa057 变为 754356e9,且无本地 pin。

失真幅度的服务端实测,参照运行与运行 32585334238 在同一标称 c24 下对比:平均
#running-req 3.36 -> 2.27,warmup 丢弃记录 1496 -> 264,总请求数 4241 -> 2694。因此
较新运行的聚合吞吐偏低、延迟偏好,纯粹是因为服务器在这一小时中空闲更多。任何跨越
2026-08-03 的 agg_bmk.json 比较均无效。

glm5.2v0514_fp4_h200_sglang.sh 是 glm5.2_fp4_h200_sglang.sh 的逐字节副本,固定下来以
免后续对该文件的修改悄然重定义本臂 —— 尤其是待加入的
--dsa-prefill-backend flashmla_sparse_q8,它在 v0.5.18 上为 baseline 所必需,却会使本臂
失去意义。已用 git diff 对照参照运行的 sha 70a7911 验证:本文件与该运行执行的内容一致。

本臂在 v0.5.14 上无需该开关即可安全运行,且系刻意省略。崩溃 #1
(num_splits must have shape (b+1))需要在运行期捕获 prefill CUDA graph,而 v0.5.14 的
prefill 默认为 backend='disabled',v0.5.18 则默认为 'breakable'。两次运行均未传入
--cuda-graph-backend-prefill,故这是上游默认值翻转,崩溃 #1 是 v0.5.18 的回归而非潜伏
缺陷。参照运行已证明该配置可完整跑满 3600 秒。

conc-list 取 [16, 24] 以对齐参照运行;省略 c8,因参照运行没有可比的 c8 数据点。

请将本臂与 glm5.2dplm(运行 32585334238)对读,而非与从未产出结果的 v0.5.18 baseline
臂对读。该配对是五变量的组合 —— HiCache #30393、prefill graph 默认值翻转、
flashmla_sparse_q8、--enable-dp-lm-head、
--enable-dp-attention-local-control-broadcast —— 它是诚实的端到端升级差值,而非对其中
任一项的隔离测量。#30393 的隔离证据已由 accept 指标给出:坍塌的 decode batch
(accept rate < 0.15)由 c16 的 3.28%、c24 的 2.02% 降至各并发下的 0.00%,平均 accept
length 2.60 -> 3.04,accept rate 0.53 -> 0.68;且 v0.5.14 的 accept length 随 batch
增大而退化(2 个 running request 时 2.81,降至 5 个时 2.31),而 v0.5.18 稳定在
3.03-3.07。

已验证:bash -n 通过,runners/test_launch_h200_greennode.py 在 21 个基准下通过,
inferencex-agentic-dispatch preflight 在 h200-greennode_03 上 PRECHECK PASSED,
生成 2 个 matrix 行。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

1 participant