Skip to content

perf(amd): cap GLM-5.2 FP4 MI355X SGLang TP8 c4 admission at 2 / perf(amd): 将 GLM-5.2 FP4 MI355X SGLang TP8 c4 的准入上限降到 2 - #4630

Open
EricKing626 wants to merge 2 commits into
mainfrom
amd/glm5.2-fp4-mi355x-c4-admission-cap
Open

EricKing626 wants to merge 2 commits into
mainfrom
amd/glm5.2-fp4-mi355x-c4-admission-cap

Conversation

@EricKing626

@EricKing626 EricKing626 commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Every point in glm5.2/sglang/mi355x-fp4-mtp/agentic.yaml admits 2x CONC. At TP8 concurrency 4 that cap never binds, and the requests that decode slowest are the ones that share a decode batch: the slowest decile runs with a mean of 1.68
concurrent decode partners against 0.54 for the rest. Admission headroom above the in-flight tail only widens the batch that tail runs in.

Change

override_tp8_c4 drops max-running-requests from 8 to 2.
cuda-graph-max-bs-decode stays at 8. Nothing else moves: TP8 concurrency 1 and 2 and every TP4 HiCache point keep 2x CONC.

The FP8 sibling on B300 (glm5.2/sglang/b300-fp8-mtp/agentic.yaml) already caps the same way at concurrency 4, 12 and 16, and keeps 2x CONC at the throughput end, so this follows the shape that recipe already establishes.

Measured

A local max-running-requests sweep on MI355X at this point, same image and recipe, one server per point:

max-running-requests Intvty@P90 TPOT TTFT P90 (s) tput/GPU slowest decile: decode partners rest: decode partners
8 (baseline) 222.3 1.07 3911 1.68 0.54
3 228.5 1.01 3934 1.23 0.53
2 255.0 1.22 3754 0.71 0.38

Risk

Intvty@P90 TPOT is 1 / p90(ITL) and excludes TTFT, so part of this gain is time moved from decode into queueing rather than time saved. The AgentX North Star is E2E normalized interactivity, which includes TTFT (inferencex-e2e/docs/MODELS.md), and TTFT P90 regresses 14% here. The sweep run reports that metric; if it does not improve, this change should not land.
Throughput per GPU is also expected to fall about 4% at this point, which is the intended move along the latency-throughput curve, not a regression to absorb elsewhere.

Validation

Pending: the sweep above is a local run, not an ingested e2e run. A green e2e-tests.yml run for this branch and an accepted /use <run_id> are required before merge, and the E2E normalized interactivity column of that run is the
gate described under Risk.

At TP8 concurrency 4 the slowest decodes are the ones that share a decode
batch, so admission above the in-flight tail only widens the batch that tail
runs in. Drop max-running-requests from 8 to 2 and keep the decode graph batch
at 8; requests over the cap wait for a slot. Every other point keeps 2x CONC.
@EricKing626 EricKing626 changed the title perf(amd): cap GLM-5.2 FP4 MI355X SGLang TP8 c4 admission at 2 perf(amd): cap GLM-5.2 FP4 MI355X SGLang TP8 c4 admission at 2 / perf(amd): 将 GLM-5.2 FP4 MI355X SGLang TP8 c4 的准入上限降到 2 Oct 29, 2026
@EricKing626
EricKing626 marked this pull request as ready for review October 29, 2026 03:48
@EricKing626
EricKing626 requested a review from a team October 29, 2026 03:48
@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 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@claude

claude Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @EricKing626's task in 20s —— View job


Review

  • Read the diff and the changelog
  • Post findings

🔴 One blocking issue: the new perf-changelog.yaml entry is in the middle of the file, not at the end. It sits above entries #4554, #4464, #4468 and others that came in when main was merged into this branch. Move it, unchanged, to the bottom of the file. There is an inline comment on it.

The recipe change itself looks correct. Only override_tp8_c4 changes: max-running-requests goes from 8 to 2, and cuda-graph-max-bs-decode stays at 8. The new header comment describes this accurately. As the PR body says, the E2E normalized interactivity column from the sweep run is still the gate for merging.

Comment on lines +11502 to +11510
- config-keys:
- glm5.2-fp4-mi355x-sglang-agentic-mtp
scenario-type:
- agentic-coding
description:
- "TP8 concurrency 4 drops max-running-requests from 8 to 2 and keeps cuda-graph-max-bs-decode at 8. No other point moves: TP8 concurrency 1 and 2 and every TP4 HiCache point keep admission at 2x CONC."
- "At this point the slowest decodes are the ones that share a decode batch, so admission above the in-flight tail only widens the batch that tail runs in. A max-running-requests sweep at TP8 concurrency 4 measured interactivity at p90 TPOT 222.3 to 255.0 output tokens/s/user and the slowest decile's mean concurrent decode partners 1.68 to 0.71, against TTFT p90 1.07 to 1.22 s and 3911 to 3754 tokens/s/GPU; requests over the cap wait for a slot."
- "The image, EAGLE shape (5 steps, 6 draft tokens), chunked-prefill-size, mem-fraction-static, HiCache tier and the DSA triton prefill and decode backends are unchanged."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4630

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.

🔴 BLOCKING: New inferencex-e2e/perf-changelog.yaml entries must be appended to the END of the file. This one now sits between #4571 and the later entries (#4554, #4464, #4468, ...) that came in when main was merged into this branch.
Why it matters: The file is read in chronological order, oldest at the top and newest at the bottom. An entry in the middle breaks that order and can be missed when result collection reads the file.
Fix: Move this entry, unchanged, from here to after the last entry (#4468) at the bottom of the file.

@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.

Comment on lines +11502 to +11510
- config-keys:
- glm5.2-fp4-mi355x-sglang-agentic-mtp
scenario-type:
- agentic-coding
description:
- "TP8 concurrency 4 drops max-running-requests from 8 to 2 and keeps cuda-graph-max-bs-decode at 8. No other point moves: TP8 concurrency 1 and 2 and every TP4 HiCache point keep admission at 2x CONC."
- "At this point the slowest decodes are the ones that share a decode batch, so admission above the in-flight tail only widens the batch that tail runs in. A max-running-requests sweep at TP8 concurrency 4 measured interactivity at p90 TPOT 222.3 to 255.0 output tokens/s/user and the slowest decile's mean concurrent decode partners 1.68 to 0.71, against TTFT p90 1.07 to 1.22 s and 3911 to 3754 tokens/s/GPU; requests over the cap wait for a slot."
- "The image, EAGLE shape (5 steps, 6 draft tokens), chunked-prefill-size, mem-fraction-static, HiCache tier and the DSA triton prefill and decode backends are unchanged."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4630

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.

🔴 The changelog validator and PR sweep will reject this PR, because the new block sits mid-file instead of at the tail. It was inserted before the existing minimaxm31flash entries (PRs #4464 and #4468), which are the last entries on the base. Fix: restore the base file byte-for-byte, then append this one block after the final #4468 entry. The changelog conflict helper (prepare_perf_changelog_merge resolve-conflict) does this, and it keeps every main entry in its original order.

Why this was flagged

On base 98f0d6e the file is 11558 lines and ends with the minimaxm31flash GB200 (#4464) and GB300 (#4468) entries. The diff adds the glm5.2-fp4-mi355x-sglang-agentic-mtp block at line 11502, ahead of them. validate_perf_changelog.compare_entries compares base and head entries by position (validate_perf_changelog.py:129-137), so the first displaced minimaxm31flash slot now holds the new entry and fails with "entry N changed; existing entries are immutable". validate_raw_change (validate_perf_changelog.py:172) also fails because head_raw no longer starts with base_raw. run-sweep.yml builds its matrix from the appended tail entries, so the sweep would be blocked or would pick up the wrong config keys. AGENTS.md:88 requires appending only at the tail.

Verification: Trigger: merging this PR through the mandated infx.workflows.merge_with_reuse path. The diff hunk @@ -11499,6 +11499,16 @@ puts the new block (#4630) before the minimaxm31flash-fp4-b200-sglang-agentic-dspark entry. It is not at the tail. merge_with_reuse.py:688 calls canonicalize_changelog(pr, repo). canonicalize_changelog does not catch the error, so the merge tool aborts.

Comment on lines +52 to +55
# up to 64. The TP4 HiCache tier is 180 GB per rank. TP8 c4 is the exception:
# its slowest decodes are the ones sharing a batch, so admission is capped
# below CONC to trade TTFT for p90 interactivity; the graph batch stays at
# 2x CONC.

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 TP8 c4 rationale was added to the section header comment rather than next to the value it explains, about 140 lines away. AGENTS.md forbids section header comments and allows only short comments on a specific line. Fix: move a one-line why comment onto max-running-requests: 2 in override_tp8_c4 (around line 193), and leave the header comment as it was.

Why this was flagged

AGENTS.md:56 forbids header comments that describe a section or override, and AGENTS.md:58 limits comments to a short technical note on a specific line or block. The diff extends the header above override_tp4_c4_hicache (agentic.yaml:51-55) with four lines about override_tp8_c4, whose max-running-requests: 2 is at about line 193. A reader of that line sees no reason for the value. The header now also describes an exception for a block elsewhere in the file.

Verification: The diff adds four lines to the section header comment at agentic.yaml:51-55. The value it explains, max-running-requests: 2 in override_tp8_c4, is at line 193 with no comment of its own. AGENTS.md:56 says "No header comments describing a file, topology, config, recipe, override, or section." It is a rule violation, not a runtime problem.

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

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant