Skip to content

[AMD][Qwen3.5] Use HiCache kernel IO and page_first on MI355X MXFP4 AgentX - #2972

Open
yichiche wants to merge 5 commits into
mainfrom
amd/qwen35-mxfp4-agentx-hicache-kernel-page-first
Open

[AMD][Qwen3.5] Use HiCache kernel IO and page_first on MI355X MXFP4 AgentX#2972
yichiche wants to merge 5 commits into
mainfrom
amd/qwen35-mxfp4-agentx-hicache-kernel-page-first

Conversation

@yichiche

@yichiche yichiche commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Change the MI355X Qwen3.5 MXFP4 AgentX HiCache defaults from --hicache-io-backend direct / --hicache-mem-layout page_first_direct to kernel / page_first.
  • Leave --hicache-ratio 1.5 and --hicache-write-policy write_through unchanged. HICACHE_IO_BACKEND and HICACHE_MEM_LAYOUT remain overridable.
  • Match the B200/B300 Qwen3.5 FP4 AgentX recipes, which already hardcode kernel / page_first.
  • Bump qwen3.5-fp4-mi355x-sglang-agentic-mtp from lmsysorg/sglang-rocm:v0.5.18-rocm720-mi35x-20260829 to lmsysorg/sglang-rocm:v0.5.19-rocm720-mi35x-20260910. Re-trigger the sweep once that tag is on Docker Hub.

Details

benchmarks/single_node/agentic/qwen3.5_fp4_mi355x_sglang_mtp.sh is the only Qwen3.5 MXFP4 AgentX recipe. On the dram/hicache arms it previously defaulted to SGLang's direct copy path and page_first_direct layout, which stalls decode on host KV copies. Switching the defaults to the kernel IO backend and page_first layout removes that copy bottleneck without changing HiCache sizing or write policy.

Local AgentX measurement (TP2, conc=20, DURATION=1200, qwen3.5-fp4-mi355x-sglang-agentic-mtp):

HiCache IO / layout requests ok TPOT mean (ms) Interactivity (tok/s/user) E2E p90 (s) TTFT p50 (s) total tok/s tok/s/gpu
direct / page_first_direct (previous default) 858/898 8.2 121.7 17.0 0.9 67885 33942
kernel / page_first (this PR) 873/913 7.5 134.1 16.0 0.8 69445 34722

Local software under test was rocm/sgl-dev:v0.5.19-rocm720-mi35x-20260909. CI is pinned to lmsysorg/sglang-rocm:v0.5.19-rocm720-mi35x-20260910; that mi35x tag was not on Docker Hub at PR open (mi30x/mi45x 20260910 already were). Re-trigger after it lands. Cache hit stayed 1.0; dropped records were warmup only (40 per run). No-offload (kvnone) at the same conc is unchanged by the HiCache flag change.

Accuracy

N/A — serving-path HiCache IO/layout only. No model weights, speculative-decoding, or eval-path change.


Note

Low Risk
Benchmark and serving-flag updates only; no auth, data, or model-weight changes, though results may shift versus prior sweeps.

Overview
Updates the Qwen3.5 MXFP4 MI355X AgentX MTP SGLang launch recipe and CI pin for SGLang 0.5.19 (lmsysorg/sglang-rocm:…20260911).

In qwen3.5_fp4_mi355x_sglang_mtp.sh, the server CLI renames --cuda-graph-max-bs to --cuda-graph-max-bs-decode, raises the default SCHEDULER_RECV_INTERVAL from 30 to 60, and switches ROCM_QUICK_REDUCE_QUANTIZATION from INT8 to INT4 for prefill allreduce. perf-changelog.yaml records the same three serving tweaks plus the image bump for qwen3.5-fp4-mi355x-sglang-agentic-mtp.

Reviewed by Cursor Bugbot for commit 2fa9a88. Bugbot is set up for automated code reviews on this repo. Configure here.

@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 关于重新运行失败任务的文档

@yichiche
yichiche force-pushed the amd/qwen35-mxfp4-agentx-hicache-kernel-page-first branch from aed1ac3 to dc9a869 Compare September 10, 2026 13:52

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

Looks good — a mechanical config default swap that matches the existing pattern.
Reviewed the two changed defaults (HICACHE_IO_BACKEND, HICACHE_MEM_LAYOUT) in qwen3.5_fp4_mi355x_sglang_mtp.sh — env overrides are preserved via the ${VAR:-default} pattern and other hicache args (ratio, write policy) are untouched. Confirmed kernel/page_first matches the already-hardcoded values in the sibling qwen3.5_fp4_b200_sglang_mtp.sh / qwen3.5_fp4_b300_sglang_mtp.sh recipes the PR claims to align with. Checked the perf-changelog.yaml diff appends a new entry only at the tail with all prior bytes untouched, consistent with the append-only convention.

Extended reasoning...

Overview

The diff is a two-line default change in benchmarks/single_node/agentic/qwen3.5_fp4_mi355x_sglang_mtp.sh, swapping the HiCache CPU-tier defaults from --hicache-io-backend direct/--hicache-mem-layout page_first_direct to kernel/page_first, plus a matching append-only entry in perf-changelog.yaml. Ratio and write-policy defaults are untouched, and both changed values remain overridable via HICACHE_IO_BACKEND/HICACHE_MEM_LAYOUT env vars, using the existing ${VAR:-default} shell idiom already used for the sibling values on the same line.

Security risks

None. This only changes which SGLang server flag values are passed by default for the CPU KV-cache tier IO path and memory layout; no new code paths, no secrets, no auth/permission logic, no user input handling.

Level of scrutiny

Low. This is a narrow, single-value config tweak in a benchmark launcher script, not a change to shared library logic, scheduling, or benchmark invariants. I verified the specific cross-script consistency claim in the PR description by grepping other agentic MTP scripts: qwen3.5_fp4_b200_sglang_mtp.sh and qwen3.5_fp4_b300_sglang_mtp.sh do hardcode --hicache-io-backend kernel / --hicache-mem-layout page_first, so the stated rationale (aligning the ROCm recipe with the already-shipped B200/B300 recipes) checks out against the actual codebase rather than just the PR's own prose. The changelog append preserves the byte-sensitive, append-only convention (diff only adds lines after the prior last entry).

Other factors

The PR description candidly notes the local A/B benchmark used a non-CI-pinned ROCm image tag rather than the CI-pinned image, and the changelog pr-link is a placeholder (.../pull/0). These are process/documentation nits rather than functional bugs — the bug-hunting pass found no bugs, and the code change itself is simple, reversible via env override, and consistent with an established pattern elsewhere in the repo, so I don't think they warrant blocking approval or deferring to a human.

This review covers commit aed1ac3, which is no longer the latest commit on this pull request; later commits are not covered by it.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@yichiche
yichiche force-pushed the amd/qwen35-mxfp4-agentx-hicache-kernel-page-first branch from d5fd0b9 to 5f697a8 Compare September 11, 2026 14:28
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@yichiche
yichiche force-pushed the amd/qwen35-mxfp4-agentx-hicache-kernel-page-first branch from ee8b4ca to 76b4956 Compare September 12, 2026 06:23
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

yichiche and others added 3 commits September 12, 2026 16:35
Co-Authored-By: ChangLiu0709 <190883410+ChangLiu0709@users.noreply.github.com>
…x-bs-decode

v0.5.19 splits --cuda-graph-max-bs into --cuda-graph-max-bs-decode and
--cuda-graph-max-bs-prefill and removes the unsuffixed name, so argparse
rejects it as ambiguous. Every agentic arm in run 34486742261 died with:

  sglang serve: error: ambiguous option: --cuda-graph-max-bs could match
  --cuda-graph-max-bs-decode, --cuda-graph-max-bs-prefill
  Process died before http://0.0.0.0:8894/health became ready.

Use --cuda-graph-max-bs-decode, matching the Qwen3.5 RTX PRO 6000 recipe.
The captured decode batch size is unchanged: min(2*CONC, 128).
Switch ROCM_QUICK_REDUCE_QUANTIZATION from INT8 to INT4 and raise the
scheduler-recv-interval default from 30 to 60. Local TP2 AgentX vs the
previous INT8/recv=30 defaults improved hicache conc28/32 output tok/s/gpu
and cut P90 E2E/TPOT; KV-none throughput stayed flat.
@yichiche
yichiche force-pushed the amd/qwen35-mxfp4-agentx-hicache-kernel-page-first branch from 0e9376b to 2fa9a88 Compare September 12, 2026 16:36
@github-actions

Copy link
Copy Markdown
Contributor

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

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant