Skip to content

[AMD][MI35X] Qwen3.8-Flash-Next FP4 SGLang agentic MTP: extend baseline to conc 24/48/80 with HiCache DRAM offload, no patches / [AMD][MI35X] Qwen3.8-Flash-Next:基线扩展至并发 24/48/80(HiCache DRAM 卸载,无补丁) - #4779

Merged
ChangLiu0709 merged 17 commits into
mainfrom
chang/qwen3.8-flash-fp4-mi355x-sglang-agentic-c24-c48-c80
Nov 6, 2026

Conversation

@ChangLiu0709

@ChangLiu0709 ChangLiu0709 commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Extends the merged Qwen3.8-Flash-Next FP4 MI355X SGLang AgentX baseline (#4542) from concurrency 1/2/4/8/12/16 to also cover 24, 48 and 80. The image, model and recipe for c1–c16 are unchanged: lmsysorg/sglang-rocm:v0.5.23-rocm10-mi35x-20261031@sha256:3867dc07ba2530f914e1f210ed829f7a572a75286c8c362dbc22cbecf9b5a7e6, TP1/EP1, MTP. There is no custom image, no AITER/SGLang patch and no setup script.

  • Config key qwen3.8next-fp4-mi355x-sglang-agentic-mtp: one new search-space entry, kv-offloading: dram with the hicache backend, conc-list: [24, 48, 80], same agentic.yaml recipe. Each point takes the 299 GB DRAM share of dram-utilization: 0.80.
  • New recipe overrides override_c24, override_c48 and override_c80: FP8 E4M3 target and draft KV cache, mem-fraction-static 0.88 (SGLANG_AITER_HONOR_EXPLICIT_MEM_FRACTION=1), SGLANG_USE_AITER_UNIFIED_ATTN=1, ReplaySSM and PLE offload kept, extra_buffer_lazy Mamba pool (track interval 256, max-mamba-cache-size 960 / 720 / 640), HiCache (kernel IO, page_first, write_back, hicache-size 200 at c24 and 298 at c48 and c80).
  • Admission is 48 requests at c24 (2x CONC) and 128 at c48 and c80. c80 also sets strip-thinking-cache and mamba-max-states-per-path 2.
  • The settings come from the AMD Qwen3.8 submission recipes for these concurrencies, without the extra patches those recipes carry (QSA FlyDSL decode, AITER GDN conv/prefill, fused hyper-connection decode). Those pieces stay on #3974.
  • Appended one entry at the end of inferencex-e2e/perf-changelog.yaml.

Cookbook coverage

The production serving commands for the new points (c24, c48, c80: FP8 E4M3 KV cache, HiCache host-memory offload, the extra_buffer_lazy Mamba pool, batch limits) are documented in the SGLang cookbook PR sgl-project/sglang#48432, merged on 2026-11-04. Concurrency 1–16 are already covered by the merged round 02 cookbook PR sgl-project/sglang#47951 (see #4542). The new commands were compared with the recipe's rendered args and env at each point: 0 missing, 0 conflicting, 0 extra settings besides --host and --port; telemetry flags and benchmark-only settings are excluded, as for the earlier points.

Validation

PR Run Sweep 41882345112 (attempt 1, head 72ac9f4, with all-evals) passed at all nine points and ran a GSM8K eval at every point, and /use 41882345112 is posted. The later commits only merge main and re-append the changelog entry; the recipe and config are unchanged. The job logs show only the runner-side 573-participating-gpus.patch on the srt-slurm launcher checkout and no patch inside the container. An earlier branch e2e dispatch, 41834528561 (head 2765910fa), gave matching numbers.

Conc KV Total tok/s/GPU Interactivity p50 / p90 (tok/s/user) TTFT p50 / p90 (s) Error-dropped requests
1 GPU 16,818 399.4 / 389.5 0.27 / 1.14 0
2 GPU 21,478 389.3 / 301.2 0.28 / 1.00 0
4 GPU 25,200 318.8 / 235.2 0.25 / 0.65 0
8 GPU 41,240 262.3 / 147.5 0.28 / 0.64 1
12 GPU 53,541 116.9 / 89.3 0.37 / 0.80 2
16 GPU 71,645 101.2 / 65.8 0.40 / 0.97 1
24 HiCache DRAM 107,344 77.9 / 51.5 0.47 / 1.05 4
48 HiCache DRAM 141,484 45.2 / 31.3 0.60 / 1.47 9
80 HiCache DRAM 165,836 24.0 / 17.9 0.80 / 2.49 13

GSM8K (1319 questions, strict match): c1 0.9788, c2 0.9795, c4 0.9795, c8 0.9773, c12 0.9773, c16 0.9773, c24 0.9803, c48 0.9773, c80 0.9780.

Known gaps:

AI model disclosure
  • Model/version: Claude Sonnet 5.5 (Cursor agent)
  • Role: read the c1-c80 e2e run logs and results and wrote this description. Claude Opus 5.5 (Cursor agent) later updated the Cookbook coverage and Validation sections, at the reviewer's request, to cite PR sweep 41882345112 and the merged cookbook PR. The recipe, config and changelog edits were made earlier in this branch by the same Cursor agent family under the author's direction; the exact model for those earlier edits could not be verified from this session.
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
  • For every change that can affect benchmark performance and every recipe addition or modification, I have appended a new entry to the physical end of inferencex-e2e/perf-changelog.yaml and have not edited historical entries
  • If this PR can affect benchmark performance or adds or modifies a recipe, 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.
中文

摘要

将已合并的 Qwen3.8-Flash-Next FP4 MI355X SGLang AgentX 基线(#4542)从并发 1/2/4/8/12/16 扩展到并发 24、48、80。c1–c16 的镜像、模型和 recipe 均不变:lmsysorg/sglang-rocm:v0.5.23-rocm10-mi35x-20261031@sha256:3867dc07…,TP1/EP1,MTP。不使用自定义镜像、不打 AITER/SGLang 补丁,也没有 setup 脚本。

  • 配置键 qwen3.8next-fp4-mi355x-sglang-agentic-mtp:新增一个搜索空间条目,kv-offloading: dram,后端 hicache,conc-list: [24, 48, 80],沿用同一个 agentic.yaml。每个点使用 dram-utilization: 0.80 对应的 299 GB DRAM 份额。
  • 新增 override_c24、override_c48、override_c80:目标与草稿 KV cache 使用 FP8 E4M3,mem-fraction-static 为 0.88,保留 ReplaySSM 与 PLE offload,采用 extra_buffer_lazy Mamba 池,并启用 HiCache(c24 的 hicache-size 为 200,c48 与 c80 为 298)。
  • c24 的并发准入为 48(2x CONC),c48 与 c80 为 128。c80 另外设置 strip-thinking-cache 与 mamba-max-states-per-path 2。
  • 这些设置来自 AMD Qwen3.8 提交 recipe 中对应并发的配置,但不包含它们携带的额外补丁(QSA FlyDSL decode、AITER GDN conv/prefill、融合 hyper-connection decode),这些仍保留在 #3974。
  • 已在 inferencex-e2e/perf-changelog.yaml 末尾追加一条记录。

Cookbook 覆盖

新增并发点(c24、c48、c80:FP8 E4M3 KV cache、HiCache 主机内存卸载、extra_buffer_lazy Mamba 池、批量上限)的生产服务命令记录在 SGLang cookbook PR sgl-project/sglang#48432,该 PR 已于 2026-11-04 合入。并发 1–16 已由已合入的第 02 轮 cookbook PR sgl-project/sglang#47951 覆盖(对应 #4542)。新命令已与配方在各点渲染出的 args 和 env 逐项比对:无缺失、无冲突、除 --host 与 --port 外无多余设置;遥测标志与仅基准用的设置不收录,与此前各点一致。

验证

PR Run Sweep 41882345112(attempt 1,head 72ac9f4,带 all-evals)九个点全部通过,并在每个点都运行了 GSM8K 评测,结果见上方英文表格;/use 41882345112 已发布。之后的提交只合并 main 并重新追加 changelog 条目,recipe 与配置均未改动。作业日志中只有 runner 侧对 srt-slurm 启动器的 573-participating-gpus.patch,容器内没有任何补丁。此前的分支 e2e 触发 41834528561(head 2765910fa)结果与之一致。

GSM8K(1319 题,strict match):c1 0.9788,c2 0.9795,c4 0.9795,c8 0.9773,c12 0.9773,c16 0.9773,c24 0.9803,c48 0.9773,c80 0.9780。

已知问题:

AI 模型使用说明

  • 模型/版本:Claude Sonnet 5.5(Cursor agent)
  • 工作内容:读取 c1-c80 e2e 运行日志与结果并撰写本描述。之后 Claude Opus 5.5(Cursor agent)应 reviewer 要求更新了 Cookbook 覆盖与验证两节,改为引用 PR sweep 41882345112 与已合入的 cookbook PR。本分支中此前的 recipe、配置与 changelog 修改由同系列 Cursor agent 在作者指导下完成,其具体模型无法从本会话验证。

Same image and recipe as the merged round 02 baseline (#4542) for c1-c16.
Add a HiCache DRAM-offload search-space entry for c24, c48 and c80 with the
server settings of the AMD submission recipes (FP8 KV, mem-fraction-static
0.88, extra_buffer_lazy Mamba pool, hicache-size 200/298), without the extra
AITER/SGLang patches those recipes carry.
ChangLiu0709 and others added 6 commits November 4, 2026 15:50
Co-authored-by: Cursor <cursoragent@cursor.com>
…e c24/c48/c80 entry to PR 4779

Co-authored-by: Cursor <cursoragent@cursor.com>
…c24-c48-c80

Co-authored-by: Cursor <cursoragent@cursor.com>
…ry after the main merge

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Nikolai <289648307+amd-nprotaso@users.noreply.github.com>
Co-authored-by: Christian Gilli <272772515+amd-cgilli@users.noreply.github.com>
Co-authored-by: Amanzhol Salykov <asalykov@amd.com>
Co-authored-by: wufann <36477220+wufann@users.noreply.github.com>
Co-authored-by: Thomas Wang <1am9trash@gmail.com>
Co-authored-by: Chun-Hung Yeh <Chun-Hung.Yeh@amd.com>
Co-authored-by: jacky.cheng <yichiche@amd.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Chun Fang <chun.fang@amd.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@ChangLiu0709
ChangLiu0709 marked this pull request as ready for review November 4, 2026 17:46
@ChangLiu0709
ChangLiu0709 requested a review from a team November 4, 2026 17:46
@github-actions

github-actions Bot commented Nov 4, 2026

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 Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @ChangLiu0709's task in 27s —— View job


Review

LGTM - no blocking issues found.

  • The perf-changelog.yaml entry is appended at the end of the file and covers qwen3.8next-fp4-mi355x-sglang-agentic-mtp.
  • The image is public and digest-pinned. The existing c1–c16 points are unchanged.
  • The override_c24/c48/c80 anchors and merge keys resolve correctly, and every point ends with the intended values.
  • TOTAL_CPU_DRAM_GB: '299' with hicache-size 200/298 follows the sibling B300 recipe.

I couldn't run infx.matrix.changed because the command needed approval. That check only matters when a PR has no changelog entry, and this one has one.

@ChangLiu0709 ChangLiu0709 added the full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures label Nov 4, 2026

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

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Comment on lines +171 to +177
# c24, c48 and c80 keep ReplaySSM and the PLE offload, store the target and draft KV
# caches in FP8 (E4M3), and add HiCache host-DRAM offload with a Mamba state pool
# that tracks a checkpoint every 256 tokens (extra_buffer_lazy). HiCache takes the
# point's 299 GB DRAM share from the matrix generator (hicache-size 200 at c24, 298
# at c48 and c80); TOTAL_CPU_DRAM_GB records it. mem-fraction-static is 0.88, used
# as given. c24 admits 2x CONC; c48 and c80 admit 128 requests.
# c80 caches only the prompt on finish and keeps at most two Mamba states per path.

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): New header comments describe the overrides and config and restate values already in the YAML, which the mandatory comment rule forbids. sweep:^# (c24, c48 and c80|Concurrency 1-16 serve) Examples: agentic.yaml:171-177 repeats FP8 KV, hicache-size 200/298, mem-fraction-static 0.88 and admission 48/128. amd-master.yaml:259-260 summarises the config's concurrencies. Fix: delete both blocks. Keep only short line-level whys, such as the existing strip-thinking-cache and mamba-max-states-per-path comments.

Why this was flagged

AGENTS.md:56 says there must be no header comments describing a file, config, recipe, override or section. AGENTS.md:58 also says comments must never restate the code. The 7-line block at agentic.yaml:171-177 sits above override_c24 and describes all three overrides. It repeats values set a few lines below: kv-cache-dtype fp8_e4m3, hicache-size 200/298, mem-fraction-static 0.88, max-running-requests 48/128 and mamba-track-interval 256. The new lines at amd-master.yaml:259-260 ('Concurrency 1-16 serve from GPU KV; 24, 48 and 80 add an FP8 KV cache and HiCache host-DRAM offload.') are a config-level summary of the search-space rows. These comments drift out of date as soon as a value changes, and maintainers end up with prose that contradicts the code. Runtime behaviour is unaffected, so this is a nit.

Verification: nit. No runtime behavior breaks. AGENTS.md under "Comments (mandatory, every file)" says "No header comments describing a file, topology, config, recipe, override, or section" and "never restate the code". The diff adds a 7-line block at agentic.yaml:171-177, above override_c24:, that restates values set below it, and amd-master.yaml:259-260, which summarize the search-space rows.

@chunfangamd chunfangamd added the all-evals Expand eval selection to every fixed-sequence config label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

@ChangLiu0709

Copy link
Copy Markdown
Collaborator Author

/use 41882345112

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

@ChangLiu0709 staged run 41882345112.

This run remains available across future /stage-results requests. Staging the same run ID again updates its staged data. Staging workflow

@chunfangamd chunfangamd left a comment •

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.

As a PR reviewer and CODEOWNER, I have reviewed this and have:

Checklist items
  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/41882345112
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/41882345112
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • Verified that every draft model and draft head is served as it ships: the draft that ships with the served checkpoint, at its stored precision, through the pinned upstream image's default handling, with the shipped and effective draft precision recorded in the additional detail section. No submission-side quantization, dtype override, checkpoint substitution, or patch may lower draft precision below that default, regardless of eval results or AL. Explicitly verified that SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is not enabled in the effective recipe, including inherited settings; enabling it is prohibited going forward, and historical runs do not grant an exception. See Draft-model precision for what counts as the default and the MLPerf comparison.
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in infx/golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified against the current MODELS.md that this PR does not submit a deprecated model, scenario, or model-scenario combination.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; target/verifier FLOPs at lower precisions is fine, given that the config passes private evals, but this does not permit lowering draft-model or draft-head precision below what ships. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • Verified that new models disable integer all-reduce, with SGLang ROCm explicitly setting ROCM_QUICK_REDUCE_QUANTIZATION=NONE. Existing models are grandfathered per MODELS.md.
  • For affected Dynamo TRT-LLM benchmarks, verified that iteration/KV-cache metrics are collected and published under the pinned Dynamo implementation and effective engine settings. Resolve the installed Dynamo version separately from the container tag; use supported metrics controls without requiring KV events. Record the version and configuration evidence in the additional detail section. See verifier Check 17. N/A for unaffected serving paths or frameworks without these Dynamo settings.
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • For official InferenceX (non-preview), verified that established models use upstream engine images built from master (or the equivalent default development branch), with new models transitioning within a reasonable time after release. See MODELS.md.
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every affected vLLM/SGLang production serving configuration in this PR, including Dynamo deployments, is documented in the official vLLM recipes and/or the SGLang cookbook, for both single-node and multi-node aggregated and disaggregated serving. The documentation covers production-useful flags, environment variables, and launch commands (including prefill, decode, and router/frontend commands for disaggregation); InferenceX-only benchmark/harness settings are excluded with reasoning in the additional detail section:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang cookbook source repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If this PR uses append-only: true, verified that it only adds generated points or recipe variants inside a selected existing config/scenario and existing same-image visual curve: every previously generated point remains present with the same recipe, no prior point is removed or rerun, and every benchmark-affecting change in the complete diff can affect only the corresponding newly appended points (never an existing point), regardless of which file contains it.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.
  • Reported measured throughput/E2EL Pareto counts and evidence per affected curve (≥5 points strongly recommended). Below 5 or unverifiable: tag a core maintainer for review; recorded admin bypass required before merge. N/A if no curves are affected. Details.

Additional detail section:

  • Evals: run 41882345112 ran GSM8K at all nine points (all-evals) on the PR image: strict 0.9788 (c1), 0.9795 (c2), 0.9795 (c4), 0.9773 (c8), 0.9773 (c12), 0.9773 (c16), 0.9803 (c24), 0.9773 (c48) and 0.9780 (c80), n = 1319, SE about 0.004. No row trails another by more than 2σ, and all are within 2σ of the ingested qwen3.8next peers (MI355X FP4 0.9666–0.9795, B300 FP4 0.9765–0.9780). Each eval server ran its own point's path:
    • c1–c8 built the monokernel (qwen38_flash_next_hip and qwen38_flash_next_mtp_draft_hip).
    • c12 and c16 ran ReplaySSM with PLE offload.
    • c24–c80 allocated FP8 E4M3 target and draft KV pools and attached HiCache (hicache_attached=True, plus host KV and Mamba pools). They ran with SGLANG_USE_AITER_UNIFIED_ATTN=1, which makes the aiter backend use unified attention for decode and target verify whenever it is set. c80 also ran strip_thinking_cache and mamba_max_states_per_path=2.
    • FP8 KV is the only new accuracy lever, and its three points show no drop.
  • Cookbook: sgl-project/sglang#48432 merged.
    • Its Concurrency 24, 48 and 80 commands match every effective server arg and env var of the c24, c48 and c80 servers. That covers FP8 E4M3 target and draft KV, SGLANG_USE_AITER_UNIFIED_ATTN, mem fraction 0.88, admission 48/128/128, the Mamba cache settings and HiCache (200/298 GB, kernel I/O, page_first, write_back). At c80 it also covers --strip-thinking-cache and --mamba-max-states-per-path 2.
    • c1–c16 are unchanged from #4542 and documented by sgl-project/sglang#47951. Their published commands still pass --default-chat-template-kwargs '{"enable_thinking": false}', a difference carried over from #4542. This PR's servers all run the thinking-on template (default_chat_template_kwargs: None), as InferenceX requires: srt-slurm AgentX points run THINKING_MODE=thinking_on, the curve the injected 2.32 comes from.
    • Excluded as InferenceX-only or inert:
      • enable-metrics, enable-cache-report and the benchmark env (KV_OFFLOADING, TOTAL_CPU_DRAM_GB, CONC);
      • PYTHONNOUSERSITE and SGLANG_TIMEOUT_KEEP_ALIVE;
      • ROCM_QUICK_REDUCE_QUANTIZATION=NONE, because TP1 runs no all-reduce;
      • SGLANG_ENABLE_SPEC_V2=1, which SGLang e9c18259 does not read;
      • SGLANG_USE_AITER=1, the image default.
  • Golden AL: all nine points inject SGLANG_SIMULATE_ACC_LEN=2.32; the decode logs average 2.32 at c1 and c80. On main 146a0b64, signoff_facts golden-al selects qwen3.8-flash-next-fp8__mtp__native__default-default.yaml (thinking_on, 3 draft tokens), which gives 2.32 and matches. The AL gate ran on the c80 server (FP8 KV, HiCache) and measured a natural AL of 2.5407 on SPEED-Bench coding. That is 1.095× the golden value (above, report-only).
  • Draft precision: the MTP head (mtp.* of amd/Qwen3.8-Flash-Next-Quark-MXFP4-AttnFP8-PLEFP8 @ bd6e49d9) runs as shipped.
    • Shipped: W8A8 FP8 attention and indexer projections, W4A4 MXFP4 routed and shared experts, and BF16 router, HC mixers, fc_embedding/fc_hidden and norms. The head loads with the checkpoint's own Quark config.
    • c1–c16: unchanged from #4542. The draft KV is BF16, and at c1–c8 the monokernel reads the FP8 and MXFP4 weights in place and keeps the per-token FP8 activations.
    • c24–c80: the draft KV is FP8 E4M3 because the target KV is. --speculative-draft-kv-cache-dtype fp8_e4m3 restates SGLang's default, which follows --kv-cache-dtype, and both pools allocate torch.float8_e4m3fn. No draft weight or activation dtype changes.
    • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is unset, and integer all-reduce is off (ROCM_QUICK_REDUCE_QUANTIZATION=NONE, TP1).
  • Changelog: the entry covers the image, the unchanged c1–c16 points, the 299 GB HiCache entry, FP8 target and draft KV, SGLANG_USE_AITER_UNIFIED_ATTN, the Mamba settings, admission, the c80 cache settings and the absence of patches.
  • Validation / reuse: run 41882345112 (attempt 1) on 72ac9f4: all nine agentic points, nine evals and the AL gate are green, and /use 41882345112 is posted. Requests dropped with InvalidInferenceResultError: 1 at c8, 2 at c12, 1 at c16, 4 at c24, 9 at c48 and 13 at c80 (at most 0.2%), about the same rate as #4542's run. The evidence is still current under Check 1(b2) and (b3):
    • The later commits (e7ad07cd7, 5d89c7d03, ce13f213b, 5e957ca1d) only merge main and re-append this PR's changelog entry. The recipe, the master entry and the changelog entry are identical to 72ac9f4.

    • infx.matrix.plan --all-evals generates the same 18 entries (nine points and nine evals), field for field, at 72ac9f4 and at 5e957ca1d.

    • srt-slurm v2.66.2 (#4784) is a single TokenSpeed commit, and only its TokenSpeed launch snapshots change.

    • The other main changes on this path are:

      • client metadata (SPEC_ALGORITHM/SPEC_DRAFT_MODEL, #4805);
      • curve selection that still gives 2.32 (#4661, #4663);
      • the report-only AL gate, now run on the eval server (#4810);
      • a wait for prior-job VRAM before setup (#4813, #4814, #4827);
      • RAPL CPU-power telemetry on mi355x-amds (#4154).

      None of them changes a server argument, environment variable, client workload or eval.

  • Images: unchanged from #4542. lmsysorg/sglang-rocm:v0.5.23-rocm10-mi35x-20261031@sha256:3867dc07… is built from SGLang main at e9c18259, with aiter 285579b6, sgl-amd-mono b10f3b71 and mori f39fa765, each on its default branch.
  • Other: no patches or setup scripts. --strip-thinking-cache (cache only the prompt of a finished reasoning request) and --mamba-max-states-per-path are upstream cache policies: they change cache contents, not computation. No append-only; Checks 16 and 17 are N/A.
  • Pareto (p90 throughput per GPU vs E2EL, via pareto_coverage): one curve, made of c1–c16 on GPU KV and c24–c80 on HiCache, from the nine bmk_agentic_* artifacts of run 41882345112. 9 measured, 0 invalid, 7 on the frontier (c2, c8, c12, c16, c24, c48, c80): PASS. c1 is dominated by c2, and c4 by c8.

Signed: @chunfangamd

@github-actions

github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

✅✅✅ Verdict: PASS ✅✅✅

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — @chunfangamd is a listed owner of inferencex-e2e/configs/amd-master.yaml and of srt-slurm-recipes/**/mi355x-*/; perf-changelog.yaml falls to the catch-all, which any recognized CODEOWNER covers.

✅ Check 1 (In-PR sweep + evals): PASS — run 41882345112 (attempt 1) ran on in-PR commit 72ac9f4, and all 9 agentic / and 9 agentic eval / jobs succeeded. Later commits e7ad07cd7, 5d89c7d03, ce13f213b, 5e957ca1d and 4d0d518c merge main or re-append the changelog entry; the recipe and master entry are byte-identical between 72ac9f4 and 4d0d518c. The base changes that came in (srt-slurm acfb4dc, a TokenSpeed-only commit; RAPL/power telemetry; SPEC_ALGORITHM result metadata; AL-gate relocation; a stricter VRAM-clean wait; stream_output log streaming) change no server arg, env var, workload or eval.

✅ Check 2 (Evals): PASS — GSM8K ran on the PR image (sglang-rocm:v0.5.23-rocm10-mi35x-20261031@sha256:3867dc07…) at all 9 points, scoring 0.9773–0.9803 (n=1319). Every row is ok against both its best sibling (c24, 0.9803) and the exact ingested cohort (run 41526799231, 0.9773); the largest gap is 0.0030, against a threshold of about 0.011. The c24/c48/c80 evals loaded their own override_cNN variants, so FP8 KV, HiCache and SGLANG_USE_AITER_UNIFIED_ATTN (a direct env switch in pinned aiter_backend.py) ran in the eval.

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#48432 merged 2026-11-04, and its c24/c48/c80 commands match every production setting in the effective recipe. That includes FP8 target and draft KV, mem-fraction 0.88, admission and CUDA-graph sizes, the Mamba settings, the HiCache flags, --strip-thinking-cache, --mamba-max-states-per-path 2, and the HONOR_EXPLICIT_MEM_FRACTION, AITER_GDR_FLYDSL and UNIFIED_ATTN env vars. c1–c16 are unchanged and covered by merged #47951. The sign-off justifies its exclusions (metrics flags; ROCM_QUICK_REDUCE_QUANTIZATION, inert at TP1; SGLANG_ENABLE_SPEC_V2, which is absent from the pinned environ.py).

✅ Check 4 (Reuse command): PASS — COLLABORATOR ChangLiu0709 posted /use 41882345112 on its own line, naming the Check 1 run.

✅ Check 5 (Checklist template): PASS — all 20 items in the current PR_REVIEW_CHECKLIST.md template, including the cookbook sub-item, are present and checked.

✅ Check 6 (Upstream images / provenance / ordering): PASS — the image is upstream lmsysorg/sglang-rocm, built from SGLang e9c18259, which is an ancestor of main (374 commits behind). The PR adds only framework: sglang entries, so engine-first ordering is satisfied.

✅ Check 7 (Deprecated models): PASS — qwen3.8next is active for Agentic coding in MODELS.md as of 2026-11-05.

✅ Check 8 (Architecture hacks / integer all-reduce): PASS — there is no FLOP-reducing override; json-model-override-args only declares the checkpoint's existing FP8 PLE storage (pre-existing from #4542). The new lever, FP8 KV, is covered by the c24/c48/c80 evals. ROCM_QUICK_REDUCE_QUANTIZATION=NONE sits in the base worker env and reaches every point.

✅ Check 9 (Chat template): PASS — the base benchmark env sets AIPERF_APPLY_CHAT_TEMPLATE: 'true' for the agentic MTP replay.

✅ Check 10 (Engine patches): PASS — no reachable engine patch or setup script. The only git apply is the runner-side 573-participating-gpus.patch on the srtctl power-telemetry code, not on the serving stack.

✅ Check 11 (Golden AL): PASS — the c80 log shows SGLANG_SIMULATE_ACC_LEN=2.32 with match-expected and real-draft-token. signoff_facts golden-al (qwen3.8next, mtp, 3 tokens, thinking_on, standard verify) selects qwen3.8-flash-next-fp8__mtp__native__default-default.yaml and returns 2.32, a match.

➖ Check 12 (Append-only): N/A — the new changelog entry has no append-only: true.

✅ Check 13 (Draft precision): PASS — the embedded MTP head of amd/Qwen3.8-Flash-Next-Quark-MXFP4-AttnFP8-PLEFP8 loads through the checkpoint's Quark config, with no draft quantization, dtype or checkpoint override. The c24–c80 draft KV is FP8 E4M3, matching the FP8 target KV, which the policy allows. SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is unset (pinned default False).

✅ Check 14 (Pareto coverage): PASS — one curve (qwen3.8next / agentic-coding / mi355x_sglang / fp4 / p90 E2EL vs tput_per_gpu) built from the nine bmk_agentic_* artifacts of run 41882345112 on 72ac9f4, applying the pareto_coverage algorithm: 9 measured, 0 invalid, 7 on the frontier (c2, c8, c12, c16, c24, c48, c80).

✅ Check 15 (PR description): PASS — the body's throughput, interactivity, TTFT, GSM8K, error-drop counts, 299 GB share, validation SHA and later-commit claims all match the assessed code and artifacts.

➖ Check 16 (NVIDIA overview): N/A — MI355X only, so no NVIDIA configurations are affected.

➖ Check 17 (Metrics publication): N/A — this is an SGLang serving path, not Dynamo TRT-LLM.

✅ Check 18 (Recipe/image/sweep consistency): PASS — the agentic.yaml overrides c24/c48/c80 resolve with no generation errors. TP1/EP1 and the conc list agree with the master entry, and hicache-size (at most 298 GB) fits the 299 GB share. The image is unchanged and resolves via docker manifest inspect. No orchestration pins or dispatch changed, and the changelog accurately lists the FP8 KV, HiCache, Mamba and admission changes. No points were removed or re-tuned (6 to 9 points, 3 added).

Assessed commit: 4d0d518c7b7498866f9b5623d2d6d01ebb32785b.

chunfangamd and others added 4 commits November 5, 2026 13:42
The Update-branch merges of main inserted the entry in front of the VideoGenX H3 entry, which cost that entry its config-keys header and made infx.matrix.plan reject the diff. Main's file is restored unchanged and the entry is appended after it.
…last

The previous fix started from a stale origin/main and dropped newer main entries.
@ChangLiu0709
ChangLiu0709 merged commit 03bd790 into main Nov 6, 2026
29 checks passed
@ChangLiu0709
ChangLiu0709 deleted the chang/qwen3.8-flash-fp4-mi355x-sglang-agentic-c24-c48-c80 branch November 6, 2026 00:47
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Ingest report — ✅ Results ingested into the production database.

Ingest workflow · Merge Ingest run · Benchmark source run

Category new duplicate skipped unmapped failed
benchmark 9 0 9 0 0
eval 9 9 9 0 0
trace 9 0 0 0 0
power 9 0 0 0 0

benchmarkFiles 10, rawBenchmarkRows 18, coveredByPerJobFiles 9, purgedPoints 0, failedRunRows 0, runStatsNew 0, runStatsDuplicate 0, evalSamplesNew 11871, gpuMetricSamplesNew 43060, powerPublicationPoints 9, changelogEntriesWritten 1

Counts cover only this run. Rows: benchmark_results, eval_results, agentic rows linked to a trace, gpu_metrics series. This comment updates if the ingest is rerun.

中文

Ingest 报告 — ✅ 结果已写入 production 数据库。

上表仅统计本次运行写入的数据,各行单位依次为 benchmark_results 行、eval_results 行、已关联 trace 的 agentic 行和 gpu_metrics 序列。重新运行 ingest 时本评论会原地更新。

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

Labels

all-evals Expand eval selection to every fixed-sequence config full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants