Skip to content

Tune B200 DSV4 SGLang AgentX prefill scheduling / 调整 B200 DSV4 SGLang AgentX 预填充调度 - #2718

Merged
cquil11 merged 14 commits into
mainfrom
dsv4-fp4-b200-sglang-agentic-prefill-scheduling
Aug 28, 2026
Merged

Tune B200 DSV4 SGLang AgentX prefill scheduling / 调整 B200 DSV4 SGLang AgentX 预填充调度#2718
cquil11 merged 14 commits into
mainfrom
dsv4-fp4-b200-sglang-agentic-prefill-scheduling

Conversation

@nvpohanh

@nvpohanh nvpohanh commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

[by Codex]

Refresh the B200 DeepSeek V4 SGLang AgentX submission with validated high-concurrency HiCache profiles:

  • Scope cache-aware routing and --prefill-decode-interval to DEP8 profiles only; use interval 24 for concurrency 64, 96, and 128.
  • At concurrency 128, use global --chunked-prefill-size 49152, --cuda-graph-max-bs 32, and --load-balance-method total_requests.
  • At concurrency 160, use the same memory, chunk, graph, and DP-balancing profile with interval 20 and cache-aware absolute balance threshold 32.
  • Use --mem-fraction-static 0.90 across every TP and DP profile. The official c128 sweep showed that 0.91 left insufficient transient workspace for the FP4 indexer.
  • Keep the existing TP8/DP8/EP8, MegaMoE, FP4 indexer, MTP, and HiCache ratio 8 foundation.

Full-hour validation reached 34.587 tok/s/user and 43,382.65 tok/s/GPU at concurrency 128, and 28.916 tok/s/user and 50,468.23 tok/s/GPU at concurrency 160. No SGLang or AIPerf source changes are required.

使用经过验证的高并发 HiCache 配置刷新 B200 DeepSeek V4 SGLang AgentX 提交:

  • 仅在 DEP8 配置中使用缓存感知路由和 --prefill-decode-interval;并发 64、96 和 128 使用 interval 24。
  • 并发 128 使用全局 --chunked-prefill-size 49152--cuda-graph-max-bs 32--load-balance-method total_requests
  • 并发 160 使用相同的显存、分块、CUDA Graph 和 DP 负载均衡配置,同时使用 interval 20 和缓存感知绝对均衡阈值 32。
  • 所有 TP 和 DP 配置统一使用 --mem-fraction-static 0.90。官方 c128 sweep 表明,0.91 无法为 FP4 indexer 保留足够的瞬时工作区。
  • 保留现有 TP8/DP8/EP8、MegaMoE、FP4 indexer、MTP 和 HiCache ratio 8 基础配置。

完整一小时验证中,并发 128 达到 34.587 tok/s/user 和 43,382.65 tok/s/GPU,并发 160 达到 28.916 tok/s/user 和 50,468.23 tok/s/GPU。不需要修改 SGLang 或 AIPerf 源代码。


Note

Low Risk
Benchmark and YAML sweep changes only; no application runtime or security-sensitive logic.

Overview
Refreshes the B200 DeepSeek V4 SGLang AgentX + HiCache + MTP recipe and master config after validated high-concurrency runs on NScale.

The launch script now sizes HiCache by topology: host/device ratio 2.75 for replicated TP8 (fits ~121 GiB/rank on 1.7 TiB hosts) and 8 for sharded DP8, with float-safe ratio cap checks. DP-attention (DEP8) paths drop --enable-prefill-delayer, use --prefill-decode-interval 24 (20 at concurrency 160), mem-fraction-static 0.88 (0.90 for non-DP), a 6144 tokens/rank chunked-prefill budget, CUDA graph max batch 32, total_requests DP load balancing, one-second load snapshots, and correlation-ID session routing. The SGLang router switches to cache_aware policy with an optional balance threshold at conc 160. Weight load adds multithreaded model-loader config.

nvidia-master bumps the SGLang image to nightly-dev-20260827-20621aa1, trims TP HiCache concurrency points, and extends the DP HiCache sweep to 64–160 with the sglang-router. perf-changelog.yaml documents the curve refresh.

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

@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 关于重新运行失败任务的文档

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

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 206cb37. Configure here.

Comment thread perf-changelog.yaml Outdated
@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@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

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@nvpohanh
nvpohanh force-pushed the dsv4-fp4-b200-sglang-agentic-prefill-scheduling branch from f8cdaf4 to 2151f50 Compare August 27, 2026 15:24
@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@nvpohanh
nvpohanh force-pushed the dsv4-fp4-b200-sglang-agentic-prefill-scheduling branch from 2151f50 to 24918be Compare August 28, 2026 02:03
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

