Skip to content

[AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,精简为 7 个点(DEP2、TP4 EP1) - #3859

Merged
Ankur-singh merged 12 commits into
mainfrom
weireweire/dsv41flash-gb300-sgl-1008
Oct 13, 2026
Merged

Ankur-singh merged 12 commits into
mainfrom
weireweire/dsv41flash-gb300-sgl-1008

Conversation

@weireweire

@weireweire weireweire commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Config: dsv41flash-fp4-gb300-sglang-agentic-dspark (aggregated, single node). Recipe, master config and changelog only.

  1. Image bump to lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935, pinned by digest. This nightly:
  2. Seven points instead of sixteen: TP4 c1/c4/c16, TP2 c16/c32 and DEP2 c64/c128. The dropped points (TP2 c1/c2/c4/c8, TP4 c2/c8/c32/c64/c128) are dominated on the tok/s/GPU vs P90 tok/s/user Pareto by the ones kept.
  3. TP4 c1: 16K prefill chunks with no prefill-decode interval, instead of 4K chunks with a 16-step interval.
  4. TP4 c4/c16 run EP1 instead of EP4. At batch 1–5, EP4 makes every decode step wait for the rank holding the most-selected experts. c16 also gets a 192-step prefill-decode interval, 4 tokenizer workers and SGLANG_NUMA_BIND_V2=0: one prefill forward costs about 200 ms of host dispatch on Grace and stalls every running decode.
  5. TP2 c16/c32: 16K chunks with decoder SWA bounded replay and the prefill CUDA graph disabled, a 96/48-step prefill-decode interval, expandable_segments and 4 tokenizer workers. c16 also sets SGLANG_NUMA_BIND_V2=0.
  6. c64/c128 move from TP2 to DEP2:
    • TP2/DP2/EP2 with DP attention, DP LM head and MegaMoE, behind sglang-router (cache_aware, dp-aware, routing key from the AIPerf correlation id);
    • total_requests load balancing, shortest-prefill-first scheduling, 16K chunks and 4096 SWA tails;
    • a 24-step prefill-decode interval at c64 and a 16-step one at c128; c128 also uses mem-fraction-static 0.85 and admits 256.

Local results

One-hour AgentX runs on GB300 with the image in this PR, using the CI harness with synthetic acceptance 3.51. Throughput is in tok/s/GPU; interactivity is P90 (median) tok/s/user.

point throughput interactivity P90 TTFT
TP4 c1 7,314 625.7 (670.3) 1.38 s
TP4 c4 (EP1) 9,338 505.9 (668.7) 1.66 s
TP4 c16 (EP1) 28,838 424.9 (538.2) 2.68 s
TP2 c16 55,560 264.6 (324.9) 2.36 s
TP2 c32 113,613 183.1 (242.7) 3.13 s
DEP2 c64 200,265 114.3 (132.7) 2.90 s
DEP2 c128 271,364 81.6 (93.0) 4.35 s

The TP2 points that DEP2 replaces measured 149,666 at 99.4 median (c64) and 147,763 at 37.9 median with a 51 s P90 TTFT (c128) in #3782.

TP4 c4/c16 on EP1 come from a separate config-only GB300 tuning campaign (20261006 nightly: c4 9,460 at 502.0 P90, c16 28,771 at 376.8 P90; on the same image there, the c16 interval took P90 from 217 to 334 and EP1 added +4.7% at c16 and +6.3% at c4). The published sweep has 10,017 at 471.5 (c4) and 28,694 at 222.2 (c16). On the 20261012 image, TP4 c16 also dominates the dropped TP4 c8 (16,226 at 415.8), TP2 c4 (18,119 at 383.5) and TP2 c1/c2 (12,443 at 431.7, 12,689 at 392.6); TP4 c1 dominates TP4 c2 (7,363 at 569.7).

TP4 c1 chunking A/B (30 min, with fastokens 0.3.2 in both arms): 5,826 → 5,957 tok/s/GPU, P90 interactivity 561.6 → 566.4, P90 TTFT 1.38 → 0.46 s, subagent P90 TTFT 2.51 → 0.70 s.

Notes

AI model disclosure

  • Model/version: Claude Opus 5.5 (claude-opus-5-5)
  • Role: ran the local experiments, wrote the recipe, master-config and changelog changes, and drafted this description.

Related Issue

Follows #3782.

Type of Change

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

Checklist

  • I have completed the AI model disclosure and kept it current
  • 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 inferencex-e2e/perf-changelog.yaml and have not edited historical entries
  • If this PR can affect benchmark performance or adds or modifies a recipe, it carries exactly one primary sweep label (a maintainer applies it on fork PRs): full-sweep-fail-fast (recommended), full-sweep-enabled, or non-canary-full-sweep-enabled. Optional modifiers all-evals, evals-only, and agentx-fast require a primary label; the last two block reuse while applied.
  • Before merging via reuse, an authorized maintainer (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.
中文

配置:dsv41flash-fp4-gb300-sglang-agentic-dspark(聚合、单节点),只改配方、master 配置和 changelog。

  1. 镜像升级到 lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935,按 digest 固定。
  2. 点位由 16 个精简为 7 个:TP4 c1/c4/c16、TP2 c16/c32、DEP2 c64/c128。删掉的点在吞吐对交互性的 Pareto 上被保留的点压过。
  3. TP4 c1:16K chunk,不设 prefill-decode interval。
  4. TP4 c4/c16 改为 EP1:小 batch 下,EP4 每一步都要等负载最重的 rank。c16 另加 192 步 interval、4 个 tokenizer worker 和 SGLANG_NUMA_BIND_V2=0。
  5. TP2 c16/c32:
    • 16K chunk,开启 bounded replay;
    • interval 分别为 96/48;
    • 开启 expandable_segments,使用 4 个 tokenizer worker。
  6. c64/c128 改为 DEP2:
    • DP attention + MegaMoE,前端为 sglang-router;
    • shortest-prefill-first 调度;
    • c128 设 mem-fraction 0.85,最多接纳 256 个请求。

本地结果见上表:一小时运行,合成接受长度 3.51。TP4 c4/c16 的 EP1 配置来自另一组只改配置的 GB300 调优,20261012 镜像上复测:TP4 c4 9,338 @ 505.9,TP4 c16 28,838 @ 424.9(官方曲线为 222.2)。

说明:镜像内的 fastokens 为 0.1.x,未启用 fastokens 后端(sgl-project/sglang#43104 会支持 0.3.2)。

AI 模型使用说明:Claude Opus 5.5(claude-opus-5-5),负责本地实验、配方 / master 配置 / changelog 修改,并起草本说明。

….1 Flash SGLang

Bump the image to nightly-dev-cu13-20260929-79cafec0 and set
SGLANG_DSPARK_FOLDED_SAMPLING=2 on every point: the AUTO default keeps
DSpark draft sampling eager for DeepSeek-V4.1 TP shards, which left
low-concurrency decode launch-bound. Run TP4 c64 with 8K chunks and a
16-step prefill-decode interval, and let TP2 c128 admit all 128 sessions
with a 4-step interval and mem-fraction-static 0.85.

中文:将镜像升级到 nightly-dev-cu13-20260929-79cafec0,并在所有点上设置
SGLANG_DSPARK_FOLDED_SAMPLING=2:AUTO 默认值对 DeepSeek-V4.1 的 TP 分片
保持 DSpark draft 采样为 eager 执行,导致低并发 decode 受 kernel 发射限制。
TP4 c64 改为 8K prefill chunk 与 16 步 prefill-decode interval;TP2 c128
接纳全部 128 个会话,使用 4 步 interval 与 mem-fraction-static 0.85。
中文:将 GB300 DSV4.1 Flash SGLang 的 changelog 条目链接到 #3782。
Keep main's perf-changelog bytes and re-append this PR's entry at the tail.

中文:合并 origin/main;保留 main 的 perf-changelog 原有字节,并将本 PR 的条目重新追加到末尾。
…-gb300-sgl-1008

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
… 16K chunks at TP4 c1

Root cause: on the 20260929 nightly the Python radix-tree insert walk slices
the remaining key at every node, which delays the last prefill chunk on
200K-400K-token AgentX prompts. At TP4 c1, 4K chunks with a 16-step
prefill-decode interval split long cache-miss prefills into many steps and
made subagent requests wait behind them.

Fix: pin lmsysorg/sglang:nightly-dev-cu13-20261008-7760d526 by digest in the
recipe and the master config. The image makes the Rust radix-tree core the
default. TP4 c1 now runs 16K chunks with no prefill-decode interval.

Validation: local GB300 TP4 c1 30-minute AgentX runs, synthetic acceptance 3.51.
Image bump: 5,570 -> 5,577 tok/s/GPU, P90 interactivity 521.5 -> 562.5.
Chunking (new image, fastokens backend in both arms): 5,826 -> 5,957 tok/s/GPU,
P90 TTFT 1.38 -> 0.46 s. Other points were not rerun on the new image.
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

  • Review: If this PR changes files owned by someone other than a repository admin or @SemiAnalysisAI/core, ask one eligible CODEOWNER to complete the latest PR_REVIEW_CHECKLIST.md before contacting a core maintainer on Slack. Follow the template exactly, including As a PR reviewer and CODEOWNER, I have reviewed this and have, so sign-off verification triggers.
  • PR verification: Sweeps run only when the PR appends an inferencex-e2e/perf-changelog.yaml entry and carries exactly one primary label: full-sweep-fail-fast (strongly recommended; canary plus per-matrix fail-fast), full-sweep-enabled (canary; matrix jobs continue after a failure), or non-canary-full-sweep-enabled (no canary or fail-fast). The modifiers all-evals, evals-only, and agentx-fast require a primary label. On fork PRs, a maintainer applies the label. See sweep labels and reuse.
  • After merging: PR authors must ensure all GitHub Actions jobs pass. Transient failures often pass on rerun; see how to rerun failed jobs.
中文

感谢你的贡献!

  • **审阅:**如果 PR 修改的文件归属于仓库管理员及 @SemiAnalysisAI/core 之外的 CODEOWNER,请先联系一位有资格的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,再通过 Slack 联系核心维护者。必须严格遵循模板,并保留 As a PR reviewer and CODEOWNER, I have reviewed this and have,才能触发签核验证。
  • **PR 验证:**只有当 PR 在 inferencex-e2e/perf-changelog.yaml 末尾追加了条目,并且恰好带有一个主标签时,才会运行扫描:full-sweep-fail-fast(强烈推荐;canary 加逐矩阵 fail-fast)、full-sweep-enabled(有 canary;矩阵任务在失败后继续运行)或 non-canary-full-sweep-enabled(无 canary,也无 fail-fast)。修饰标签 all-evals、evals-only 和 agentx-fast 必须与主标签一起使用。fork PR 的标签由维护者添加。参见扫描标签与复用。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@claude claude Bot left a comment

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.

I reviewed this PR and didn't find any bugs. Because it bumps a production GB300 benchmark recipe (image digest, DSpark sampling fold, per-point chunked-prefill/interval retuning) and both changed files (nvidia-master.yaml and the gb300-*/ recipe tree) are covered by CODEOWNERS, a human look would still be worthwhile.

What was reviewed: confirmed the image digest bump is applied consistently in both agentic.yaml and nvidia-master.yaml; checked perf-changelog.yaml additions are strictly appended at the tail with no edits to prior entries; cross-checked the retuned tp2_c128/tp4_c1/tp4_c64 overrides against the updated header comment for consistency; and noted the PR's own disclosure that its two stacked changelog blocks (PR #3782 and #XXX) depend on merge order.

Extended reasoning...

The diff is a config-only change: an SGLang nightly image/digest bump, a new env var, and per-point prefill-chunking/interval retunes in a GB300 benchmark recipe, plus the matching master-config image entry and two appended perf-changelog blocks; it touches no auth, crypto, or data-handling code. Both changed non-changelog files fall under CODEOWNERS (nvidia-master.yaml and the gb300-* recipe path), which per the approval guidelines rules out approving regardless of correctness. The bug hunt reported zero findings; three candidate issues (two implausible/unverifiable changelog numbers in the PR #3782 block, and a known reuse-merge ordering conflict from carrying two changelog blocks) were investigated and are either out of this PR's reviewable scope (belong to the not-yet-merged #3782) or already disclosed by the author as an expected, self-resolving sequencing issue, so none rises to a flagged finding.

This review covers commit 4c1105a, which is no longer the latest commit on this pull request; later commits are not covered by it.

…8-c32, DEP2 c64/c128

Bump to nightly-dev-cu13-20261012-e6072935, which carries DP attention with
MegaMoE. TP2 c8/c16/c32 run 16K chunks with decoder SWA bounded replay and a
longer prefill-decode interval; c64 and c128 move to DEP2 behind sglang-router
with shortest-prefill-first scheduling.
@weireweire weireweire changed the title [AgentX] GB300 DSV4.1 Flash SGLang: 20261008 nightly, 16K chunks at TP4 c1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261008 nightly,TP4 c1 使用 16K chunk [AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, tuned TP2 c8-c32, DEP2 c64/c128 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,调优 TP2 c8-c32,c64/c128 改用 DEP2 Oct 12, 2026
…-gb300-sgl-1008

# Conflicts:
#	inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4-mtp/agentic.yaml
#	inferencex-e2e/configs/nvidia-master.yaml
#	inferencex-e2e/perf-changelog.yaml
@weireweire weireweire added the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Oct 12, 2026
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] The SGLang cookbook integration of this PR's AgentX config (dsv41flash-fp4-gb300-sglang-agentic-dspark) will happen in sgl-project/sglang#43799, in the Agentic Long-Context Deployment section of the DeepSeek-V4.1 cookbook page.

This PR has no authorized /use <run_id> comment yet, so the cookbook shows the recipe at this PR's head (e182134fd) as "in progress". It switches to the measured run at the next cookbook sync after a run is pinned or this PR merges.

… EP1 at c4/c16

Keep TP4 c1/c4/c16, TP2 c16/c32 and DEP2 c64/c128; the other points are
dominated. TP4 c4 and c16 run EP1, and c16 adds a 192-step prefill-decode
interval, 4 tokenizer workers and soft NUMA binding.
…-gb300-sgl-1008

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
@weireweire weireweire changed the title [AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, tuned TP2 c8-c32, DEP2 c64/c128 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,调优 TP2 c8-c32,c64/c128 改用 DEP2 [AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,精简为 7 个点(DEP2、TP4 EP1) Oct 12, 2026
Co-authored-by: nbommi19 <227267412+nbommi19@users.noreply.github.com>
@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] sgl-project/sglang#43799 has been merged. This PR's AgentX config (dsv41flash-fp4-gb300-sglang-agentic-dspark) is now in the Agentic Long-Context Deployment section of the SGLang DeepSeek-V4.1 cookbook: https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1#agentic-long-context-deployment

This PR has no authorized /use <run_id> comment yet, so the cookbook shows the recipe at this PR's head (e182134fd) as "in progress". It switches to the measured run at the next cookbook sync after a run is pinned or this PR merges.

@weireweire weireweire changed the title [AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,精简为 7 个点(DEP2、TP4 EP1) [AgentX] GB300 DSV4.1 Flash SGLang: 20261013 nightly with fastokens, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261013 nightly 并启用 fastokens,精简为 7 个点(DEP2、TP4 EP1) Oct 13, 2026
@weireweire
weireweire force-pushed the weireweire/dsv41flash-gb300-sgl-1008 branch from d5cd6f7 to 6b07b8e Compare October 13, 2026 03:23
@weireweire weireweire changed the title [AgentX] GB300 DSV4.1 Flash SGLang: 20261013 nightly with fastokens, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261013 nightly 并启用 fastokens,精简为 7 个点(DEP2、TP4 EP1) [AgentX] GB300 DSV4.1 Flash SGLang: 20261012 nightly, 7-point curve with DEP2 and TP4 EP1 / [AgentX] GB300 DSV4.1 Flash SGLang:升级 20261012 nightly,精简为 7 个点(DEP2、TP4 EP1) Oct 13, 2026
@nvpohanh

Copy link
Copy Markdown
Collaborator

/use 38221097558

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh staged run 38221097558.

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

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

lgtm, can u create & merge an sglang cookbook recipe

and then after creating merge, feel free to merge this PR

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] The SGLang cookbook update of this PR's AgentX config (dsv41flash-fp4-gb300-sglang-agentic-dspark) will happen in sgl-project/sglang#43983, in the Agentic Long-Context Deployment section of the DeepSeek-V4.1 cookbook page. The config has been live in that section since sgl-project/sglang#43799; sgl-project/sglang#43983 refreshes it with the pin below.

The commands mirror the launch measured in run 38221097558, pinned by this PR's /use comment.

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] sgl-project/sglang#43983 has been merged. This PR's AgentX config (dsv41flash-fp4-gb300-sglang-agentic-dspark) is now in the Agentic Long-Context Deployment section of the SGLang DeepSeek-V4.1 cookbook: https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1#agentic-long-context-deployment

The commands mirror the launch measured in run 38221097558, pinned by this PR's /use comment.

@nvpohanh

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
  • 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_MOE is 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
  • 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:

  • PR validation: Run Sweep 38221097558 ran on the current head 6b07b8e6930edcb8309cb59ca758fce5a3ef3f6b, which is in this PR's commit list. Attempt 2 concluded success. The run is pinned with /use 38221097558, and its artifacts are unexpired (they expire 2027-01-10/11).
    • All 7 dsv41flash-fp4-gb300-sglang-agentic-dspark benchmark jobs succeeded: canary TP4 c1, TP4 c4/c16, TP2/EP2 c16/c32 and DEP2 c64/c128. Every bmk_agentic_* artifact has records_error_dropped: 0; the only dropped records are warmup.
    • In attempt 1, TP4 c16 failed when AIPerf hit an HF Hub 429 Too Many Requests while loading the trace dataset, before any request was sent. That is an infrastructure failure, and fail-fast cancelled the other five jobs. Attempt 2 reran those six. The canary and both evals carried over from attempt 1.
    • The skipped jobs are the empty fixed-sequence and multi-node lanes.
  • Evals: gsm8k em_strict was 0.9735 (n=1319) at both DEP2 c128 and TP2/EP2 c32, from eval_results_all.
    • Both clear the default 0.90 threshold in infx/evals/thresholds.yaml, which has no dsv41flash override.
    • Both evals ran on the same image digest with real DSpark verification: no SGLANG_SIMULATE_ACC_* is set in the logged eval worker environment.
    • The equal scores are a coincidence. Only 100 of the 1319 responses are identical between the two runs.
  • Image and engine order: upstream lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c488694d74c13587af6057b90220498c4869571c8e1e3c43dd6f43ae721306. Every worker fingerprint reports sglang 0.0.0.dev1+ge6072935b and sglang-router 0.3.2, and the master config and recipe model.container match. The config is framework: sglang, so the engine-ordering rule is satisfied.
  • Chat template: AgentX replay runs aiperf profile --scenario agentx. The profile_export_aiperf.json of all 7 points records endpoint.type = chat with streaming.
  • Draft precision:
    • Draft: the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash (mtp.0–mtp.2, block size 5). All 7 benchmark workers and both eval workers load snapshot 5254448103b6254fc646dacbca1cbbf20e9216c1, with speculative_draft_model_path=deepseek-ai/DeepSeek-V4.1-Flash.
    • Shipped precision, from the safetensors headers of shards 44–46:
      • attention (wq_a, wq_b, wkv, wo_a, wo_b), shared experts and main_proj are F8_E4M3 with F8_E8M0 scales;
      • the 384 routed experts per stage are MXFP4 (I8-packed with F8_E8M0 scales);
      • norms, gate, markov_head and confidence_head are BF16, and hc_*, attn_sink and the gate biases are F32;
      • quantization_config is fp8 with dynamic activations, 32x32 blocks, ue8m0 scales and expert_dtype: fp4, with no exclusions.
    • Effective precision: the same, through the pinned image's default handling.
      • Every point logs quantization=None, speculative_draft_model_quantization=None, speculative_draft_kv_cache_dtype=None and json_model_override_args='{}'. The KV cache is the default fp8_e4m3 for both target and draft.
      • At e6072935, DeepseekV4DSpark.load_weights always streams wo_a from FP8 to BF16 (_dequant_fp8_wo_a_streaming), which matches DeepSeek's reference (wo_a in dtype=torch.bfloat16).
      • Routed experts, TP4 and TP2: flashinfer_mxfp4 with flashinfer_mxfp4_moe_precision=default, which means MXFP4 weights with MXFP8 activations.
      • Routed experts, DEP2: moe_a2a_backend=megamoe. The draft inherits it (DSpark with DP attention must match the target). Because enable_w4a4_mxfp4_megamoe=False and speculative_enable_w4a4_mxfp4_megamoe=None, MegaMoE uses its default fp8xfp4 MMA. No path uses W4A4.
      • Both paths give FP4 expert weights 8-bit activations, as DeepSeek's reference linear() does (act_quant to FP8, then fp4_gemm).
    • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE: not set in the recipe, the master config, the launch path or the logged worker environment of any point. It defaults to EnvBool(False) in environ.py at e6072935.
    • Other draft-related settings:
      • SGLANG_DSPARK_OPT_MARKOV_W2_BF16=True restates the default EnvBool(True).
      • SGLANG_DSPARK_FOLDED_SAMPLING=2 is deprecated and ignored at e6072935, and the workers log the deprecation warning. Folding the draft proposal into the CUDA graph is the image default (SGLANG_DSPARK_FOLDED_PROPOSAL=True). It affects graph capture only, not weight or activation precision.
  • Golden AL: infx/golden_al_distribution/dsv41flash_dspark.yaml gives 3.51 for thinking_on at draft length 5. That matches --speculative-dspark-block-size 5 and SGLANG_DEFAULT_THINKING=1.
    • All 7 benchmark points logged SGLANG_SIMULATE_ACC_LEN=3.51, SGLANG_SIMULATE_ACC_METHOD=match-expected and SGLANG_SIMULATE_ACC_TOKEN_MODE=real-draft-token.
  • MODELS.md: dsv41flash agentic coding is active, with SGLang DSpark arms per SKU, as of 2026-10-13.
  • Architecture, and decoder SWA bounded replay (disclosure):
    • There is no --hf-overrides, and json_model_override_args='{}'.
    • TP2/EP2 c16 and c32 enable SGLang's opt-in --enable-decoder-swa-bounded-replay.
      • During prefill, layers 21–39 (the layers after the last kv_source layer, 20) run only over each request's last 128 extend tokens, with their sliding windows starting at the beginning of that tail. Main and indexer KV stay exact.
      • The SGLang DeepSeek-V4.1 cookbook states that it "is not numerically equivalent to full prefill".
      • SGLang rejects the flag with DP attention or the prefill CUDA graph, so the DEP2 and TP4 points do not use it. Their logged enable_decoder_swa_bounded_replay is False.
      • The TP2/EP2 c32 eval ran with the flag and scored 0.9735 on gsm8k.
      • The same flag is in the merged H200 SGLang recipe (#3392, which states the path is not numerically identical) and the merged MI355X SGLang recipe (#3696). ATOM enables the same approximation by default (#3901).
      • Per SA admin guidance, decoder SWA bounded replay is allowed: DeepSeek endorses it, and the model was trained to tolerate it. @cquil11, please confirm.
    • The other changed settings are scheduling, memory or placement settings: the Engram host table location, swa-prefix-tails (SWA pool headroom), prefill-decode-interval, chunk size, admission, mem-fraction-static, tokenizer workers, schedule-policy, load-balance-method, the DP-attention control broadcast, cuda-graph-backend-prefill disabled, SGLANG_NUMA_BIND_V2=0 and expandable_segments. SGLANG_RAGGED_VERIFY_MODE=static restates the pinned default.
    • publish_events_and_metrics appears only in TRT-LLM recipes and does not apply to this SGLang path. --enable-metrics is on.
  • No engine patches: the diff changes only the recipe, the master config and the changelog. There is no setup_script, patch file, git apply, heredoc rewrite, site-packages edit or wheel install, and the pinned image runs as shipped. No waiver is needed.
  • Recipe publication:
    • Upstream PR: sgl-project/sglang#43983 is MERGED (mergedAt: 2026-10-13T06:39:46Z, merge commit dbad07a06fbedfc63fd54282d2989ef4feb03c23). docs/src/snippets/agentx/deepseek-ai/deepseek-v4_1.jsx is unchanged on SGLang main (d8f85223). The config was first added by sgl-project/sglang#43799, merged 2026-10-12.
    • Published page: https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1#agentic-long-context-deployment (hardware GB300, KV offload "None", router "SGLang").
    • Variants: it lists the three GB300 deployments in this PR: "Agg TP4" (C1/C4/C16), "Agg TP2·EP2" (C16/C32) and "Agg DEP2" (C64/C128). Each records this PR's head 6b07b8e6, run 38221097558 and the /use comment as its source.
    • Comparison: I decoded all 7 cookbook commands with the cookbook's own decoder (_agentx.jsx). I compared them with the recipe at 6b07b8e6 (base merged with each override, anchors resolved) and with the Env:/Command: lines that srt-slurm logged for all 7 points. All three agree on every worker flag and environment variable, except the InferenceX-only settings below.
      • The DEP2 router command also matches: sglang_router.launch_router --policy cache_aware --request-id-headers x-correlation-id --dp-aware --connect-timeout-secs 900 --request-timeout-secs 14400 --disable-health-check --disable-retries.
      • The pinned image resolves quantization (from the checkpoint config), the KV-cache dtype (fp8_e4m3) and the kernel backends (attention_backend=dsv4, flashinfer_mxfp4 or MegaMoE) itself. Neither the recipe nor the cookbook sets them.
    • Excluded as InferenceX-only:
      • --enable-metrics: the Prometheus export that AIPerf scrapes for result collection.
      • --host, --port, --nccl-port, the router --worker-urls/--prometheus-*, CUDA_VISIBLE_DEVICES and HEAD_NODE_IP: process placement.
      • PYTHONNOUSERSITE and PYTHONUNBUFFERED: Python path isolation and log buffering inside the container.
      • SGLANG_CUDA_COREDUMP_BEFORE_CRASH=0 and SGLANG_PYSPY_DUMP_BEFORE_CRASH=0: crash diagnostics.
      • SGLANG_SIMULATE_ACC_*: the synthetic acceptance control.
      • The AIPerf client settings (CONC, AGENTIC_WARMUP_GRACE_PERIOD, AIPERF_*). This includes AIPERF_HTTP_X_SMG_ROUTING_KEY_FROM_CORRELATION_ID, which only makes the benchmark client send the x-correlation-id header that the router's --request-id-headers reads.
  • append-only: N/A. The single new changelog entry does not use append-only: true and only appends at the end of perf-changelog.yaml. The current merge conflict with main is limited to that file.
  • Code quality:
    • The recipe shares the TP2 and DEP2 settings through YAML anchors, and the header comment describes the new points.
    • The master-config search space matches the overrides: TP2/EP2 c16/c32, TP2/EP2 with dp-attn c64/c128 behind sglang-router 0.3.2, and TP4/EP1 c1/c4/c16.
    • A non-blocking follow-up: the unchanged base env still sets SGLANG_DSPARK_FOLDED_SAMPLING=2, which is now a no-op.
  • NVIDIA overview (advisory): DeepSeek-V4.1-Flash is not yet listed in either table of the NVIDIA recipes overview. Only DeepSeek-V4, V4-Flash and V4-Pro are listed.
  • Pareto: one curve, dsv41flash / agentic-coding / gb300_sglang / fp4 / run 38221097558. It comes from the 7 bmk_agentic_* artifacts, all on the same image digest (y = per_gpu.total_tput_tps, x = E2EL), and was counted with infx.workflows.pareto_coverage.

Signed: nvpohanh

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Verdict: WARN ⚠️

❗❗ WARNING ❗❗ NVIDIA official recipes overview: model/framework coverage is missing or unverified. See Check 16.

⚠️ Check 16 (NVIDIA overview): WARN — DeepSeek-V4.1-Flash / SGLang on GB300 has merged upstream coverage in the SGLang DeepSeek-V4.1 cookbook (sgl-project/sglang#43983). It is missing from both tables of the NVIDIA recipes overview, which list only DeepSeek-V4 (SGLang), V4-Flash and V4-Pro. Please add DeepSeek-V4.1-Flash with SGLang to the overview.

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — @nvpohanh is a named owner of inferencex-e2e/configs/nvidia-master.yaml and of the **/gb300-*/ srt-slurm recipe path. perf-changelog.yaml falls under the catch-all, which any CODEOWNER satisfies.

✅ Check 1 (Passing sweep on in-PR commit): PASS — Run 38221097558 ran on head 6b07b8e6, which is in the PR. The canary, all 6 agentic / jobs and both agentic eval / jobs are success. This config is agentic-only, so the skipped single-node */, eval / and multi-node lanes have no matrix entries.

✅ Check 2 (Evals): PASS — In eval_results_all, gsm8k em_strict is 0.9735 (n=1319) at both DEP2 c128 and TP2/EP2 c32, above the 0.90 default. Both evals ran on the PR's image lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c48869….

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#43983 is MERGED (2026-10-13T06:39:46Z). deepseek-v4_1.jsx on SGLang main carries "Agg TP4", "Agg TP2·EP2" and "Agg DEP2" GB300 entries pinned to 6b07b8e6 / run 38221097558, and the published page shows them. Spot-checked overrides match the recipe: TP4 c1/c4/c16, TP2 c16/c32 (16K chunks, bounded replay, prefill graph disabled, interval 96/48, expandable_segments, NUMA_BIND_V2) and DEP2 c64/c128 (DP attention, DP LM head, MegaMoE, total_requests, shortest-prefill-first, interval 24/16). The DEP2 sglang_router command also matches. The InferenceX-only exclusions are justified in the sign-off.

✅ Check 4 (Reuse command): PASS — /use 38221097558 was posted by nvpohanh (COLLABORATOR) in comment 6137670512.

✅ Check 5 (Latest template): PASS — Every item in the current PR_REVIEW_CHECKLIST.md template is present and checked, including the upstream sub-item and the Pareto item.

✅ Check 6 (Upstream image / engine order): PASS — The entry is framework: sglang and uses the upstream lmsysorg/sglang image, digest-pinned, on GB300. This is an open-source engine entry, so the ordering rule does not apply.

✅ Check 7 (Deprecated models): PASS — MODELS.md lists dsv41flash agentic coding as active, with SGLang DSpark arms per SKU, as of 2026-10-13.

✅ Check 8 (Architecture / event publication): PASS — There are no --hf-overrides, override args or model-file edits.

✅ Check 9 (Chat template): PASS — AgentX replay drives the chat-completions endpoint. The sign-off records endpoint.type = chat for all 7 points.

✅ Check 10 (Engine patches): PASS — The diff touches only the recipe, the master config and the changelog. There is no setup script, patch, heredoc or wheel install. The rendered srtctl overrides add only the synthetic-acceptance env.

✅ Check 11 (Golden AL): PASS — dsv41flash_dspark.yaml gives 3.51 for thinking_on at length 5, which matches block size 5 and SGLANG_DEFAULT_THINKING=1. The connector injected SGLANG_SIMULATE_ACC_LEN=3.51 with match-expected / real-draft-token, as seen in the job log and srt-single-node-submission.json.

➖ Check 12 (Append-only): N/A — The new changelog entry has no append-only: true.

✅ Check 13 (Draft as shipped): PASS — The draft is the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash.

  • The recipe, overrides and launch path set no draft quantization, dtype or path override.
  • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is unset everywhere and defaults to EnvBool(False) in environ.py at e6072935.
  • SGLANG_DSPARK_OPT_MARKOV_W2_BF16=True restates the default.
  • The MegaMoE default (fp8xfp4) and the flashinfer_mxfp4 default both keep MXFP4 weights with 8-bit activations, as shipped.

✅ Check 14 (Pareto coverage): PASS — There is one curve: dsv41flash / agentic-coding / gb300_sglang / fp4 / run 38221097558, 7 bmk_agentic_* artifacts on the same image, y = per_gpu.total_tput_tps. pareto_coverage counts 5 frontier points at P90 E2EL (TP4 c16, TP2 c16, TP2 c32, DEP2 c64, DEP2 c128) and 6 at P75 E2EL. No points are invalid.

✅ Check 15 (PR description): PASS — The description's claims match the code at 6b07b8e6: the image, the 7-point search space, TP4 c4/c16 on EP1, the TP2 c16/c32 settings and the DEP2 c64/c128 settings (intervals 24/16, mem-fraction 0.85, admits 256). The local results are clearly labeled as local.

Assessed commit: 6b07b8e6930edcb8309cb59ca758fce5a3ef3f6b.

@nvpohanh

Copy link
Copy Markdown
Collaborator

⚠️ Verdict: WARN ⚠️

❗❗ WARNING ❗❗ NVIDIA official recipes overview: model/framework coverage is missing or unverified. See Check 16.

⚠️ Check 16 (NVIDIA overview): WARN — DeepSeek-V4.1-Flash / SGLang on GB300 has merged upstream coverage in the SGLang DeepSeek-V4.1 cookbook (sgl-project/sglang#43983). It is missing from both tables of the NVIDIA recipes overview, which list only DeepSeek-V4 (SGLang), V4-Flash and V4-Pro. Please add DeepSeek-V4.1-Flash with SGLang to the overview.

Passed and not applicable checks
✅ Check 0 (CODEOWNER): PASS — @nvpohanh is a named owner of inferencex-e2e/configs/nvidia-master.yaml and of the **/gb300-*/ srt-slurm recipe path. perf-changelog.yaml falls under the catch-all, which any CODEOWNER satisfies.

✅ Check 1 (Passing sweep on in-PR commit): PASS — Run 38221097558 ran on head 6b07b8e6, which is in the PR. The canary, all 6 agentic / jobs and both agentic eval / jobs are success. This config is agentic-only, so the skipped single-node */, eval / and multi-node lanes have no matrix entries.

✅ Check 2 (Evals): PASS — In eval_results_all, gsm8k em_strict is 0.9735 (n=1319) at both DEP2 c128 and TP2/EP2 c32, above the 0.90 default. Both evals ran on the PR's image lmsysorg/sglang:nightly-dev-cu13-20261012-e6072935@sha256:b5c48869….

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#43983 is MERGED (2026-10-13T06:39:46Z). deepseek-v4_1.jsx on SGLang main carries "Agg TP4", "Agg TP2·EP2" and "Agg DEP2" GB300 entries pinned to 6b07b8e6 / run 38221097558, and the published page shows them. Spot-checked overrides match the recipe: TP4 c1/c4/c16, TP2 c16/c32 (16K chunks, bounded replay, prefill graph disabled, interval 96/48, expandable_segments, NUMA_BIND_V2) and DEP2 c64/c128 (DP attention, DP LM head, MegaMoE, total_requests, shortest-prefill-first, interval 24/16). The DEP2 sglang_router command also matches. The InferenceX-only exclusions are justified in the sign-off.

✅ Check 4 (Reuse command): PASS — /use 38221097558 was posted by nvpohanh (COLLABORATOR) in comment 6137670512.

✅ Check 5 (Latest template): PASS — Every item in the current PR_REVIEW_CHECKLIST.md template is present and checked, including the upstream sub-item and the Pareto item.

✅ Check 6 (Upstream image / engine order): PASS — The entry is framework: sglang and uses the upstream lmsysorg/sglang image, digest-pinned, on GB300. This is an open-source engine entry, so the ordering rule does not apply.

✅ Check 7 (Deprecated models): PASS — MODELS.md lists dsv41flash agentic coding as active, with SGLang DSpark arms per SKU, as of 2026-10-13.

✅ Check 8 (Architecture / event publication): PASS — There are no --hf-overrides, override args or model-file edits.

✅ Check 9 (Chat template): PASS — AgentX replay drives the chat-completions endpoint. The sign-off records endpoint.type = chat for all 7 points.

✅ Check 10 (Engine patches): PASS — The diff touches only the recipe, the master config and the changelog. There is no setup script, patch, heredoc or wheel install. The rendered srtctl overrides add only the synthetic-acceptance env.

✅ Check 11 (Golden AL): PASS — dsv41flash_dspark.yaml gives 3.51 for thinking_on at length 5, which matches block size 5 and SGLANG_DEFAULT_THINKING=1. The connector injected SGLANG_SIMULATE_ACC_LEN=3.51 with match-expected / real-draft-token, as seen in the job log and srt-single-node-submission.json.

➖ Check 12 (Append-only): N/A — The new changelog entry has no append-only: true.

✅ Check 13 (Draft as shipped): PASS — The draft is the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash.

  • The recipe, overrides and launch path set no draft quantization, dtype or path override.
  • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is unset everywhere and defaults to EnvBool(False) in environ.py at e6072935.
  • SGLANG_DSPARK_OPT_MARKOV_W2_BF16=True restates the default.
  • The MegaMoE default (fp8xfp4) and the flashinfer_mxfp4 default both keep MXFP4 weights with 8-bit activations, as shipped.

✅ Check 14 (Pareto coverage): PASS — There is one curve: dsv41flash / agentic-coding / gb300_sglang / fp4 / run 38221097558, 7 bmk_agentic_* artifacts on the same image, y = per_gpu.total_tput_tps. pareto_coverage counts 5 frontier points at P90 E2EL (TP4 c16, TP2 c16, TP2 c32, DEP2 c64, DEP2 c128) and 6 at P75 E2EL. No points are invalid.

✅ Check 15 (PR description): PASS — The description's claims match the code at 6b07b8e6: the image, the 7-point search space, TP4 c4/c16 on EP1, the TP2 c16/c32 settings and the DEP2 c64/c128 settings (intervals 24/16, mem-fraction 0.85, admits 256). The local results are clearly labeled as local.

Assessed commit: 6b07b8e6930edcb8309cb59ca758fce5a3ef3f6b.

I am already working on it.

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] The SGLang cookbook update of this PR's AgentX config (dsv41flash-fp4-gb300-sglang-agentic-dspark) will happen in sgl-project/sglang#44065, in the Agentic Long-Context Deployment section of the DeepSeek-V4.1 cookbook page. The config has been live in that section since sgl-project/sglang#43983; sgl-project/sglang#44065 refreshes it with the pin below.

The commands mirror the launch measured in run 38221097558, pinned by this PR's /use comment.

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 38221097558

1 similar comment
@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 38221097558

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants