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

Merged
cquil11 merged 16 commits into
mainfrom
perf/dsv4-gb300-sglang-low-concurrency
Aug 25, 2026
Merged

Update DeepSeek-V4-Pro (DSV4) FP4 GB300 Dynamo-SGLang AgentX MTP configs / 更新 DeepSeek-V4-Pro(DSV4)FP4 GB300 Dynamo-SGLang AgentX MTP 配置#2644
cquil11 merged 16 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-20260821-f825d729 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.
  • Reduce the concurrency-1536 disaggregated topology from six to five DEP8 prefill workers while retaining one DEP16 decode worker; the recipe moves from 12P4D to 10P4D.
  • 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.
  • Use the standard AgentX warmup state for the aggregate low-latency profiles.

Validation

  • Generated all eight expected matrix points on the new SGLang/Dynamo versions; concurrency 1536 resolves to five prefill workers and the 10P4D recipe.
  • python3 -m pytest utils/matrix_logic/ -q (232 passed)
  • srtctl dry-run passed for all seven affected aggregate/disaggregated recipes.
  • utils/validate_perf_changelog.py passed against the latest main.
  • Verified the SGLang image publishes active Linux arm64 and amd64 manifests.

中文说明

  • 将完整的 GB300 DeepSeek-V4-Pro Dynamo-SGLang AgentX 配置族更新到 SGLang nightly-dev-cu13-20260821-f825d729 和 Dynamo 1.4.0 正式版 wheel/router。
  • 使用调优后的 TP4 并发 8 低延迟配置替换原 TP4 HiCache 聚合扫描。
  • 新增 TP8 并发 1 和并发 4 的聚合配置。
  • 将并发 1536 的分离式拓扑从 6 个 DEP8 预填充 worker 调整为 5 个,同时保留 1 个 DEP16 解码 worker;recipe 从 12P4D 改为 10P4D。
  • 按各配置的目标请求上限覆盖解码 CUDA Graph;模拟 MTP 验收率仅用于吞吐测试,评估任务继续执行真实目标模型校验。
  • 聚合低延迟配置使用标准 AgentX 预热状态。

本地验证

  • 在新 SGLang/Dynamo 版本上生成全部 8 个预期矩阵点;并发 1536 正确解析为 5 个预填充 worker 和 10P4D recipe。
  • python3 -m pytest utils/matrix_logic/ -q(232 项通过)
  • 受影响的 7 个聚合/分离式 recipe 均通过 srtctl dry-run
  • utils/validate_perf_changelog.py 基于最新 main 验证通过。
  • 已确认 SGLang 镜像提供有效的 Linux arm64amd64 manifest。

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

Note

Medium Risk
Changes published benchmark topology, software pins, and throughput measurement (synthetic MTP acceptance), which directly affects reported AgentX performance and cluster job accounting—not production app code.

Overview
Retunes the GB300 DeepSeek-V4-Pro Dynamo-SGLang AgentX benchmark matrix to SGLang nightly-dev-cu13-20260821-f825d729 and Dynamo 1.4.0, with recipe identity blocks pinning those versions.

Aggregate path: removes the TP4 HiCache/offload recipe (agg-gb300-tp4-mtp-kvoffload) and replaces the old wide concurrency sweep with low-latency profiles—TP8 at conc 1/4 and TP4 at conc 8—using tighter decode CUDA graphs (cuda-graph-max-bs-decode), no hierarchical KV offload, and simpler infra (no dedicated etcd/NATS node, single frontend).

Disaggregated path: all Pareto recipes pick up the same image/Dynamo bump; decode drops in-container SGLANG_SIMULATE_ACC_* in favor of matrix SYNTHETIC_ACCEPTANCE (throughput runs). The c1536 point shrinks from 12P→10P (5 prefill workers, recipe rename to disagg-gb300-10p4d-...).

Runner/CI: launch_gb300-nv.sh applies an 8h default Slurm limit for DSV4 agentic dynamo-sglang (not only TRT) and passes --account on image squash validation srun calls; perf-changelog.yaml documents the performance intent.

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

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

@github-actions

Copy link
Copy Markdown
Contributor

4 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

…pe / 让 DSV4 GB300 聚合配置与其他配置采用相同预热

agg-gb300-tp4-mtp-lowlatency and agg-gb300-tp8-mtp-lowlatency were the only
recipes in srt-slurm-recipes/ setting AIPERF_WARMUP_REQUESTS_PER_LANE, and
they set it to 1. That is the value fast mode uses to minimise setup
(benchmark_lib.sh:1979-1982), but without fast mode's matching cut to the
profiling duration, so the full measurement window ran off a barely-primed
live state.

The override arrived in 80eb81a, whose message covers CUDA graph limits
and synthetic acceptance but never mentions warmup, and the kvoffload recipe
these two replace did not set it. The five disagg recipes in this PR do not
set it either, so the aggregate and disaggregated arms of the same model and
SKU were being warmed differently and published on the same chart.

Drop the override so both fall back to the standard ten requests per lane.

Requires a fresh sweep for the two aggregate profiles: warmup depth changes
the live state the profiling window starts from.
Root cause: The PR still pinned the August 11 SGLang nightly, and the concurrency-1536 disaggregated point retained six DEP8 prefill workers after the validated topology moved to five.

Fix: Pin all GB300 DSV4 SGLang AgentX recipes and master entries to nightly-dev-cu13-20260821-f825d729. Rename the c1536 recipe from 12P4D to 10P4D and reduce its prefill nodes/workers from 12/6 to 10/5 while retaining one DEP16 decode worker.

Validation: Verified the multi-arch Docker tag, generated all eight matrix points with c1536 selecting five prefill workers, passed 231 matrix tests, and passed srtctl dry-run for all seven recipes.

中文:将全部 GB300 DSV4 SGLang AgentX 配置升级到 nightly-dev-cu13-20260821-f825d729,并将并发 1536 的分离式拓扑从 6 个 DEP8 预填充 worker 调整为 5 个;对应 recipe 从 12P4D 改为 10P4D。已验证镜像架构、矩阵生成、231 项单测及 7 个 recipe 的 dry-run。
Resolve the append-only performance changelog by preserving the latest main history and appending the PR #2644 entry at the tail.

中文:将最新 origin/main 合入 SGLang 低并发调优分支,保留 main 的性能变更历史,并将 PR #2644 条目重新追加到文件末尾。
Keep model.container on the dynamo-sglang logical alias so the runner resolves it through the master image and generated squash mapping. Preserve the exact nightly tag only in identity metadata.

让 model.container 保持 dynamo-sglang 逻辑别名,由 runner 通过 master image 和生成的 squash 映射解析。实际 nightly tag 仅保留在 identity 元数据中。
@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@kedarpotdar-nv kedarpotdar-nv 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:

  • 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. Full sweep workflow
  • Verified that this PR passes evals. Full sweep and eval workflow
  • 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:

  • Reviewed exact PR head 81c6e3590cba307e3bfe18a995df2a94f1189c2a; all eight multi-node AgentX throughput points and all five configured eval jobs passed in the linked workflow.
  • The recipes use three speculative MTP tokens with throughput-only synthetic acceptance fixed to the committed DeepSeek-V4-Pro thinking_on golden AL of 2.49. Eval-only jobs retain real target-model verification.
  • This submission uses the upstream lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729 image and does not modify the model architecture.
  • These are multi-node Dynamo–SGLang recipes, so the single-node recipe-publication requirement is not applicable. This PR does not use append-only: true.
  • No inference-engine or serving-stack patch is introduced.

Signed: kedarpotdar-nv

@RohitNagraj

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 32462813609

合并 main,并解决 GB300 启动脚本和性能变更日志冲突。
SGLANG_OPT_USE_ONLINE_COMPRESS: "0"
SGLANG_OPT_USE_JIT_INDEXER_METADATA: "1"
SGLANG_OPT_USE_JIT_NORM: "1"
SGLANG_OPT_USE_TOPK_V2: "True"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

TP8 aggregate missing multi-node NCCL

High Severity

