Skip to content

feat(agentx): run GLM-5.2 FP4 MI355X ATOM TP8 C1/C2 on mono decode / feat(agentx):GLM-5.2 FP4 MI355X ATOM TP8 C1/C2 改用 mono decode - #4608

Open
zhuyuhua-v wants to merge 2 commits into
mainfrom
amd/glm5.2-fp4-mi355x-atom-tp8-mono-1027
Open

zhuyuhua-v wants to merge 2 commits into
mainfrom
amd/glm5.2-fp4-mi355x-atom-tp8-mono-1027

Conversation

@zhuyuhua-v

@zhuyuhua-v zhuyuhua-v commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

ROCm/ATOM PR 2736 (merged as f39bff7ef) opens GLM-5.2 mono decode to TP8. Before it, TP8 logged GLM-5.2 MonoKernel off: TP 8 not in (4,). The PR's recipe runs AgentX TP8 C1/C2 as the TP4 C1/C2 command with -tp 8. This PR moves glm5.2-fp4-mi355x-atom-agentic-mtp to that recipe:

  • Image rocm/atom-dev:nightly_202610181506 (ATOM 0.1.8.dev77+gdf86c4829) -> nightly_202610271459 (ATOM 0.1.9.dev59+g06dbf6692), the first nightly that contains f39bff7ef. The atomesh router container_image digest moves from 1bb1909a to 5332ae78 (same nightly as the workers).
  • TP8 C1/C2 run mono decode (ATOM_MONO_ENABLE: '1') on the external-indexer path at 3 draft tokens (golden AL 2.99). max-num-seqs equals CONC, with graphs [1] / [1,2]. Before: 5 draft tokens, max-num-seqs 2 / 4, graphs [1,2] / [1,2,4].
  • No other point changes. TP8 C4, TP4 C1-C10 and TP4+DCP4 C16-C48 keep their settings and ATOM_MONO_ENABLE values. They rerun only because the image changed. LMCache stays 0.5.6.dev139+gf22dec28, the wheel both images pin.

Generated matrix (python -m infx.matrix.plan): 13 throughput jobs (TP4 C1/2/4/8/10, DCP4 C16/24/32/40/48, TP8 C1/2/4) plus the default per-engine-environment GSM8K: TP4 C2 (mono on; TP8 C1/C2 share this engine env), TP4 C10 and DCP4 C48.

Validation details

Upstream GPU evidence (ROCm/ATOM PR 2736): MI355X, nightly_202610181506 = ATOM df86c482 plus the TP8 admission. These runs used the PR's patch, not the 06dbf6692 image.

TP8 C1 accuracy: GSM8K first 250, 3-shot, real MTP3 acceptance, num_concurrent=1.

GSM8K flexible / strict MTP acceptance
mono on, run 1 0.932 / 0.932 76.35%
mono on, run 2 0.928 / 0.928 76.53%
mono off, run 1 0.932 / 0.936 75.14%
mono off, run 2 0.932 / 0.940 75.15%

TP8 C1 performance: AgentX C1, 3,600 s, forced AL 2.99. The TP4 column is InferenceX run 39540045682, job 121211066939.

Metric TP8, mono TP4, mono
p90 interactivity (tok/s/user) 310.30 265.94
Mean ITL (ms) 3.07 3.61
Mean TTFT (ms) 1,102.64 1,389.68
Total token throughput per GPU (tok/s) 2,491.48 4,511.13

Image provenance. The digest comes from the registry Docker-Content-Digest for rocm/atom-dev:nightly_202610271459. The image labels are org.opencontainers.image.revision: 06dbf66920bafb22afc391a43014500c3dc704ea and org.opencontainers.image.version: 0.1.9.dev59+g06dbf6692. git merge-base --is-ancestor f39bff7ef 06dbf6692 passes. Checked the same way, the old tag resolves to 1bb1909a, the digest #4308 used.

Local checks:

  • validate_perf_changelog --base-ref origin/main passes.
  • infx.matrix.changed lists glm5.2-fp4-mi355x-atom-agentic-mtp and glm5.2-fp4-mi355x-atom-agentic-mtp-mono. The -mono key is unchanged in amd-master.yaml, but it reads the same recipe, whose router digest moved.
  • Expanding override_tp8_c1 / _c2 / _c4 gives max-num-seqs 1 / 2 / 8, graphs [1] / [1,2] / [1,2,4,8], drafts 3 / 3 / 5, and ATOM_MONO_ENABLE 1 / 1 / 0.
AI model disclosure
  • Model/version: Claude Opus 5.5 (claude-opus-5-5), via Claude Code.
  • Role: helped edit the recipe, master config and changelog, ran the local matrix/changelog checks, and drafted this description; zhuyuhua-v reviewed and submitted it.
PR checklist and change type

Type of Change

  • Bug fix
  • New feature
  • Configuration change
  • Documentation update
  • Other (please describe)

Checklist

  • I have completed the AI model disclosure and kept it current
  • I have tested my changes locally
  • I have updated documentation if necessary
  • If python -m infx.matrix.changed --base origin/main lists affected config keys, I have appended one new entry covering them to the physical end of inferencex-e2e/perf-changelog.yaml; if it lists none, I have added none. I have not edited historical entries
  • If this PR appends an inferencex-e2e/perf-changelog.yaml entry, it carries exactly one primary sweep label (a maintainer applies it on fork PRs): full-sweep-fail-fast (recommended), full-sweep-enabled, or non-canary-full-sweep-enabled. Optional modifiers all-evals, evals-only, and agentx-fast require a primary label; the last two block reuse while applied.
  • Before merging via reuse, an authorized maintainer (OWNER/MEMBER/COLLABORATOR) has commented /use <run_id> (or the legacy /reuse-sweep-run) on this PR. Do this only once there is a final full sweep that is all green with evals passing, since after this comment the primary sweep label will no longer automatically kick off new sweeps. Remove and re-add the primary sweep label to force a new sweep.
中文

ROCm/ATOM PR 2736(已合入,f39bff7ef)让 GLM-5.2 mono decode 支持 TP8。此前 TP8 会打印 GLM-5.2 MonoKernel off: TP 8 not in (4,)。该 PR 的 recipe 中,AgentX TP8 C1/C2 就是 TP4 C1/C2 的命令改为 -tp 8。本 PR 让 glm5.2-fp4-mi355x-atom-agentic-mtp 按这个 recipe 运行:

  • 镜像 rocm/atom-dev:nightly_202610181506(ATOM 0.1.8.dev77+gdf86c4829)-> nightly_202610271459(ATOM 0.1.9.dev59+g06dbf6692),这是第一个包含 f39bff7ef 的 nightly。atomesh router 的 container_image digest 从 1bb1909a 改为 5332ae78,与 worker 使用同一 nightly。
  • TP8 C1/C2 在 external-indexer 路径上运行 mono decode(ATOM_MONO_ENABLE: '1'),3 个 draft token(golden AL 2.99)。max-num-seqs 等于并发数,graph 为 [1] / [1,2]。原配置为 5 个 draft token,max-num-seqs 2 / 4,graph [1,2] / [1,2,4]。
  • 其他点位不变。 TP8 C4、TP4 C1-C10 和 TP4+DCP4 C16-C48 的设置及 ATOM_MONO_ENABLE 都不变,只因换镜像而重跑。LMCache 仍为 0.5.6.dev139+gf22dec28,两个镜像固定的是同一个 wheel。

生成的矩阵:13 个吞吐任务,外加按引擎环境默认选出的 GSM8K:TP4 C2(mono 开启;TP8 C1/C2 与其引擎环境相同)、TP4 C10 和 DCP4 C48。

验证数据见上方表格(ATOM PR 2736 的 TP8 C1 精度和性能,基于 df86c482 加该 PR 的补丁,不是 06dbf6692 镜像)。本地检查:changelog 验证器通过;infx.matrix.changed 列出主 key 和 -mono key(后者在 amd-master.yaml 中未改,但读取同一个 recipe,其 router digest 已更新);展开后的 TP8 recipe 参数与 ATOM recipe 一致。

AI 使用说明:Claude Opus 5.5(claude-opus-5-5,通过 Claude Code)协助修改 recipe、master config 和 changelog,运行本地检查并起草本说明;由 zhuyuhua-v 审阅并提交。

@zhuyuhua-v
zhuyuhua-v requested a review from a team October 28, 2026 08:56
Copilot AI balanced review requested due to automatic review settings October 28, 2026 08:56
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

  • Review: If this PR changes files owned by someone other than a repository admin or @SemiAnalysisAI/core, ask one eligible CODEOWNER to complete the latest PR_REVIEW_CHECKLIST.md before contacting a core maintainer on Slack. Follow the template exactly, including As a PR reviewer and CODEOWNER, I have reviewed this and have, so sign-off verification triggers.
  • PR verification: Sweeps run only when the PR appends an inferencex-e2e/perf-changelog.yaml entry and carries exactly one primary label: full-sweep-fail-fast (strongly recommended; canary plus per-matrix fail-fast), full-sweep-enabled (canary; matrix jobs continue after a failure), or non-canary-full-sweep-enabled (no canary or fail-fast). The modifiers all-evals, evals-only, and agentx-fast require a primary label. On fork PRs, a maintainer applies the label. See sweep labels and reuse.
  • After merging: PR authors must ensure all GitHub Actions jobs pass. Transient failures often pass on rerun; see how to rerun failed jobs.
中文

感谢你的贡献!

  • **审阅:**如果 PR 修改的文件归属于仓库管理员及 @SemiAnalysisAI/core 之外的 CODEOWNER,请先联系一位有资格的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,再通过 Slack 联系核心维护者。必须严格遵循模板,并保留 As a PR reviewer and CODEOWNER, I have reviewed this and have,才能触发签核验证。
  • **PR 验证:**只有当 PR 在 inferencex-e2e/perf-changelog.yaml 末尾追加了条目,并且恰好带有一个主标签时,才会运行扫描:full-sweep-fail-fast(强烈推荐;canary 加逐矩阵 fail-fast)、full-sweep-enabled(有 canary;矩阵任务在失败后继续运行)或 non-canary-full-sweep-enabled(无 canary,也无 fail-fast)。修饰标签 all-evals、evals-only 和 agentx-fast 必须与主标签一起使用。fork PR 的标签由维护者添加。参见扫描标签与复用。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@zhuyuhua-v
zhuyuhua-v force-pushed the amd/glm5.2-fp4-mi355x-atom-tp8-mono-1027 branch from 6b94f18 to cf84a73 Compare October 28, 2026 08:56
Comment on lines +1498 to 1504
# arm stays GPU-resident with no KV offload; TP8 C1/C2 also run mono decode at
# K3 (ROCm/ATOM PR 2736) and C4 stays at K5.
glm5.2-fp4-mi355x-atom-agentic-mtp:
image: rocm/atom-dev:nightly_202610181506
image: rocm/atom-dev:nightly_202610271459
model: amd/GLM-5.2-MXFP4
model-prefix: glm5.2
runner: cluster:mi355x-amds

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 (optional) The -mono eval key now runs old-nightly workers behind a new-nightly router, and the changelog never lists it. The glm5.2-fp4-mi355x-atom-agentic-mtp-mono key (amd-master.yaml:1525) still uses nightly_202610181506. It shares srt-recipe-dir: glm5.2/atom/mi355x-fp4-mtp, whose atomesh router digest moved to 5332ae78. Fix: bump the -mono image to nightly_202610271459 and add it to the new block's config-keys. That keeps router and workers on one nightly for both keys, which infx.matrix.changed already flags.

Why this was flagged

The recipe's container_image in agentic.yaml:9 moved from the old nightly's digest 1bb1909a to 5332ae78, which the PR says is nightly_202610271459. glm5.2-fp4-mi355x-atom-agentic-mtp-mono at amd-master.yaml:1525-1526 keeps image: rocm/atom-dev:nightly_202610181506 and reads the same recipe. Its GSM8K eval therefore pairs an ATOM 0.1.8 worker with an ATOM 0.1.9 router. On the base branch both were the same nightly. The PR description says infx.matrix.changed lists the -mono key. AGENTS.md:87 requires a changelog entry for the affected keys, but perf-changelog.yaml's new block lists only glm5.2-fp4-mi355x-atom-agentic-mtp, so no results are collected for the changed -mono run.

Verification: agentic.yaml:9 moves container_image: rocm/atom-dev@ sha256:1bb1909a... to @ sha256:5332ae78.... The -mono key at amd-master.yaml:1525-1526 keeps image: rocm/atom-dev:nightly_202610181506. After this change, -mono runs an old-nightly worker behind a new-nightly router. -mono appears nowhere in perf-changelog.yaml. validate_perf_changelog.py does not enforce coverage.

Comment on lines 224 to +231
agg:
gpus: 8
args:
max-num-seqs: 4
cudagraph-capture-sizes: '[1,2,4]'
num-speculative-tokens: 5
max-num-seqs: 2
cudagraph-capture-sizes: '[1,2]'
num-speculative-tokens: 3
env:
ATOM_MONO_ENABLE: '1'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 (optional) The newly enabled TP8 mono-decode path gets no GSM8K accuracy check, so a TP8-only correctness regression would publish unflagged. Eval rows are grouped by engine env alone, and TP8 C1/C2 now carry the same env as TP4 C1/C2. The group picks one row at the highest concurrency, and the tie at C2 goes to TP4 C2, listed first. Fix: give TP8 mono its own eval, for example a tp: 8 C1/C2 row in the -mono key with grouping that keeps TP8 apart from TP4.

Why this was flagged

override_tp8_c1/override_tp8_c2 (agentic.yaml:216-217, 230-231) set ATOM_MONO_ENABLE: '1', which gives them the same engine environment as override_tp4_c1/c2. fingerprint.py:81 engine_environment uses only role env. generate.py:802-812 groups single-node agentic rows by model/runner/framework/precision/spec/dp-attn/image plus _engine_env, with no tp field. generate.py:815 then picks max(entries, key=conc). Search-space order at amd-master.yaml:1516-1518 lists TP4 first, so TP4 C2 wins the C2 tie. Per the PR, ATOM keeps the fused indexer at TP4 only, so TP8 mono runs a different external-indexer kernel path. The PR also says TP8 C2 mono has never been measured on GPU. Both the main key and the -mono key (TP4 only, amd-master.yaml:1538) evaluate only TP4 C2. As a result, TP8 C1/C2 throughput from a code path with no accuracy check gets published to the dashboard. On base, TP8 C1/C2 ran the production non-mono path, which the TP4 C10 eval in the same env group covered.

Verification: agentic.yaml:216-217 and 230-231 now set ATOM_MONO_ENABLE: '1' for override_tp8_c1/c2, identical to override_tp4_c1/c2. generate.py:802-811 groups by _engine_env with no TP field, and generate.py:815 picks max(entries, key=conc), so the C2 tie goes to TP4 C2. TP8 C1/C2 therefore never get a GSM8K run.

Comment on lines +1498 to +1499
# arm stays GPU-resident with no KV offload; TP8 C1/C2 also run mono decode at
# K3 (ROCm/ATOM PR 2736) and C4 stays at K5.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 nit (optional): The added comment text (ROCm/ATOM PR 2736) records where the setting came from, which AGENTS.md's no-history comment rule forbids. Fix: drop the PR reference and keep only the technical note (TP8 C1/C2 run mono decode at K3, C4 stays at K5). The changelog entry already records the provenance.

Why this was flagged

AGENTS.md:57 says comments must not record history such as what a value replaced or where it came from, because git and perf-changelog.yaml are the record. The diff adds K3 (ROCm/ATOM PR 2736) and C4 stays at K5. to the amd-master.yaml comment at 1498-1499. That provenance already appears in the new perf-changelog.yaml block.

Verification: Triggered whenever this comment merges as written. AGENTS.md:57 says "No history: how code evolved, what it replaced, where it came from, or past results." The parenthetical "(ROCm/ATOM PR 2736)" at amd-master.yaml lines 1498-1499 cites the upstream PR that introduced the setting, which is provenance. Nothing breaks at runtime.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Findings marked 🟡 are optional suggestions and need no follow-up push.

Additional findings (outside the current diff — GitHub can't attach inline comments there):

  • 🔴 inferencex-e2e/uv-0.13.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:1 — A 17 MB uv wheel is committed to the project root. Every clone and checkout now carries this unused binary permanently in git history. Nothing in the repo references uv-0.13.6, and it has nothing to do with the GLM-5.2 config change. AGENTS.md routes dependency changes through pyproject.toml and uv.lock. Fix: remove the file from the commit, for example with git rm --cached and an amended or squashed commit, so it never reaches main.

    Why this was flagged

    The commit adds inferencex-e2e/uv-0.13.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17333810 bytes). A repo-wide grep for uv-0.13.6 finds nothing, so no build, CI or pyproject file uses it. After merge, every clone, CI checkout and runner sync downloads the extra 17 MB, and squash-merging keeps it in main's history for good. The base branch has no such artifact. No .gitignore rule or other check blocked it.

    Verification: The trigger is merging the PR as it stands. git diff --stat 6cbbb96e..HEAD shows the wheel as a new file: Bin 0 -> 17333810 bytes, and the base branch does not have this file. A repo-wide grep for uv-0\.13\.6|uv==0\.13 finds no files. The root .gitignore has no *.whl rule. A vendored uv wheel at the project root breaks AGENTS.md line 82.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The shared router-image update changes the mono configuration’s worker/router combination, but its omission from the changelog leaves it without required sweep or evaluation coverage.

1 open issue
What changed in this PR

Updates the GLM-5.2 FP4 MI355X ATOM AgentX configuration to enable mono decode for TP8 at concurrency 1 and 2, using a newer ATOM image with TP8 support.

Changes:

  • Advances the main configuration’s worker image and shared router digest.
  • Enables TP8 C1/C2 mono decode with three draft tokens and concurrency-matched admission and graph sizes.
  • Adds a performance changelog entry to rerun the main configuration; other points retain their tuning.
File Description
inferencex-e2e/​perf-changelog.yaml Records the image upgrade, TP8 tuning, and main-key sweep scope.
inferencex-e2e/​configs/​amd-master.yaml Updates the main worker image and explanatory comments.
inferencex-e2e/​benchmarks/​single_node/​srt-slurm-recipes/​glm5.2/​atom/​mi355x-fp4-mtp/​agentic.yaml Updates the router digest and enables mono decode for TP8 C1/C2.

Review effort: Balanced

pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4571

- config-keys:
- glm5.2-fp4-mi355x-atom-agentic-mtp
@zhuyuhua-v zhuyuhua-v added AMD full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures agentx AgentX benchmarks, recipes, and infrastructure labels Oct 28, 2026
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Track the TP8 recipe that ROCm/ATOM PR 2736 adds to
recipes/Agentic-GLM-5.2.md, on rocm/atom-dev:nightly_202610271459
(ATOM 06dbf6692), the first nightly that contains it.

- TP8 C1/C2 run the GLM-5.2 mono decode (ATOM_MONO_ENABLE=1) at 3 draft
  tokens (AL 2.99), max-num-seqs equal to CONC, graphs [1] and [1,2]: the
  TP4 C1/C2 command with -tp 8. TP8 C4 and every TP4/DCP4 point keep their
  settings and rerun only for the image.
- The atomesh router digest moves to the same nightly (5332ae78).

中文:按 ROCm/ATOM PR 2736 加入 recipes/Agentic-GLM-5.2.md 的 TP8 配方更新
MI355X ATOM AgentX 配置,镜像换为首个包含该 PR 的
rocm/atom-dev:nightly_202610271459(ATOM 06dbf6692)。TP8 C1/C2 使用
GLM-5.2 mono decode(ATOM_MONO_ENABLE=1),3 个 draft token(AL 2.99),
max-num-seqs 等于并发数,graph 为 [1] 和 [1,2],即 TP4 C1/C2 命令改为
-tp 8。TP8 C4 及所有 TP4/DCP4 点位设置不变,只因换镜像而重跑。atomesh
router digest 同步为同一 nightly(5332ae78)。

Signed-off-by: zhuyuhua-v <yuhzhu@amd.com>
@seungrokj

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 40661036447

@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

⚠️ Reuse source run 40661036447 (from PR #4608, commit cf84a73d5311) is not part of this PR. Its results will publish under this PR's changelog entry at merge.

中文

⚠️ 复用的来源运行 40661036447,来自 PR #4608,提交 cf84a73d5311,不属于本 PR,合并后其结果将以本 PR 的 changelog 条目发布。

@@ -33,15 +33,15 @@ base:
PYTHONNOUSERSITE: '1'
AITER_QUICK_REDUCE_QUANTIZATION: INT4

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this pass deepswe evals or BEAM on vs off? @seungrokj

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pretty sure it doesnt espcially at TP4 and TP8 lol

@@ -33,15 +33,15 @@ base:
PYTHONNOUSERSITE: '1'
AITER_QUICK_REDUCE_QUANTIZATION: INT4

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pretty sure it doesnt espcially at TP4 and TP8 lol

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agentx AgentX benchmarks, recipes, and infrastructure AMD full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

4 participants