[AMD][MI35X] Bump Qwen3.5 MXFP4 MI355X SGLang AgentX to v0.5.18 and retune all-reduce, prefill, and CUDA graph - #2737
Conversation
…etune all-reduce, prefill, and CUDA graph
|
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 For PR verification, add the 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 模板,包括保留英文语句 如需进行 PR 验证,请为此 PR 添加 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档 |
This comment was marked as outdated.
This comment was marked as outdated.
1 similar comment
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=32953910228 |
…MXFP4 MI355X AgentX arm Route the EAGLE draft-extend step through the AITER unified attention kernel, and drop the CUDA graph sizing comment now that the changelog entry carries the rationale.
…x-sglang-agentic-v0.5.18 # Conflicts: # perf-changelog.yaml
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
…x-sglang-agentic-v0.5.18 # Conflicts: # perf-changelog.yaml
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=33025907871 |
74e8ab5 to
61258ba
Compare
…XFP4 MI355X AgentX arm
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=33026560033 |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7ad5061. Configure here.
| - "Route only enabled recipes through the immutable producer fork and preserve non-power launcher revisions." | ||
| pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2688 | ||
|
|
||
| - config-keys: |
There was a problem hiding this comment.
Changelog breaks append-only bytes
Medium Severity
The new perf-changelog.yaml entry deletes historical blank-line separator bytes between existing entries instead of leaving the prior file as an exact prefix. That file is byte-sensitive, so the mutation breaks the append-only prefix that sweep gating and reuse checks require.
Reviewed by Cursor Bugbot for commit 7ad5061. Configure here.
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=33026661557 |


Motivation
qwen3.5-fp4-mi355x-sglang-agentic-mtpis still onlmsysorg/sglang-rocm:v0.5.17-rocm720-mi35x-20260818, and three of its launch knobs are out of step with the sibling recipes on the same cluster.First, all-reduce. The script correctly omits
--enable-aiter-allreduce-fusion(removed in #2562 for TP2/EP2 EAGLE rank consistency) but never setsROCM_QUICK_REDUCE_QUANTIZATION, so multi-GPU collectives run unquantized custom all-reduce. The published SGLang cookbook recipe for MXFP4 on MI355X calls for INT8-quantized quick all-reduce.Second, the prefill budget is double the B200 sibling:
--max-prefill-tokens 32768/--chunked-prefill-size 32768here versus16384/16384inbenchmarks/single_node/agentic/qwen3.5_fp4_b200_sglang_mtp.sh.Third, the decode CUDA graph is undersized for the batch the scheduler actually builds.
--max-running-requestsis2*CONC, but the graph was only captured tomin(CONC, 64), so every decode batch aboveCONCfell onto the eager path.Modifications
Bump
imageonqwen3.5-fp4-mi355x-sglang-agentic-mtptolmsysorg/sglang-rocm:v0.5.18-rocm720-mi35x-20260825. The model, runner, and search space are untouched.In
benchmarks/single_node/agentic/qwen3.5_fp4_mi355x_sglang_mtp.sh, addexport ROCM_QUICK_REDUCE_QUANTIZATION=INT8alongside the existing aiter exports. The two all-reduce paths are mutually exclusive in SGLang: the AITER fused AR+RMSNorm path is gated on--enable-aiter-allreduce-fusion, and only with it off do collectives fall back to custom all-reduce, where the quick-reduce regime is read. Since this arm already omits the fusion flag, the env takes effect with no other launch change.Lower
--max-prefill-tokensand--chunked-prefill-sizefrom 32768 to 16384, matching the B200 sibling.Capture the decode CUDA graph to
min(2*CONC, 128)instead ofmin(CONC, 64), so it covers--max-running-requests. The expression and the 128 cap are taken verbatim from the sibling MI355X AgentX recipebenchmarks/single_node/agentic/dsv4_fp4_mi355x_sglang_mtp.sh, which already runs this idiom oncluster:mi355x-amds.Append the corresponding
perf-changelog.yamltrigger.Accuracy Tests
No accuracy-affecting logic changes in this repo. INT8 quick all-reduce quantizes the collective payload, so it is not bit-identical to the unquantized path; the AgentX eval rows continue to run real target-model verification and will show whether that matters. The prefill and CUDA-graph knobs change scheduling and kernel launch shape, not what is computed.
Benchmarking
Repo validation was run locally:
python3 -m pytest utils/matrix_logic/ -q→ 232 passed.bash -n benchmarks/single_node/agentic/qwen3.5_fp4_mi355x_sglang_mtp.sh→ clean.python3 utils/matrix_logic/generate_sweep_configs.py full-sweep --config-files configs/amd-master.yaml --model-prefix qwen3.5 --precision fp4 --scenario-type agentic-coding→ 16 configs, all onv0.5.18-rocm720-mi35x-20260825.conc-list(TP21,4,8,12,16,20; TP41,4,8,12,16,20,24,28,32,40): it yields2*CONCat every point, so the 128 cap never binds in the current sweep.End-to-end MI355X AgentX numbers will come from the sweep triggered on this PR (
full-sweep-fail-fast). Three knobs plus an image move together here, so the resulting numbers are not attributable to any single one of them; if the arm regresses, the all-reduce regime is the first knob to isolate.Conflicts
#2693 touches the same script, the same config block, and also appends to
perf-changelog.yaml, so the changelog append will collide and whichever lands second needs a rebase. The changes themselves are complementary.Two notes for whoever reviews alongside #2693. That PR raises the TP4 concurrency ceiling to 64 via its HiCache arms — at
CONC=64the newmin(2*CONC, 128)lands exactly on the 128 cap, which is the intended behaviour but worth knowing. And #2693's stated motivation is MI355X/B200 comparability: the B200 sibling still captures tomin(CONC, 64), so this PR re-introduces a difference on that knob. It is harness tuning rather than a deployment-defining server arg, but it is a real difference and should not be discovered by surprise.Note
Medium Risk
Benchmark harness and collective quantization changes affect published MI355X AgentX throughput/latency and may not be bit-identical to the prior unquantized all-reduce path; accuracy is validated only via existing eval runs.
Overview
Updates qwen3.5-fp4-mi355x-sglang-agentic-mtp to SGLang ROCm v0.5.18 and retunes the AgentX launch script so MI355X MXFP4 serving matches sibling recipes and the published cookbook.
The benchmark script now routes multi-GPU collectives through INT8 ROCm quick all-reduce (
ROCM_QUICK_REDUCE_QUANTIZATION), pins EAGLE draft-extend off unified AITER attention (SGLANG_AITER_UNIFIED_DRAFT_EXTEND=0), halves prefill limits to 16384 (--max-prefill-tokens/--chunked-prefill-size, aligned with the B200 arm), and sizes decode CUDA graphs to min(2×CONC, 128) so graph capture covers--max-running-requestsat 2×CONC instead of undersized min(CONC, 64) eager fallbacks.configs/amd-master.yamlonly changes the container image;perf-changelog.yamldocuments the retune for sweep invalidation.Reviewed by Cursor Bugbot for commit 7ad5061. Bugbot is set up for automated code reviews on this repo. Configure here.