Repository navigation
Conversation
Add glm5.2-fp4-mi355x-atom-disagg-agentic-mtp: eight AgentX points with a CPP4 (PP4 x TP1) ATOM prefill behind AToMesh and Mooncake RDMA to the decodes. 1P1D on one node at C56-C112 keeps the prefill's prefix tier in a Mooncake Store of four per-NIC pools on reserved 2 MiB HugeTLB pages; 1P2D at C56 and 1P3D at C12-C24 use LMCache in the prefill. host_setup drops the page cache and compacts memory before every point. Ship NVIDIA/srt-slurm#604 as runners/srt-slurm/patches/atom-tp-from-pp.patch so srtctl launches the PP4 prefill with -tp 1. 新增 glm5.2-fp4-mi355x-atom-disagg-agentic-mtp:八个 AgentX 测试点。ATOM prefill 为 CPP4(PP4 x TP1),经 AToMesh 路由,并通过 Mooncake RDMA 把 KV 传给 decode。单节点 1P1D(C56-C112)把 prefill 的前缀缓存层放在 Mooncake Store 中:四个按网卡划分的池,使用预留的 2 MiB HugeTLB 大页;1P2D(C56)和 1P3D(C12-C24)在 prefill 中使用 LMCache。每个测试点开始前,host_setup 都会 清理页缓存并整理内存。 以 runners/srt-slurm/patches/atom-tp-from-pp.patch 的形式附带 NVIDIA/srt-slurm#604,使 srtctl 以 -tp 1 启动 PP4 prefill。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the contribution!
中文感谢你的贡献!
|
functionstackx
left a comment
There was a problem hiding this comment.
u might need to edit inferencex-e2e/infx/results/agentic/server_metrics.py & inferencex-e2e/infx/results/agentic/backends/atom.py for atom disagg too for it to collect mooncake prom metrics https://github.com/SemiAnalysisAI/InferenceX/pull/3964/changes
There was a problem hiding this comment.
I reviewed this PR and didn't find any bugs. Because it's a large, complex multi-node benchmark change — new ATOM prefill/decode-disaggregation recipe variants, Mooncake/LMCache service orchestration, hugepage reservation logic, and a backend patch to ATOM's tensor-parallel sizing — a human look would still be worthwhile.
What was reviewed:
- The new
atom-tp-from-pp.patch: it only changes-tpsizing whenpipeline-parallel-size/prefill-context-parallel-size> 1, and no existing ATOM recipe in the repo sets those, so prior ATOM points are unaffected. perf-changelog.yaml: confirmed the diff is a pure append (12 new lines at the file's tail, no earlier bytes touched) and the entry is English-only.- Cross-checked tp/pp/dcp-size settings between
amd-master.yaml's search space anddisagg-variants.yaml's role definitions — they match. - The ruled-out candidate issue (possible eval-result overwrite risk, as the first pp>1 multinode agentic entry) is worth a maintainer's confirmation given it wasn't run before this PR.
Extended reasoning...
The diff adds a new multi-node GLM-5.2 ATOM PD-disaggregation benchmark recipe (335 lines of YAML with Mooncake/LMCache service orchestration, hugepage reservation host_setup/teardown, NUMA-pinned RDMA services), wires it into amd-master.yaml, appends one perf-changelog.yaml block, and includes a vendored srt-slurm patch that changes how ATOM's backend computes -tp from GPU count/pipeline-parallel-size. No auth/crypto/permissions surface is touched; the sensitive bits are correctness of resource math (GPU/hugepage counts, port assignments) and whether the new -tp derivation could regress other ATOM configs — I confirmed no other ATOM recipe currently sets pipeline-parallel-size, so the patch is a no-op elsewhere. Size and multi-service complexity, plus the PR's own note that this has not yet been run on the target cluster, are why a human should still look even though no bugs were found.
This review covers commit 8df9856, which is no longer the latest commit on this pull request; later commits are not covered by it.
…om-disagg-agentx # Conflicts: # inferencex-e2e/runners/srt-slurm/patches/README.md
…es above held pages - Set HF_HOME/HF_HUB_CACHE on the ATOM roles. amd/GLM-5.2-MXFP4 has no staged copy on mi355x-amds, so the job serves hf:; srtctl downloads it once into the shared hub cache only when a role sets HF_HOME. - Follow the UMBP recipe's host_setup for the Store: the cluster setup.sh frees leftover hugepages and drops the page cache, then the prefill node reserves the owners' 714752 2 MiB pages plus 2% on top of the pages host services hold. mi355x-amds nodes hold 5656, which the old fixed target of 716800 left too few for both NUMA nodes. The LMCache points keep the cluster default host setup. - Run the four Store points from one variant, so the planner schedules one GSM8K eval for them instead of four. - Drop header and section comments per AGENTS.md, and rename the srt-slurm patch to 604-atom-tp-from-pp.patch like the other patches. - 为 ATOM 角色设置 HF_HOME/HF_HUB_CACHE。mi355x-amds 上没有预置的 amd/GLM-5.2-MXFP4,任务以 hf: 方式加载;只有角色设置了 HF_HOME,srtctl 才会把模型一次性下载到共享 hub 缓存。 - Store 的 host_setup 参照 UMBP recipe:先由集群 setup.sh 释放残留大页并 清理页缓存,再在 prefill 节点上于主机服务已占用的大页之上,预留 owner 所需 的 714752 个 2 MiB 页并多留 2%。mi355x-amds 节点常驻占用 5656 页,原先固定 的 716800 目标会导致两个 NUMA 节点的空闲页不足。LMCache 测试点沿用集群默认 的 host setup。 - 四个 Store 测试点共用一个变体,规划器只为它们安排一个 GSM8K eval,而不是 四个。 - 按 AGENTS.md 删除头注释与段落注释,并把 srt-slurm 补丁按惯例重命名为 604-atom-tp-from-pp.patch。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ache Mount /var/lib/hf-hub-cache at /mnt/hf_hub_cache and point HF_HUB_CACHE at it, as the single-node GLM-5.2 points do, so nodes that already hold amd/GLM-5.2-MXFP4 load it from local NVMe instead of downloading it into the shared cache. HF_HOME stays set so srtctl fills the first node's cache before workers start. 像单机 GLM-5.2 测试点一样,把 /var/lib/hf-hub-cache 挂载到 /mnt/hf_hub_cache,并让 HF_HUB_CACHE 指向它。已经有 amd/GLM-5.2-MXFP4 的 节点会直接从本地 NVMe 加载,不再下载到共享缓存。保留 HF_HOME,使 srtctl 在 worker 启动前先补齐第一个节点的缓存。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On mi355x-amds both Store points failed in the first owner: every ibv_reg_mr of its 349 GiB HugeTLB segment returned ENOMEM at once. The pyxis --container-remap-root user is root only inside its namespace, so the NIC's pin of the segment counts against RLIMIT_MEMLOCK. Run `ulimit -l unlimited` before each owner starts, as the DSv4 SGLang GB200 and GB300 recipes do for their Mooncake stores. 两个 Store 测试点都在 mi355x-amds 上的第一个 owner 处失败:它对 349 GiB HugeTLB 段的每次 ibv_reg_mr 都立刻返回 ENOMEM。pyxis 的 --container-remap-root 用户只在自己的命名空间内是 root,网卡锁定该段时会 计入 RLIMIT_MEMLOCK。现在每个 owner 启动前先执行 `ulimit -l unlimited`, 与 DSv4 SGLang GB200、GB300 配方对 Mooncake store 的做法一致。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (cherry-pick #3964) Carry #3964 (2db0192, 0fda3f1, 0842d82) so this PR's sweep prices the ATOM P/D cache rates with it: count only prefill endpoints, take the CPU rate from atom:prefix_cache_offload_tokens (reported for LMCache and the Mooncake Store alike), and slice counters to the profiling window. Applied as #3964's net diff onto current main; drop it once #3964 merges. 携带 #3964(2db01926、0fda3f1e、0842d829),使本 PR 的 sweep 用它来计算 ATOM P/D 的缓存命中率:只统计 prefill 端点,CPU 命中率取自 atom:prefix_cache_offload_tokens(LMCache 与 Mooncake Store 都会上报), 并按 profiling 窗口切分计数。以 #3964 相对其基线的净改动应用到当前 main 上; #3964 合入后即可移除。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Thanks! Cherry-picked #3964 into this PR so the sweep uses the fixed ATOM P/D cache accounting. The Mooncake Store needs no separate scrape: ATOM reports its reuse in the same |
srtctl's model pre-download runs without its bash wrapper, so it sees only the HF_HOME it exports itself, not the role's HF_HUB_CACHE. On the c72 Store point it therefore pulled all 438 GB into the container's /tmp/hf_home/hub while the workers loaded the copy already in /var/lib/hf-hub-cache. Mount that cache at $HF_HOME/hub so the pre-download checks, and if needed fills, the same directory the workers read. srtctl 的模型预下载不经过 bash 包装,只能看到它自己 export 的 HF_HOME, 看不到角色环境里的 HF_HUB_CACHE。因此在 Store c72 测试点上,它把整整 438 GB 下载到了容器内的 /tmp/hf_home/hub,而 worker 实际加载的是 /var/lib/hf-hub-cache 中已有的副本。现在把该缓存挂载到 $HF_HOME/hub, 使预下载检查(必要时填充)的正是 worker 读取的同一目录。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
View unofficial run (performance): https://inferencex.semianalysis.com/inference?unofficialRun=40578080205 View unofficial run (accuracy): https://inferencex.semianalysis.com/evaluation?unofficialRun=40578080205 |
…om-disagg-agentx Resolve the perf-changelog conflict with prepare_perf_changelog_merge resolve-conflict, which keeps this PR's entry as the tail append, and keep both rows in runners/srt-slurm/patches/README.md: 602 from main and 604 from this PR. All three patches apply in order on srt-slurm 545233a0d. 用 prepare_perf_changelog_merge resolve-conflict 解决 perf-changelog 冲突, 本 PR 的条目仍是末尾追加;runners/srt-slurm/patches/README.md 保留 main 的 602 和本 PR 的 604 两行。三个补丁按顺序都能打到 srt-slurm 545233a0d 上。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3c61360 to
767819a
Compare
…om-disagg-agentx Resolve the perf-changelog conflict with #4071 using prepare_perf_changelog_merge resolve-conflict; this PR's entry stays the tail append. 用 prepare_perf_changelog_merge resolve-conflict 解决与 #4071 的 perf-changelog 冲突,本 PR 的条目仍是末尾追加。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…om-disagg-agentx Resolve the perf-changelog conflict with #4050 using prepare_perf_changelog_merge resolve-conflict; this PR's entry stays the tail append. 用 prepare_perf_changelog_merge resolve-conflict 解决与 #4050 的 perf-changelog 冲突,本 PR 的条目仍是末尾追加。 [skip-sweep] Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in ATOM's CI ATOM's CI runs these 1P1D points at 46.1K tok/s/GPU (c112) with one master and two 768 GiB owners that all four PP stages share. Per-NIC pools here reached 36.8K at 4 x 349 GiB and 40.5K at 4 x 448 GiB: each stage only reads its own pool, and a prefix hit needs every stage to keep its chunk. Give 1P1D one master and two 768 GiB owners, one per NUMA node, each registered on rdma0-3, and set MC_ENABLE_DEST_DEVICE_AFFINITY on the prefill so each stage reaches an owner through the NIC of its own name on this rail-isolated fabric. 1P2D and 1P3D keep their tested per-NIC pools. ATOM CI 在这些 1P1D 点上(c112)跑到 46.1K tok/s/GPU,用的是一个 master 和两个 768 GiB owner,四个 PP stage 共享。这里按网卡分池时,4 x 349 GiB 为 36.8K,4 x 448 GiB 为 40.5K:每个 stage 只能读自己的池,而前缀命中 要求每个 stage 都保留各自的块。1P1D 改为一个 master 和两个 768 GiB owner (每个 NUMA 节点一个),各自注册在 rdma0-3 上,并在 prefill 上设置 MC_ENABLE_DEST_DEVICE_AFFINITY,使每个 stage 在这套按 rail 隔离的网络中 通过同名网卡访问 owner。1P2D 和 1P3D 保留已验证的按网卡分池。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…om-disagg-agentx Resolve the perf-changelog conflict with prepare_perf_changelog_merge resolve-conflict; this PR's entry stays the tail append. 用 prepare_perf_changelog_merge resolve-conflict 解决 perf-changelog 冲突, 本 PR 的条目仍是末尾追加。 [skip-sweep] Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
仅汇总 prefill/unified 缓存计数,CPU reuse 使用 offload counter, overall 合并 GPU 和 CPU reuse;缺少增量或角色时保留未知值。
仅在确认关闭 CPU offload 且无计数器时补零,保留单端点自定义 metrics 的角色回退,并从输入总量中排除 decode 重复计数。补充相应行为回归。
中文:同步当前 main,保留 ATOM 缓存计数修复与上游 KV 使用率处理。
中文:按端点与完整标签域校验缓存分层计数;仅在 CPU offload 明确关闭且现有计数均为零时补齐缺失零值,拒绝无效或矛盾的 offload 数据。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chunfangamd
left a comment
There was a problem hiding this comment.
As a PR reviewer and CODEOWNER, I have reviewed this and have:
- 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/38674332505
- Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/38674332505
- 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_MOEis 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
- 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
- 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:
- insert any additional info here
Signed: @chunfangamd
❌❌❌ REJECTED ❌❌❌@chunfangamd this sign-off cites a sweep from a superseded recipe and the PR has no green sweep on its current tree. The new changelog entry also omits the target quantization and KV dtype. ❌ Check 1 (Passing sweep on in-PR commit): FAIL — The passing sweep predates a material change in ❌ Check 18 (Recipe/image/sweep consistency): FAIL — (f2) The new
Passed and not applicable checks✅ Check 0 (CODEOWNER): PASS — @chunfangamd is a named owner of ✅ Check 2 (Evals): PASS — Run 39028510364 ran four GSM8K lanes on the PR's digest-pinned image: 1P1D c128 0.962, 1P2D c56 0.965, 1P3D c16 0.972, 1P3D c24 0.966. Every gap is within 2 sigma of the best sibling and of the ingested ATOM cohort (39540045682). No conditional kernel path is involved. ➖ Check 3 (Upstream recipe): N/A — Only an ATOM ( ✅ Check 4 (Reuse command): PASS — COLLABORATOR @seungrokj posted ✅ Check 5 (Checklist template): PASS — Every item in the current ✅ Check 6 (Upstream images / engine-first): PASS — ✅ Check 7 (Deprecated models): PASS — ✅ Check 8 (No architecture hacks): PASS — There are no ✅ Check 9 (Chat template): PASS — The recipe sets ✅ Check 10 (No engine patches): PASS — ✅ Check 11 (Agentic golden AL): PASS — The launcher sets ➖ Check 12 (Append-only): N/A — The new changelog entry has no ✅ Check 14 (Pareto coverage): PASS — One curve: glm5.2 agentic-coding, MI355X ATOM, fp4, p90 E2EL, run 39028510364. Seven measured points are on the frontier (1P3D c16 and c24, 1P2D c56, 1P1D c56, c72 and c96), taken from the ➖ Check 16 (NVIDIA overview): N/A — The only affected hardware is AMD MI355X. ➖ Check 17 (Metrics publication): N/A — No Dynamo TRT-LLM serving path is affected. Assessed commit: |
Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # inferencex-e2e/perf-changelog.yaml
…type The entry omitted the recipe's online ptpc_fp8 target quantization (MTP layer 78 excluded), kv_cache_dtype fp8 and INT4 quick all-reduce, and the draft's resulting precision. Co-authored-by: Cursor <cursoragent@cursor.com>
# Conflicts: # inferencex-e2e/perf-changelog.yaml
#4397 was closed in favor of SemiAnalysisAI/InferenceX-app#1533, which reads the ATOM P/D counters from server_metrics_export.json at ingest. This PR now changes only the recipe, its master config entry, the changelog and the srt-slurm patch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Status of the sign-off verification above (assessed on
@chunfangamd, could you re-sign off citing 40578080205, with the draft-precision note above in the additional detail section? |
|
/reuse-sweep-run 40578080205 |
Summary
Adds
glm5.2-fp4-mi355x-atom-disagg-agentic-mtp: nine GLM-5.2 MXFP4 AgentX points on MI355X with ATOM prefill/decode disaggregation behind AToMesh, Mooncake RDMA from prefill to decode, MTP, and the prefill's prefix cache in a Mooncake Store. The current ATOM entry stops at concurrency 10 on one node; these points cover concurrency 12-128.Every point has one CPP4 prefill worker (PP4 x TP1 on GPUs 0-3, layers split 20/20/20/18):
genericservices on the prefill node. 1P1D, like ATOM's CI, has one master and two 768 GiB owners, one per NUMA node, shared by all four PP stages; each owner registers on rdma0-3, and the prefill setsMC_ENABLE_DEST_DEVICE_AFFINITYso each stage reaches an owner through the NIC of its own name on this rail-isolated fabric. 1P2D and 1P3D start a master and a 349 GiB owner for each prefill-stage NIC (rdma0-3), so each stage reads its own pool on its own rail. An owner registers its segment in 64 GiB regions, which the ionic driver maps only when they are all 2 MiB pages.host_setuptherefore reserves HugeTLB pages through the cluster'shugepage_sanity.sh, as the DSv4 UMBP recipe does: the owners' pages plus 2% on top of the pages host services already hold (5656 on themi355x-amdsnodes seen so far). It reserves them only on the head node, where srtctl starts the prefill (it matches the node's addresses againstSLURM_LAUNCH_NODE_IPADDRand fails if srun did not set it), checks each NUMA node's share, and teardown releases the pages. Owners setMC_STORE_USE_HUGEPAGE=1, which fails instead of falling back to 4 KiB pages, and runulimit -l unlimitedfirst: the remapped container root lacks hostCAP_IPC_LOCK, so registering the segment counts againstRLIMIT_MEMLOCK.dram-utilization: 1.0gives each 4-GPU server 1499 GB. The 1P1D decode shares the prefill's node, so its owners hold 1649 GB, 825 GB per NUMA node, within the prefill's and the decode's shares. The 1P2D and 1P3D decodes run on their own nodes, so those owners hold the prefill's 1499 GB.mi355x-amds); a Store prefill never has. On the same points the Store matched or beat it (see below).amd/GLM-5.2-MXFP4has no staged copy onmi355x-amds; as the single-node GLM-5.2 points do, workers read it from each node's local hub cache (/var/lib/hf-hub-cachemounted at$HF_HOME/hub, the only path srtctl's pre-download sees), and srtctl fills the first node's cache before they start. Each point'shost_setupre-runs the cluster'ssetup.sh, which drops the page cache, before reserving hugepages. The five 1P1D points share one recipe variant, so the sweep runs one GSM8K eval for them.-tp, so the PP4 prefill would launch as-tp 4 --pipeline-parallel-size 4(16 ranks on 4 GPUs).runners/srt-slurm/patches/604-atom-tp-from-pp.patchcarries fix(atom): size -tp from the worker's GPUs over its PP and PCP stages NVIDIA/srt-slurm#604, which divides by the pipeline and prefill-context stages; it still applies on the v2.59.1 pin. Drop the patch once the pin includes that PR.infx. The ATOM P/D cache rates come from the counters already inserver_metrics_export.json, which fix(atom): read P/D cache counters from prefill and ingest CPU offload InferenceX-app#1533 reads at ingest: prefill endpoints only, withatom:prefix_cache_offload_tokensas the CPU tier.rocm/atom-dev:nightly_202610131249, pinned by digest (ROCm/ATOM 6fd1bb1be).Runs on
mi355x-amds. Sweep 40578080205 ran every point and eval green on45743f9f4; the recipe, its master config entry and the srt-slurm patch at the head are unchanged from that commit. Throughput per GPU, TTFT p50/p90:Compared with the earlier layout (sweep 38674332505: 1P1D on per-NIC 4 x 349 GiB pools, LMCache for 1P2D and 1P3D), 1P1D C112 rose from 36,779 to 45,196 tok/s/GPU and its TTFT p50 fell from 19.3 to 6.1 s; 1P2D C56 rose from 22,379 to 24,323. This recipe's earlier sweep 39028510364 (on
1a153fd1) measured C112 at 39,245 and C96 at 42,884; every other point agrees with it within 2%. C112 is now within 2% of the 46.1K that ATOM's CI reaches with the same 1536 GiB pool on another cluster.AI model disclosure
claude-opus-5-5(Claude Opus 5.5), running in Claude Code.PR checklist and change type
Type of Change
Checklist
inferencex-e2e/perf-changelog.yamland have not edited historical entriesfull-sweep-fail-fast(recommended),full-sweep-enabled, ornon-canary-full-sweep-enabled. Optional modifiersall-evals,evals-only, andagentx-fastrequire a primary label; the last two block reuse while applied.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.中文
概要
新增
glm5.2-fp4-mi355x-atom-disagg-agentic-mtp:在 MI355X 上运行 GLM-5.2 MXFP4 的九个 AgentX 测试点,采用 ATOM 预填充/解码分离式推理,由 AToMesh 路由,通过 Mooncake RDMA 把 KV 从预填充传到解码,开启 MTP,并把预填充的前缀缓存放在 Mooncake Store 中。现有的 ATOM 配置在单节点上最高只到并发 10;这些测试点覆盖并发 12-128。每个测试点都使用一个 CPP4 预填充 worker(GPU 0-3 上的 PP4 x TP1,层划分为 20/20/20/18):
genericservice 运行在预填充节点上。1P1D 与 ATOM CI 一致,使用一个 master 和两个 768 GiB owner(每个 NUMA 节点一个),由四个 PP stage 共享;每个 owner 注册在 rdma0-3 上,预填充设置MC_ENABLE_DEST_DEVICE_AFFINITY,使每个 stage 在这套按 rail 隔离的网络中通过同名网卡访问 owner。1P2D 和 1P3D 为每个预填充 stage 的网卡(rdma0-3)各启动一个 master 和一个 349 GiB owner,使每个 stage 在自己的 rail 上读取自己的池。owner 以 64 GiB 为单位注册其 segment,而 ionic 驱动只有在这些区域全部由 2 MiB 页组成时才能映射。因此host_setup参照 DSv4 UMBP 配方,通过集群的hugepage_sanity.sh预留 HugeTLB 大页:在主机服务已占用的大页(目前所见的mi355x-amds节点上为 5656 页)之上,预留 owner 所需的页数并多留 2%。只在 srtctl 启动预填充的 head 节点上预留(用SLURM_LAUNCH_NODE_IPADDR匹配本机地址,srun 未设置该变量时直接失败),随后检查每个 NUMA 节点上的份额,teardown 时再释放。owner 设置了MC_STORE_USE_HUGEPAGE=1,大页不足时直接失败,不会退回 4 KiB 页;并且先执行ulimit -l unlimited:重映射的容器 root 没有主机的CAP_IPC_LOCK,注册该段会计入RLIMIT_MEMLOCK。dram-utilization: 1.0为每个 4 卡服务器提供 1499 GB。1P1D 的解码与预填充同节点,因此其 owner 共占 1649 GB,每个 NUMA 节点 825 GB,落在预填充和解码各自的份额之内。1P2D 和 1P3D 的解码在各自的节点上,因此这些 owner 只占预填充的 1499 GB。mi355x-amds上 8 次启动卡了 3 次);Store 预填充从未出现这种情况。在相同测试点上 Store 不逊于 LMCache(见下文)。mi355x-amds上没有预置的amd/GLM-5.2-MXFP4;与单机 GLM-5.2 测试点一样,worker 从各节点本地的 hub 缓存读取模型(/var/lib/hf-hub-cache挂载到$HF_HOME/hub,这是 srtctl 预下载唯一能看到的路径),srtctl 会在 worker 启动前先补齐第一个节点的缓存。每个测试点的host_setup都会先重新运行集群的setup.sh清理页缓存,再预留大页。五个 1P1D 测试点共用一个配方变体,因此扫描只为它们运行一个 GSM8K eval。-tp传入,PP4 预填充因此会以-tp 4 --pipeline-parallel-size 4启动(4 张 GPU 上 16 个 rank)。runners/srt-slurm/patches/604-atom-tp-from-pp.patch携带 fix(atom): size -tp from the worker's GPUs over its PP and PCP stages NVIDIA/srt-slurm#604,按 pipeline 和 prefill-context stage 数相除;在 v2.59.1 的固定版本上仍能打上。子模块的固定版本包含该 PR 后即可删除此补丁。infx。ATOM P/D 的缓存命中率取自server_metrics_export.json中已有的计数器,由 fix(atom): read P/D cache counters from prefill and ingest CPU offload InferenceX-app#1533 在 ingest 时读取:只统计 prefill 端点,CPU 层取atom:prefix_cache_offload_tokens。rocm/atom-dev:nightly_202610131249,按 digest 固定(ROCm/ATOM 6fd1bb1be)。在
mi355x-amds上的运行。 扫描 40578080205 在45743f9f4上全部测试点和 eval 均通过;当前 head 的配方、master 配置条目和 srt-slurm 补丁与该 commit 相同。每 GPU 吞吐与 TTFT p50/p90:与之前的布局(扫描 38674332505:1P1D 用按网卡划分的 4 x 349 GiB 池,1P2D 和 1P3D 用 LMCache)相比,1P1D C112 从 36,779 升到 45,196 tok/s/GPU,TTFT p50 从 19.3 s 降到 6.1 s;1P2D C56 从 22,379 升到 24,323。同一配方之前的扫描 39028510364(
1a153fd1)测得 C112 为 39,245、C96 为 42,884,其余测试点与之相差在 2% 以内。C112 现已与 ATOM CI 在另一个集群上用同样 1536 GiB 池跑出的 46.1K 相差不到 2%。AI 模型使用说明
claude-opus-5-5(Claude Opus 5.5),在 Claude Code 中运行。改动类型
新功能;配置变更。
🤖 Generated with Claude Code