Skip to content

Update DeepSeek-V4-Pro (DSV4) FP4 GB300 Dynamo-SGLang AgentX MTP configs / 更新 DeepSeek-V4-Pro(DSV4)FP4 GB300 Dynamo-SGLang AgentX MTP 配置 - #2644

Open
weireweire wants to merge 9 commits into
mainfrom
perf/dsv4-gb300-sglang-low-concurrency
Open

Update DeepSeek-V4-Pro (DSV4) FP4 GB300 Dynamo-SGLang AgentX MTP configs / 更新 DeepSeek-V4-Pro(DSV4)FP4 GB300 Dynamo-SGLang AgentX MTP 配置#2644
weireweire wants to merge 9 commits into
mainfrom
perf/dsv4-gb300-sglang-low-concurrency

Conversation

@weireweire

@weireweire weireweire commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Description

  • Update the complete GB300 DeepSeek-V4-Pro Dynamo-SGLang AgentX recipe family to SGLang nightly-dev-cu13-20260811-d59c1ddf and the released Dynamo 1.4.0 wheels/router.
  • Replace the TP4 HiCache aggregate sweep with a tuned TP4 concurrency-8 low-latency profile.
  • Add TP8 concurrency-1 and concurrency-4 aggregate profiles.
  • Enable decode CUDA graphs through each intended request ceiling and use synthetic MTP acceptance only for throughput runs; eval-only runs retain real target verification.
  • Give DSV4 Dynamo-SGLang AgentX jobs an eight-hour Slurm allocation and pass the configured benchmark account to image-validation steps.

Validation

  • Generated the expected aggregate TP8 c1/c4 and TP4 c8 entries plus the existing five disaggregated entries, all on the new SGLang/Dynamo versions.
  • uv run python -m pytest utils/matrix_logic/ -q (231 passed)
  • srtctl dry-run passed for all seven affected aggregate/disaggregated recipes.
  • Verified throughput synthetic-acceptance injection and the eval-only no-op path.
  • Verified runners/launch_gb300-nv.sh renders account benchmark, partition batch_1, and an eight-hour DSV4 SGLang AgentX allocation.

中文说明

  • 将完整的 GB300 DeepSeek-V4-Pro Dynamo-SGLang AgentX 配置族更新到 SGLang nightly-dev-cu13-20260811-d59c1ddf 和 Dynamo 1.4.0 正式版 wheel/router。
  • 使用调优后的 TP4 并发 8 低延迟配置替换原 TP4 HiCache 聚合扫描。
  • 新增 TP8 并发 1 和并发 4 的聚合配置。
  • 按各配置的目标请求上限覆盖解码 CUDA Graph;模拟 MTP 验收率仅用于吞吐测试,评估任务继续执行真实目标模型校验。
  • 将 DSV4 Dynamo-SGLang AgentX 的 Slurm 作业时限设为 8 小时,并让镜像验证步骤使用已配置的 benchmark 账户。

本地验证

  • 矩阵生成预期的 TP8 c1/c4、TP4 c8 聚合点和原有 5 个分离式配置点,且全部使用新 SGLang/Dynamo 版本。
  • uv run python -m pytest utils/matrix_logic/ -q(231 项通过)
  • 受影响的 7 个聚合/分离式 recipe 均通过 srtctl dry-run
  • 已验证吞吐测试的模拟验收率注入,以及评估模式下不注入的路径。
  • 已验证 runners/launch_gb300-nv.sh 生成的配置使用 benchmark 账户、batch_1 分区,以及 DSV4 SGLang AgentX 的八小时作业时限。

Related Issue / 相关问题

N/A / 不适用

Type of Change / 变更类型

  • Bug fix / 缺陷修复
  • New feature / 新功能
  • Configuration change / 配置变更
  • Documentation update / 文档更新
  • Other / 其他

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. / 对于每项可能影响基准性能的变更以及每项 recipe 新增或修改,我已在 perf-changelog.yaml 的物理末尾追加新条目,且未修改历史条目。
  • Before merging via reuse, an authorized maintainer has commented /reuse-sweep-run on this PR after a final full sweep is green with evals passing. / 在通过复用方式合并前,授权维护者将在最终完整扫描和评估全部通过后评论 /reuse-sweep-run

Add TP8 concurrency 1/4 and TP4 concurrency 8 aggregate profiles with phase-specific decode CUDA graph limits and throughput-only synthetic acceptance.

中文:优化 SGLang AgentX 低并发吞吐,新增 TP8 并发 1/4 和 TP4 并发 8 的聚合配置,并使用解码阶段 CUDA Graph 上限及仅吞吐测试启用的模拟验收率。
@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 关于重新运行失败任务的文档

Append the AgentX aggregate configuration to the performance changelog for PR #2644.

中文:在性能变更记录末尾登记 PR #2644 的 SGLang AgentX 聚合低并发配置。
Use SGLang nightly-dev-cu13-20260811-d59c1ddf and the Dynamo 1.4.0 release across the GB300 aggregate and disaggregated recipe family.

中文:将 GB300 聚合与分离式配置族统一更新到 SGLang nightly-dev-cu13-20260811-d59c1ddf 和 Dynamo 1.4.0 正式版。
@weireweire
weireweire marked this pull request as ready for review August 18, 2026 06:58
@weireweire
weireweire requested a review from a team August 18, 2026 06:58
Comment thread perf-changelog.yaml
Comment on lines +6053 to +6062

- config-keys:
- dsv4-fp4-gb300-dynamo-sglang-agentic-agg
scenario-type:
- agentic-coding
description:
- "Tune the GB300 SGLang AgentX aggregate low-concurrency frontier with TP8 concurrency 1/4 and TP4 concurrency 8 profiles."
- "Update the aggregate and disaggregated configurations to SGLang nightly-dev-cu13-20260811-d59c1ddf and the Dynamo 1.4.0 release."
- "Use phase-specific decode CUDA graph limits and throughput-only synthetic MTP acceptance; eval-only runs retain real target verification."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2644

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 changelog entry (perf-changelog.yaml:6053-6062) only lists config-keys: [dsv4-fp4-gb300-dynamo-sglang-agentic-agg], but this same PR also bumps the image (to nightly-dev-cu13-20260811-d59c1ddf) and router (to 1.4.0) for dsv4-fp4-gb300-dynamo-sglang-agentic-disagg in configs/nvidia-master.yaml, plus the Dynamo wheel to 1.4.0 in all 5 disagg recipe YAMLs. Since run-sweep.yml/process_changelog.py only schedules a master-config change for keys listed in the changelog entry, these disagg version bumps will merge without being validated by this PR's sweep. Please add dsv4-fp4-gb300-dynamo-sglang-agentic-disagg to config-keys.

Extended reasoning...

What the bug is: The tail changelog entry this PR appends (perf-changelog.yaml:6053-6062) declares only one config key:

- config-keys:
    - dsv4-fp4-gb300-dynamo-sglang-agentic-agg
  scenario-type:
    - agentic-coding
  description:
    - "Tune the GB300 SGLang AgentX aggregate low-concurrency frontier with TP8 concurrency 1/4 and TP4 concurrency 8 profiles."
    - "Update the aggregate and disaggregated configurations to SGLang nightly-dev-cu13-20260811-d59c1ddf and the Dynamo 1.4.0 release."
    - ...

Note the description's own second line explicitly claims both the aggregate and disaggregated configs are being updated — but the config-keys list only selects the agg key.

The code path that triggers it: Per docs/architecture.md (Stage 1, 'configuration and trigger selection'): 'A master entry is inert until selected. On the main sweep path, additions to perf-changelog.yaml select exact config keys or key patterns... Editing a master entry without a matching changelog addition does not schedule that change through run-sweep.yml, whose path trigger watches perf-changelog.yaml.' utils/process_changelog.py's get_config_keys_from_master() only expands the config-keys listed in the added changelog lines, and the matrix generator is subsequently invoked with only those expanded keys. There is no separate mechanism that detects 'this master entry byte-diffed, so schedule it regardless of changelog selection.'

Why nothing else prevents it: validate_append_only_scope (the guard that would reject a master edit outside the entry's declared append-only scope) only fires when an entry is marked append-only: true. Neither this new entry nor the historical entries touching these keys carry that flag, so nothing rejects — or even flags — an unselected master-file edit. It silently passes review and CI.

Concrete proof this actually happens in the diff:\n1. configs/nvidia-master.yaml diff shows dsv4-fp4-gb300-dynamo-sglang-agentic-disagg changes image: lmsysorg/sglang:nightly-dev-cu13-20260719-99f5a6f4nightly-dev-cu13-20260811-d59c1ddf and router: { ..., version: "1.3.0.dev20260718" }{ ..., version: "1.4.0" }.\n2. All five disagg-gb300-*-mtp-kvoffload.yaml recipe files bump dynamo.wheel from "1.3.0.dev20260718" to "1.4.0".\n3. The new changelog entry's config-keys is only [dsv4-fp4-gb300-dynamo-sglang-agentic-agg].\n4. When run-sweep.yml fires off this changelog diff, process_changelog.py expands only the agg key into sweep points; the disagg key is never passed to generate_sweeps, so no disagg job runs and the new image + Dynamo 1.4.0 combination for the disagg family reaches main completely unvalidated by this PR.

Impact: The disaggregated recipe family (the most complex, highest-node-count topology here — up to 12P4D across 16 nodes) is left running an SGLang nightly image and Dynamo release it has never actually been benchmarked or eval'd against by this PR's own gate — exactly the class of regression the changelog-trigger split exists to catch.

Fix: Add dsv4-fp4-gb300-dynamo-sglang-agentic-disagg to the new entry's config-keys list so run-sweep.yml schedules and validates both the agg and disagg sweeps this PR actually touches.

Comment thread perf-changelog.yaml
Comment on lines 4885 to 4891
- config-keys:
- dsv4-fp4-gb300-dynamo-sglang-agentic-agg
- dsv4-fp4-gb300-dynamo-sglang-agentic-disagg
- dsv4-fp4-gb300-dynamo-sglang-agentic-disagg
description:
- "Add GB300 DeepSeek-V4 dynamo-sglang agentic recipes (agg-tp4 + dep8 disagg pareto)"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2157

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.

🔴 This PR's changelog diff accidentally duplicates the dsv4-fp4-gb300-dynamo-sglang-agentic-disagg line inside the pre-existing PR #2157 entry (perf-changelog.yaml ~4885-4891), turning its config-keys into [agg, disagg, disagg]. Historical entries must stay byte-for-byte immutable except for pr-link fixes, so this will break the changelog validation gate — please drop the duplicate line and leave the #2157 entry untouched.

Extended reasoning...

The diff for perf-changelog.yaml adds a stray + - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg line inside the pre-existing PR #2157 changelog entry, rather than only appending a brand-new entry at the end of the file. Before this PR, that entry's config-keys list was [dsv4-fp4-gb300-dynamo-sglang-agentic-agg, dsv4-fp4-gb300-dynamo-sglang-agentic-disagg]; after this PR it becomes [agg, disagg, disagg] — an accidental duplicate, almost certainly a copy/paste slip while adding the new tail entry for this PR (#2644). The entry's own description text ("agg-tp4 + dep8 disagg pareto") only ever described two config keys, confirming the third is unintentional.

This matters because perf-changelog.yaml historical entries are contractually immutable in this repo — only pr-link corrections are allowed. utils/validate_perf_changelog.py's compare_entries() diffs each historical entry against its base-branch counterpart via without_pr_link(); since config-keys differs here (not just pr-link), it raises \"entry N changed; existing entries are immutable except for pr-link-only corrections\". Separately, validate_raw_change() requires head_raw.startswith(base_raw) whenever new entries are appended (which they are, at EOF for PR #2644) — because the byte stream is now mutated mid-file rather than purely appended-to, that prefix check fails too, raising \"appended entries changed historical perf-changelog.yaml bytes; restore the base file byte-for-byte and append at the end\".

It's also worth noting this doesn't get filtered out by YAML parsing quirks: config-keys is a YAML sequence, not a mapping, so the UniqueKeyLoader used elsewhere in the validation pipeline (which only rejects duplicate mapping keys) does not catch or dedupe it — the duplicate list item survives untouched into the immutability comparison. Additionally, one verifier traced the PR-time check-changelog CI path specifically (validate_perf_changelog.py main() → validate_generated_configprocess_changelog.py), which collects only the added + lines and feeds them to yaml.safe_load(). Because the orphaned mid-entry - dsv4-...-disagg fragment (indented 4 spaces) precedes the new top-level - config-keys: entry in that concatenated added-lines blob, the YAML parse itself fails with a ParserError (expected <document start>, but found <block sequence start>), independently breaking the same CI gate before it even reaches the immutability check.

Proof, step by step:

  1. Base (main) perf-changelog.yaml entry for PR Add GB300 DeepSeek-V4 Dynamo-SGLang AgentX aggregated and disaggregated recipes / 新增 GB300 DeepSeek-V4 Dynamo-SGLang AgentX 聚合式与分离式配方 #2157 has config-keys: [dsv4-fp4-gb300-dynamo-sglang-agentic-agg, dsv4-fp4-gb300-dynamo-sglang-agentic-disagg].
  2. This PR's diff inserts + - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg as a third list item under that same entry (confirmed at perf-changelog.yaml lines ~4885-4891 in the current tree).
  3. compare_entries() parses both base and head versions of that entry; without_pr_link(base) != without_pr_link(head) because config-keys now has 3 items vs. 2 — it raises the immutability error.
  4. Independently, validate_raw_change() checks that all bytes preceding the newly appended tail entries are unchanged (head_raw.startswith(base_raw)); since a line was inserted mid-file, this is false, raising a second, distinct error.
  5. Either failure alone is sufficient to fail the check-changelog CI job and block the PR from merging.

The fix is a one-line deletion: remove the erroneously duplicated - dsv4-fp4-gb300-dynamo-sglang-agentic-disagg line so the #2157 entry's config-keys reverts to its original two-item list, leaving that historical entry byte-for-byte identical to main (the new tail entry for PR #2644, appended at EOF, is unaffected and should remain).

Keep the historical PR #2157 entry unchanged and select both aggregate and disaggregated keys in the PR #2644 entry.

中文:恢复性能变更记录的仅追加约束,保持历史 PR #2157 条目不变,并在 PR #2644 条目中同时选择聚合与分离式配置。
中文:合并 main 并解决性能变更记录冲突。
完善 GB300 SGLang AgentX 配置:同步配方镜像与身份信息,将模拟验收率限定到吞吐任务,并统一 Slurm 账户与作业时限。
合并最新 main,并保留其完整变更日志后将本 PR 条目追加到文件末尾。
@github-actions

Copy link
Copy Markdown
Contributor

@RohitNagraj RohitNagraj changed the title Optimize SGLang AgentX low-concurrency throughput / 优化 SGLang AgentX 低并发吞吐 Update DeepSeek-V4-Pro (DSV4) FP4 GB300 Dynamo-SGLang AgentX MTP configs / 更新 DeepSeek-V4-Pro(DSV4)FP4 GB300 Dynamo-SGLang AgentX MTP 配置 Aug 18, 2026
RohitNagraj and others added 2 commits August 18, 2026 12:10
更新 GB300 电源通道契约测试,使其验证显式的 Slurm 账户和分区参数。
@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.

4 participants