The new TP8 low-latency aggregate recipe places one tp-size: 8 worker across agg_nodes: 2, but aggregated_environment omits the GB300 multi-node interconnect settings used by sibling SGLang recipes (NCCL_MNNVL_ENABLE, NCCL_CUMEM_ENABLE, SGLANG_DISABLE_TP_MEMORY_INBALANCE_CHECK). Cross-node tensor parallel init can fail or hang, so the concurrency 1/4 aggregate matrix points may never serve traffic.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c36d371. Configure here.

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — kedarpotdar-nv is a listed owner of configs/nvidia-master.yaml; all other changed paths carry only the catch-all.
✅ Check 1 (Passing sweep on in-PR commit): PASS — run 32462813609 on in-PR commit 81c6e35 has all 8 multi-node agentic / and all 5 multi-node agentic eval / check-runs executed with success (tip c36d371 is a merge-of-main sync commit).
✅ Check 2 (Evals pass): PASS — gsm8k em_strict 0.9644–0.9689 across all 5 eval points, above the dsv4 bar of 0.91, on the same lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729 image as this PR's config.
➖ Check 3 (Recipe link): N/A — disaggregated/multi-node submission (benchmarks/multi_node/**, multinode: true); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (Reuse command): PASS — /reuse-sweep-run 32462813609 posted by @RohitNagraj (COLLABORATOR).
✅ Check 5 (Latest checklist): PASS — every item in the current docs/PR_REVIEW_CHECKLIST.md template is present and checked.
✅ Check 6 (Upstream image / engine-first): PASS — upstream lmsysorg/sglang:nightly-dev-cu13-20260821-f825d729 on GB300; no new non-vLLM/SGLang framework entry is added (existing dynamo-sglang entries modified, SGLang engine image upstream).
✅ Check 7 (Deprecated models): PASS — DSV4 agentic-coding MTP is the active go-forward arm per MODELS.md as of 2026-08-22.
✅ Check 8 (No architecture hacks): PASS — no --hf-overrides or FLOPs-reducing knobs; only engine tuning flags and SGLang's native simulated-acceptance envs.
✅ Check 9 (Chat template): PASS — AgentX replay drives /v1/chat/completions with --endpoint-type chat (benchmarks/benchmark_lib.sh).
✅ Check 10 (No engine patches): PASS — no patching; the Dynamo 1.4.0 wheel is the declared framework/router install, and acceptance simulation rewrites only recipe YAML env vars, not engine sources.
✅ Check 11 (Golden AL): PASS — throughput points pin SYNTHETIC_ACCEPTANCE_LENGTH=2.49, injected as SGLANG_SIMULATE_ACC_LEN (match-expected, real-draft-token) via runners/inject_synthetic_acceptance.py; 2.49 equals the committed golden AL for deepseek-v4-pro thinking_on at 3 speculative tokens (golden_al_distribution/dsv4_mtp.yaml); eval-only jobs keep real verification per the repo's own EVAL_ONLY mechanism.
➖ Check 12 (Append-only): N/A — the new perf-changelog.yaml entry does not use append-only: true.

@cquil11

cquil11 commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

/stage-results 32462813609

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

@cquil11 staged run 32462813609: https://inferencemax-app-git-staging-semianalysisai.vercel.app/inference?i_dates=2026-08-21~r32462813609

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

@cquil11
cquil11 merged commit ca4d1d0 into main Aug 25, 2026
7 of 8 checks passed
@cquil11
cquil11 deleted the perf/dsv4-gb300-sglang-low-concurrency branch August 25, 2026 21:16

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

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

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

Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6219021. Configure here.

RESULT_DIR: "/logs/agentic"
PORT: "8000"
IS_MULTINODE: "false"
TP: "8"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

TP8 aggregate forces single-node path

Medium Severity

The new TP8 low-latency recipe spans two GB300 nodes (agg_nodes: 2) but sets IS_MULTINODE to false. That routes AgentX result aggregation and power collection through the single-node path, so published results omit multinode topology fields and skip the multinode measurement-window power path. The matching vLLM GB300 TP8 aggregate recipe keeps IS_MULTINODE true so decode worker count 0 is handled correctly.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6219021. Configure here.

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.

7 participants