Skip to content

Add DSV4 B200 disaggregated Dynamo SGLang STP configuration / 新增 DSV4 B200 分离式 Dynamo SGLang STP 配置 - #2560

Merged
cquil11 merged 15 commits into
mainfrom
dsv4-fp4-b200-dynamo-sglang-nscale
Sep 1, 2026
Merged

Add DSV4 B200 disaggregated Dynamo SGLang STP configuration / 新增 DSV4 B200 分离式 Dynamo SGLang STP 配置#2560
cquil11 merged 15 commits into
mainfrom
dsv4-fp4-b200-dynamo-sglang-nscale

Conversation

@RohitNagraj

@RohitNagraj RohitNagraj commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Description

Update the DSV4 B200 multinode disaggregated Dynamo SGLang STP configuration for 8k/1k.

  • Keep ten checked-in srt-slurm recipes aligned with the configured prefill and decode topologies.
  • Resolve the staged DSV4 checkpoint through the B200 multinode launcher.
  • Switch both prefill and decode KV transfer from Mooncake to NIXL.
  • Refresh the SGLang image and Dynamo revision, and align runtime flag names and defaults with the updated image.
  • Disable chat-template processing for all ten non-MTP STP recipes.

中文说明

更新 DSV4 在 B200 上的多节点分离式 Dynamo SGLang STP 8k/1k 配置。

  • 保持十个已检入的 srt-slurm recipe 与配置中的预填充和解码拓扑一致。
  • 通过 B200 多节点启动器解析已暂存的 DSV4 检查点。
  • 将预填充和解码两侧的 KV 传输从 Mooncake 切换为 NIXL。
  • 更新 SGLang 镜像和 Dynamo 版本,并对齐新镜像使用的运行时参数名称与默认值。
  • 为十个非 MTP 的 STP recipe 禁用聊天模板处理。

Related Issue

Supersedes #2251.
替代 #2251

Type of Change

  • Bug fix
  • New feature
  • Configuration change
  • Documentation update
  • Other (please describe)

Checklist

  • 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 perf-changelog.yaml and have not edited historical entries
  • Before merging via reuse, an authorized maintainer (OWNER/MEMBER/COLLABORATOR) has commented /reuse-sweep-run on this PR

Note

Low Risk
Benchmark and launcher configuration only; changes affect official perf/power recipe selection and Slurm job definitions, not application runtime logic.

Overview
Adds dsv4-fp4-b200-dynamo-sglang to nvidia-master.yaml with ten fixed 8k/1k disaggregated scenarios (varying prefill/decode worker counts and TP vs DEP8 layouts), each pointing at a new srt-slurm recipe under sglang/deepseek-v4/8k1k/.

The recipes wire B200 Slurm resources, Dynamo KV routing, SGLang prefill/decode with nixl disaggregation transfer, use_chat_template: false, and required DCGM power telemetry. Image and Dynamo revision are pinned to lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729 and hash 86f84b9486905c2bfaa4b756c9fa39f04ecf5ebd.

launch_b200-nscale-slurm.sh now treats DSV4 FP4 Dynamo-SGLang as in-scope for SPEC_DECODING none (STP) as well as MTP. utils/test_b200_b300_power_official_contract.py expects 47 power-contract recipes (+10 on cluster:b200-nscale). perf-changelog.yaml documents the new config key and NIXL/image/telemetry updates.

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

新增 DSV4 B200 Dynamo-SGLang STP 配置,包含十个分离式拓扑并接入 B200 多节点运行环境。
@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 关于重新运行失败任务的文档

将性能变更日志条目关联到 PR #2560
@@ -0,0 +1,145 @@
name: "disagg-b200-1p1d-dep8-tp8-4-c64"

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 name: field in disagg-b200-1p1d-dep8-tp8.yaml is "disagg-b200-1p1d-dep8-tp8-4-c64", with a stray -4- segment that doesn't match this recipe's topology (1 prefill + 1 decode = 2 nodes) or the naming convention used by every other new B200 recipe in this PR (e.g. disagg-b200-1p4d-dep8-tp8-c64, disagg-b200-1p1d-tp8-tp8-c1). It looks like a copy-paste leftover from a GB200-style template where that suffix denotes total node count; harmless at runtime since launch_b200-nscale-slurm.sh overwrites the name via sed before srtctl reads it, but worth cleaning up for consistency.

Extended reasoning...

The name: field on line 1 of disagg-b200-1p1d-dep8-tp8.yaml reads "disagg-b200-1p1d-dep8-tp8-4-c64". Every other new B200 recipe added in this PR follows a clean <topology>-c<concurrency> naming pattern with no extra numeric segment: disagg-b200-1p1d-dep8-dep8.yaml -> disagg-b200-1p1d-dep8-dep8-c512, disagg-b200-1p1d-tp8-tp8.yaml -> disagg-b200-1p1d-tp8-tp8-c1, disagg-b200-1p4d-dep8-tp8.yaml -> disagg-b200-1p4d-dep8-tp8-c64, and so on through the 3p2d/4p2d/5p2d/6p2d files. This file alone inserts a stray -4- between the topology and the concurrency suffix.\n\nOn the existing GB200 recipes in this codebase, that kind of numeric segment is a real, intentional convention: it denotes total node count (prefill_nodes + decode_nodes), e.g. a GB200 disagg-gb200-1p4d-dep8-tp8-10-c64.yaml-style file uses -10- because it sums to 10 nodes. Applying that same mental model here breaks down: this recipe's resources: block sets prefill_nodes: 1 and decode_nodes: 1, i.e. 2 total nodes, not 4. So -4- isn't just inconsistent with sibling files in this PR, it's also the wrong number under the very convention it appears to be borrowed from — strong evidence this is a copy-paste leftover from a GB200-style template rather than a deliberate choice.\n\nProof by walkthrough: (1) open disagg-b200-1p1d-dep8-tp8.yaml, line 1 is name: \"disagg-b200-1p1d-dep8-tp8-4-c64\"\". (2) Check resources: in the same file: prefill_nodes: 1, decode_nodes: 1 -> topology is 1p1d, 2 nodes total. (3) Compare to the sibling disagg-b200-1p4d-dep8-tp8.yaml in the same PR, which has prefill_nodes: 1, decode_nodes: 4 (5 nodes total) and is named disagg-b200-1p4d-dep8-tp8-c64 — no numeric node-count segment despite actually having more nodes. (4) There is therefore no consistent rule under which -4- belongs in the 1p1d file's name.\n\nWhy nothing currently prevents or catches this: recipe names are free-form YAML string values with no schema validation, and nothing in configs/nvidia-master.yaml or the sweep matrix reads the name: field for routing — the matrix entry in nvidia-master.yaml references the recipe purely by its CONFIG_FILE path, not by the embedded name. And at runtime, runners/launch_b200-nscale-slurm.sh executes sed -i \"s/^name:.*/name: \\\"\\\\"/\" \"\\"\" before \"srtctl apply\"\" ever runs, unconditionally replacing whatever is on that line with the runner-generated name. So this typo has zero effect on job submission, GPU allocation, or benchmark results — it is purely a checked-in metadata string that a human reading the repo (or grepping recipe names) would see and find confusing.\n\nFix is trivial: change line 1 to name: "disagg-b200-1p1d-dep8-tp8-c64"`, matching the convention of every sibling file added in this PR. Given the complete absence of functional impact (confirmed by tracing the sed override in the launcher) and the triviality of the fix, this is cosmetic — nit severity, not a merge blocker.

Comment thread perf-changelog.yaml Outdated
Comment on lines +5779 to +5786

- config-keys:
- dsv4-fp4-b200-dynamo-sglang
description:
- "Add a DeepSeek-V4-Pro FP4 Dynamo-SGLang STP configuration for B200 with ten 8k/1k disaggregated topologies."
- "Use Mooncake for KV transfer with chat-formatted benchmark inputs."
- "Image: lmsysorg/sglang:nightly-dev-cu13-20260708-b3632494"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX

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 new perf-changelog.yaml entry for dsv4-fp4-b200-dynamo-sglang has pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX, a literal unresolved placeholder. Every other entry in the file uses the real PR number, and since this PR is #2560, XXX should be replaced with 2560.

Extended reasoning...

The tail end of the newly-appended perf-changelog.yaml entry (config-keys: [dsv4-fp4-b200-dynamo-sglang]) reads:

pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX

XXX is a literal, unresolved placeholder rather than an actual PR number.

Why this happened: perf-changelog.yaml entries are appended before the PR number is known (the PR doesn't exist yet at authoring time), so authors commonly stub the link with a placeholder and are expected to swap in the real number once GitHub assigns it. That final substitution step was missed here.

Evidence this is the convention, not a one-off: every other entry in the file uses a real, resolvable PR number — the immediately preceding entry (the B300 DSV4 AgentX MTP retune) links to /pull/2536, and entries further back link to /pull/2309, /pull/2238, and /pull/2206. This PR's own metadata identifies it as #2560, so the correct value is unambiguous.

Step-by-step proof:

  1. Open perf-changelog.yaml at the new entry (added at the physical end of the file, lines 5779-5786).
  2. Read the last field: pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXX.
  3. Compare against the pr-metadata for this change: <pr number="2560">.
  4. XXX != 2560 — the link is broken/dangling and does not resolve to this PR (or any PR).
  5. Scan sibling entries in the same file (2536, 2309, 2238, 2206, ...) — all use real numbers, confirming XXX is an anomaly, not an established pattern.

Impact: This is a documentation/traceability defect, not a functional one — it doesn't affect any benchmark execution, config resolution, or CI job. But it does violate the PR's own checklist item ("I have appended a new entry to the physical end of perf-changelog.yaml ... accurate changelog entry") and breaks the changelog's utility as an audit trail back to the originating PR, since anyone auditing changelog history via pr-link will hit a 404 for this entry.

Fix: Replace XXX with 2560 in the pr-link field before merge.

@github-actions

Copy link
Copy Markdown
Contributor

将 DSV4 B200 STP 配方恢复为原始合成输入路径,并让 nscale 启动器同时支持 STP 与 MTP。
@github-actions

Copy link
Copy Markdown
Contributor

2 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

将 DSV4 B200 STP 分离式配置切换到 NIXL,并同步更新 SGLang 镜像、Dynamo 版本、运行时参数和聊天模板。
同步最新的 main 分支。
为 DSV4 B200 STP 的十个分离式配方禁用聊天模板,并同步最新的 main 分支与性能变更日志。
合并 main,并解决性能变更日志和 B200 Nscale 启动脚本冲突。
更新基础分支并保留 DSV4 B200 SGLang 配置矩阵。
更新 DSV4 B200 SGLang 镜像至可用版本。
@github-actions

Copy link
Copy Markdown
Contributor

Comment thread configs/nvidia-master.yaml
将十个 DSV4 B200 SGLang 配方的容器镜像与主配置保持一致。
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 99d1561. Configure here.

为十个 B200 分离式 STP 配方启用必需的 DCGM 功耗遥测,并同步更新功耗契约测试中的配方计数。
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 33447526958

@Ankur-singh

Copy link
Copy Markdown
Collaborator

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.
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this.
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • 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 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; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • 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 single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang 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.

Additional detail section:

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — Ankur-singh is a listed owner of configs/nvidia-master.yaml; all other changed paths fall under the catch-all, which a recognized CODEOWNER satisfies.
✅ Check 1 (passing sweep on in-PR commit): PASS — head a430c17 carries run 33447526958 with all ten multi-node 8k1k / and all multi-node eval / check-runs executed with success (single-node lanes skipped only because this PR selects a multi-node config).
✅ Check 2 (evals pass): PASS — gsm8k em_strict 0.964–0.969 across the nine evaluated topologies, on the same image as this PR's config (lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729).
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission; the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — Ankur-singh (COLLABORATOR) posted /reuse-sweep-run 33447526958.
✅ Check 5 (latest checklist template): PASS — every item in the current docs/PR_REVIEW_CHECKLIST.md template is present and checked in the sign-off.
✅ Check 6 (upstream image + engine-first): PASS — image is upstream lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729; engine-first is satisfied by existing dsv4-fp4-b200-sglang and dsv4-fp4-b200-vllm entries on cluster:b200-nscale.
✅ Check 7 (deprecations): PASS — dsv4 single-turn 8k1k is active until its scheduled last day 2026-09-08 (review date 2026-09-01) per MODELS.md.
✅ Check 8 (no architecture hacks): PASS — no --hf-overrides or model-config edits; SGLANG_OPT_* env toggles select kernels/precision within the shipped image.
➖ Check 9 (spec-decode chat templates): N/A — no speculative-decoding changes; all ten recipes are STP (spec_decoding: none).
✅ Check 10 (no engine patches): PASS — no patching; the pinned SGLang image runs as shipped, and Dynamo is installed at a pinned revision as the frontend framework, matching existing dynamo configs.
➖ Check 11 (agentic spec-decode golden AL): N/A — no agentic speculative-decoding changes.
➖ Check 12 (append-only): N/A — no new perf-changelog.yaml entry uses append-only: true.

@cquil11
cquil11 merged commit 2bd4738 into main Sep 1, 2026
32 checks passed
@cquil11
cquil11 deleted the dsv4-fp4-b200-dynamo-sglang-nscale branch September 1, 2026 17:10
functionstackx added a commit that referenced this pull request Sep 9, 2026
…precation

MODELS.md set 2026-09-08 as the last day for the Single-turn 8k1k scenario on
DeepSeek-V4-Pro 1.6T (dsv4). Today is 2026-09-09, so this carries it out.
Agentic coding is unaffected and stays active for dsv4, including its MTP and
DSpark arms; the model is not retired.

Removes 46 dsv4 8k1k config keys from the active master configs and archives
them under configs/deprecated/ (bodies byte-identical to main):
  - nvidia-dsv4-8k1k-master.yaml (33): fp4 b200 sglang/vllm/trt (+mtp), fp4
    b300 sglang/vllm/trt (+mtp), fp8 h200 vllm/sglang (+mtp), and every
    b200/b300/gb200/gb300 dynamo-vllm, dynamo-sglang, dynamo-trt and
    llmd-vllm multi-node 8k1k key
  - amd-dsv4-8k1k-master.yaml (13): fp8 mi300x/mi325x vllm (+mtp), fp4 mi355x
    vllm/sglang/atom (+mtp), fp4 mi355x sglang-disagg (+mtp) and atom-disagg

The count is 46 rather than the 45 quoted in the notice because
dsv4-fp4-b200-dynamo-sglang (#2560) landed after the notice was written.
The 19 dsv4 agentic-coding keys are untouched.

Their 28 benchmark scripts move to the sibling deprecated/ directories (25
under single_node/fixed_seq_len/, 3 under multi_node/). The agentic
dsv4_fp4_mi355x_vllm_mtp.sh comment that cites the fixed_seq_len recipe now
points at its deprecated/ path.

Removes test_gb300_dsv4_recipe_images_match_their_master_configs and its two
private helpers: it asserted on the gb300 dynamo-sglang dsv4 8k1k keys that are
archived here, and no remaining gb300 dynamo-sglang key pins its recipe
container to the master image.

Deliberately kept, per #2493 and #2527: the dsv4 SPEED-Bench scripts
(driven by speedbench-al.yml, not the master configs), the srt-slurm and llm-d
recipe YAMLs the archived multi-node keys reference, ci-priority.yaml,
thresholds.yaml, and perf-changelog.yaml (removals do not trigger benchmarks).

中文:执行 MODELS.md 中 2026 年 9 月 8 日 DeepSeek-V4-Pro 1.6T(dsv4)单轮 8k1k
场景的下线计划;今日为 2026-09-09,故予以执行。智能体编码不受影响并继续启用,
含 MTP 与 DSpark 分支;该模型不退役。

从启用的主配置中移除 46 个 dsv4 8k1k 配置项并归档至 configs/deprecated/
(NVIDIA 33 个、AMD 13 个,内容与 main 逐字节一致)。数量为 46 而非公告所述的
45,是因为 dsv4-fp4-b200-dynamo-sglang(#2560)在公告发布后合入。19 个 dsv4
智能体编码配置项未做改动。对应的 28 个基准测试脚本移入同级 deprecated/ 目录
(单节点 fixed_seq_len/ 25 个、多节点 3 个)。

移除 test_gb300_dsv4_recipe_images_match_their_master_configs 及其两个私有
辅助函数:该测试针对的 gb300 dynamo-sglang dsv4 8k1k 配置项已在此归档,且余下
的 gb300 dynamo-sglang 配置项均未将配方容器固定为主配置镜像。

按 #2493#2527 的先例保留:dsv4 SPEED-Bench 脚本、已归档多节点配置项引用的
srt-slurm 与 llm-d 配方 YAML、ci-priority.yaml、thresholds.yaml 以及
perf-changelog.yaml(移除操作不触发基准测试)。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

5 participants