调整 B200 DSV4 AgentX 预填充调度。
更新性能变更日志中的 PR 链接。
修正性能变更日志中的 PR 链接回填。
更新 B200 DSV4 AgentX 高并发性能曲线配置。
简化 B200 DSV4 AgentX 启动参数分支。
统一使用 0.90 的静态显存比例,为 B200 FP4 indexer 保留瞬时工作区。
将 c96 纳入较小的分块预填充预算和紧凑 CUDA Graph 配置,以避免 FP4 索引器工作区内存不足。
将 TP8 HiCache 比例降至 2.75,同时保留 DEP8 比例 8,避免 NScale 1.7 TiB 主机内存上的 V4 分页池初始化失败。\n\n改用支持小数的比例上限检查,并在性能变更日志中记录实测的主机内存限制。
将 B200 SGLang 并发 160 的 mem-fraction-static 从 0.90 降至 0.88,为 DeepSeek V4 FP4 indexer 的上下文相关工作区释放约 3.57 GiB HBM。\n\n保留其他并发点和 HiCache 比例不变,并更新现有性能变更日志说明。
将所有 B200 DP-attention 配置统一为每 rank 6144 token 的 chunked prefill 和 CUDA graph 最大 batch 32。\n\n移除并发 96/128/160 的重复条件分支,并同步更新现有性能变更日志。
在全部 B200 DEP8 并发点统一启用 total_requests、每秒负载快照和基于 correlation ID 的会话路由,并保留并发 160 的专用显存余量设置。
将 B200 DSV4 SGLang AgentX 配置更新到 nightly-dev-20260827-20621aa1,并同步记录性能变更日志。
将 B200 DSV4 SGLang AgentX 镜像回退到 nightly-dev-20260821-f825d729,以验证 c128 OOM 是否由较新的 nightly 引入。
将所有 B200 DSV4 DP-attention 配置的 mem-fraction-static 统一降至 0.88,并恢复 nightly-dev-20260827-20621aa1,以为 FP4 indexer 的动态工作区预留显存。
@nvpohanh
nvpohanh force-pushed the dsv4-fp4-b200-sglang-agentic-prefill-scheduling branch from 76398d3 to 30f2fb4 Compare August 28, 2026 08:10
@github-actions

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 33154296172

@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. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/33154296172
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/33154296172
  • 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; the other changed files fall under the catch-all, covered by a recognized CODEOWNER.
✅ Check 1 (sweep on in-PR commit): PASS — head commit 30f2fb4 carries executed, green per-config benchmark (agentic / c1–c5, c8/10/16 HiCache, DP c64/96/128/160) and agentic eval / check-runs from run 33154296172; the single-node *//eval / lanes are skipped only because this PR selects agentic configs exclusively.
✅ Check 2 (evals pass): PASS — downloaded eval artifact shows gsm8k em_strict 0.958 (n_eff 1319) for dsv4 fp4 sglang MTP at c160 on B200, run on this PR's image lmsysorg/sglang:nightly-dev-20260827-20621aa1.
✅ Check 3 (recipe): PASS — sign-off links the published SGLang cookbook DeepSeek-V4 page, which documents TP8, --dp 8 --enable-dp-attention, MTP via --speculative-algorithm EAGLE --speculative-num-steps 3 --speculative-eagle-topk 1 --speculative-num-draft-tokens 4 (exactly this PR's flags), MegaMoE a2a, flashinfer_mxfp4, --enable-deepseek-v4-fp4-indexer, and HiCache --hicache-ratio. Informational: prefill-delayer/--prefill-decode-interval, chunked-prefill size, mem-fraction, and router-policy settings are harness/sweep tuning, not deployment-defining args.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 33154296172 posted by Ankur-singh (COLLABORATOR).
✅ Check 5 (latest checklist): PASS — sign-off contains every item of the current docs/PR_REVIEW_CHECKLIST.md template, all checked.
✅ Check 6 (upstream image / ordering): PASS — lmsysorg/sglang:nightly-dev-20260827-20621aa1 is the upstream SGLang Docker Hub org; framework is SGLang, so engine-first ordering doesn't apply.
✅ Check 7 (deprecations): PASS — dsv4 agentic coding MTP is the active, published arm per MODELS.md (only single-turn 8k1k is scheduled for deprecation, not touched here).
✅ Check 8 (no architecture hacks): PASS — no --hf-overrides/model-override args; changes are memory/scheduling/routing tuning plus multithreaded weight load.
✅ Check 9 (spec-decode chat template): PASS — MTP config serves via --chat-template deepseek_v4_thinking.jinja with chat-style agentic replay.
✅ Check 11 (golden AL): PASS — benchmark pins SGLANG_SIMULATE_ACC_LEN=2.49 (match-expected, real-draft-token), equal to golden_al_distribution/dsv4_mtp.yaml thinking_on at 3 speculative tokens; evals run with real acceptance; simulation appears only on this agentic config.
✅ Check 10 (no engine patches): PASS — no patches/heredocs/site-packages edits; the venv installs client-side harness deps only and the server runs the image's own interpreter.
➖ Check 12 (append-only): N/A — no new perf-changelog.yaml entry sets append-only: true.

@cquil11
cquil11 merged commit 502c828 into main Aug 28, 2026
42 checks passed
@cquil11
cquil11 deleted the dsv4-fp4-b200-sglang-agentic-prefill-scheduling branch August 28, 2026 20:58
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.

4 participants