Skip to content

[NVIDIA][AgentX] Refresh B200 DeepSeek-V4.1-Flash SGLang aggregate curve / [NVIDIA][AgentX] 更新 B200 DeepSeek-V4.1-Flash SGLang 聚合曲线 - #4111

Merged
nvpohanh merged 3 commits into
mainfrom
dsv41flash-fp4-b200-sglang-agentx-1014
Oct 16, 2026
Merged

nvpohanh merged 3 commits into
mainfrom
dsv41flash-fp4-b200-sglang-agentx-1014

Conversation

@shyeh25

@shyeh25 shyeh25 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

Refresh the DeepSeek-V4.1-Flash FP4 B200 SGLang AgentX aggregate curve (dsv41flash-fp4-b200-sglang-agentic-dspark):

  • repin the SGLang image to lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a, pinned by multiarch digest;
  • replace the TP4/EP4 C1–C32 and DP4 C48/C128 points with eleven points: TP4/EP1 at C1, C4 and C8, TP4/EP4 at C16 and C24, and aggregate TP4/EP4 with DP attention (DP4) at C48, C64, C96, C128, C192 and C256;
  • use the validated per-point prefill-decode interval, schedule policy, prefill chunking, admission, memory and SWA prefix-tail settings;
  • on the DP4 points, use MegaMoE, the MXFP4 FlashInfer MoE runner, TRT-LLM sparse attention and HiCache host-DRAM KV offload (declared as kv-offloading: dram with the hicache backend), and route them through sglang-router 0.3.2 with cache-aware, correlation-ID-affine routing.

The deployment remains single-node and aggregate. No cluster-route or runner configuration changes are included. DSpark remains the checkpoint-bundled draft at its shipped precision with block size 5.

AI model disclosure
  • Model/version: Claude Opus 5.5 (claude-opus-5-5)
  • Role: benchmark tuning and analysis, recipe and matrix integration, validation, and PR preparation.
PR checklist and change type

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.
中文

更新 DeepSeek-V4.1-Flash FP4 B200 SGLang AgentX 聚合曲线(dsv41flash-fp4-b200-sglang-agentic-dspark):

  • 将 SGLang 镜像更新至 lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a,并以 multiarch digest 固定;
  • 以十一个点取代原本的 TP4/EP4 C1–C32 与 DP4 C48/C128:TP4/EP1 的 C1、C4、C8,TP4/EP4 的 C16、C24,以及启用 DP attention 的聚合式 TP4/EP4(DP4)的 C48、C64、C96、C128、C192、C256;
  • 使用已验证的逐点 prefill-decode interval、调度策略、prefill chunk、运行请求上限、显存与 SWA 前缀尾部设置;
  • DP4 测试点使用 MegaMoE、MXFP4 FlashInfer MoE runner、TRT-LLM 稀疏注意力与 HiCache 主机内存 KV offload(标为 kv-offloading: dram、后端 hicache),并通过 sglang-router 0.3.2 进行缓存感知及 correlation-ID 亲和路由。

部署仍为单节点聚合式部署。本 PR 不包含集群路由或 runner 配置改动。DSpark 继续使用 checkpoint 自带的 draft 及其原始精度,block size 为 5。

AI 模型披露:本 PR 使用 Claude Opus 5.5(claude-opus-5-5)进行 benchmark 调优与分析、recipe/矩阵整合、验证与 PR 准备。

🤖 Generated with Claude Code

Repin dsv41flash-fp4-b200-sglang-agentic-dspark to
lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a (multiarch digest) with
eleven points: TP4/EP1 C1/C4/C8, TP4/EP4 C16/C24, and TP4/EP4 with DP
attention C48-C256 behind sglang-router with MegaMoE, TRT-LLM sparse
attention, HiCache host-DRAM KV offload and shortest-prefill-first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

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 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@shyeh25 shyeh25 added the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Oct 15, 2026

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

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Beyond the inline finding, I also checked the drop in tokenizer-worker-num from 8 to 1 across all six new DP4 arms (agentic.yaml, e.g. line 191) — since it's applied uniformly to every new conc point rather than isolated to one, it reads as a deliberate setting for this image/topology rather than a leftover regression, so I'm not flagging it as a bug.

Extended reasoning...

This PR bumps the SGLang nightly pin and restructures the DSv4.1-Flash FP4 B200 AgentX benchmark curve across nvidia-master.yaml, the matching srt-slurm recipe, and a perf-changelog entry; it touches no auth/crypto/permission surface, only benchmark scheduling and recipe config. Both changed config/recipe files fall under the nvidia-master.yaml and b200-* srt-slurm-recipes CODEOWNERS entries, and one CONFIRMED comment-style nit was already surfaced for inline posting, so approval is not appropriate here regardless. I additionally verified the tokenizer-worker-num change flagged as a candidate concern is applied consistently across all new DP4 points, which is why it was ruled out rather than treated as a bug.

Comment on lines +8659 to +8661
# TP4 covers C1-C24 (EP1 at C1-C8, EP4 at C16/C24) with a GPU-resident KV cache.
# DP4 (TP4 x DP-attention 4 + EP4, MegaMoE) covers C48-C256 behind sglang-router
# and offloads KV to host DRAM through HiCache.

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.

🟡 nit (optional): Added lines 8659-8661 describing the whole TP4/DP4 topology, and the matching block in agentic.yaml:51-56, are header/overview comments above a config key and above a set of recipe overrides, which AGENTS.md's "Code comments (mandatory)" section (no header comments; only technical explanation of a specific line) forbids. Fix: replace both with per-line technical notes (e.g. why hicache-ratio: 2 or prefill-decode-interval falls with concurrency) or drop them; the pre-existing comment block above this key already had this shape, but this diff extends it with more topology narration instead of trimming it. [also at: inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/dsv41flash/sglang/b200-fp4-mtp/agentic.yaml:56 - Maintainers reading this recipe (and nvidia-master.yaml) again get a banned header/overview comment, which AGENTS.md 'Code comments (mandatory)' explicitly forbids and which the base branch did not have in this form.]

Why this was flagged

AGENTS.md:60-67 ("Code comments (mandatory)") states: no header comments describing the file/topology/config, only succinct technical explanation of a specific line. nvidia-master.yaml:8652-8661 and agentic.yaml:51-56 both describe the overall TP4/DP4 search-space shape and scheduling story, not a single line's rationale. This is a pre-existing pattern (the prior comment block already summarized the topology) that this diff extends rather than removes, so a maintainer following the rule literally would need to pare both blocks down before merge.

Verification: nit. Candidate is factually accurate at both cited sites. AGENTS.md:60-67 ("Code comments (mandatory)") forbids header/overview comments: "No header comments ... Do not describe what the file, topology, or config is" and "Only technical explanation. A comment explains a specific line or block." nvidia-master.yaml:8659-8661 and agentic.yaml:51-56 describe the overall topology and override set rather than per-line rationale, which the rule prohibits.

Remove the topology overview comments above the B200 SGLang master-config
key and the recipe overrides, per the AGENTS.md code-comment rules. No
configuration change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh

Copy link
Copy Markdown
Collaborator

/use 38749770474

@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh staged run 38749770474.

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

@nvpohanh

Copy link
Copy Markdown
Collaborator

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

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

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] sgl-project/sglang#44654 has been merged. This PR's AgentX config (dsv41flash-fp4-b200-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 38749770474, 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
  • For affected Dynamo TRT-LLM benchmarks, verified that iteration/KV-cache metrics are collected and published under the pinned Dynamo implementation and effective engine settings. Resolve the installed Dynamo version separately from the container tag; use supported metrics controls without requiring KV events. Record the version and configuration evidence in the additional detail section. See verifier Check 17. N/A for unaffected serving paths or frameworks without these Dynamo settings.
  • 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:

  • Assessed head: f4d96b32737490edcb2249533f4fc8be33e9b8ae, the current PR head and the commit of the pinned run. The PR has two commits. f4d96b32 only deletes the overview comments above the master-config key and the recipe overrides; the parsed YAML is unchanged from de7fe15e.
    • I used the checklist, verifier prompt, CODEOWNERS, thresholds.yaml, MODELS.md and golden AL curves from current upstream main 31387958b694c2a29d443f772efe3e12ddd8afe4.
  • CODEOWNER: nvpohanh is listed for inferencex-e2e/configs/nvidia-master.yaml and for the **/b200-*/ srt-slurm recipe path. perf-changelog.yaml falls under the catch-all.
  • PR validation: Run Sweep 38749770474 ran on f4d96b32 (pull_request, full-sweep-fail-fast) and completed with success on attempt 1. It is pinned with /use 38749770474, the PR's only /use comment. Its 11 bmk_agentic_* artifacts, results_bmk, eval_results_all and server-log artifacts are unexpired (they expire 2027-01-13).
    • All 11 dsv41flash-fp4-b200-sglang-agentic-dspark benchmark jobs succeeded: TP4/EP1 C1 (canary), C4 and C8; TP4/EP4 C16 and C24; and TP4/EP4 with DP attention (DP4) and HiCache at C48, C64, C96, C128, C192 and C256 behind sglang-router 0.3.2. Every point recorded 0 error-dropped requests.
    • Both agentic eval / jobs succeeded.
    • The 9 skipped jobs are the empty fixed-sequence, fixed-sequence eval and multi-node lanes; this config is single-node agentic only.
    • The earlier run on de7fe15e (38737455041) was cancelled when f4d96b32 was pushed.
  • Evals: gsm8k em_strict was 0.9727 at TP4/EP4 C24 (job) and 0.9742 at DP4 C256 with HiCache (job), n=1319 each, infrastructure_success: true, from eval_results_all.
    • Both clear the default 0.90 threshold in infx/evals/thresholds.yaml on current main, which has no dsv41flash override.
    • Both ran on the PR's image digest with real DSpark verification. The eval server logs show speculative_algorithm='DSPARK', no SGLANG_SIMULATE_ACC_*, and mean accept lengths of 3.95 (C24) and 4.02 (C256).
  • Image: upstream lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a@sha256:ddae0e399d3d94f7827f16183301cf8dac4cf0eae0ef25590b7dac5881d713d8.
    • The digest is the tag's multi-arch index on Docker Hub (amd64 561794b6…, arm64 2b9d5dd7…).
    • It contains SGLang 684fea8af3b11a5b51ec9966c02959a32ad3421c, per SGLANG_BUILD_COMMIT in the logged worker environment.
    • The config is framework: sglang, so the engine-ordering item is satisfied by this submission itself.
  • Chat template: the AIPerf export of the C1 job records endpoint type: chat with streaming: true.
    • The server logs of all 11 points show only POST /v1/chat/completions request traffic, plus GET health, metrics, model and server-info probes and the harness's POST /freeze_gc. They show no /v1/completions or /generate requests.
    • The served revision ships chat_template.jinja. The server logs "Using default HuggingFace chat template" and auto-detects the deepseek-v41 reasoning parser and deepseekv41 tool-call parser from it.
    • Thinking is on (SGLANG_DEFAULT_THINKING=1) with reasoning effort high.
  • Draft precision: the served draft is the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash rev 5254448103b6254fc646dacbca1cbbf20e9216c1 (mtp.0 to mtp.2, block size 5), which is the current Hugging Face main.
    • All 11 benchmark workers and both eval workers load snapshot 5254448103b6254fc646dacbca1cbbf20e9216c1. They log "DSpark draft weights are bundled in the target checkpoint; defaulting --speculative-draft-model-path to --model-path".
    • Shipped: from the safetensors headers of shards 44 to 46 at this revision (all 2,401 mtp.* tensors):
      • The attention (wq_a, wq_b, wkv, wo_a, wo_b), shared-expert and main_proj weights are F8_E4M3 with F8_E8M0 scales.
      • The routed experts are MXFP4 (expert_dtype: fp4, packed as I8 with F8_E8M0 scales).
      • The norms, gate weight, markov_head and confidence_head are BF16. attn_sink, the gate biases and the hc_* tensors are F32.
      • The checkpoint quantization_config (fp8, dynamic activations, 32x32 blocks, ue8m0, expert_dtype: fp4) has no exclusions.
    • Effective: the same, through the pinned image's default handling.
      • At 684fea8a, deepseek_v4_dspark.py builds the draft with the target's quant config and wo_a_fp8=False.
      • It dequantizes wo_a from FP8 to BF16 at load (_dequant_fp8_wo_a_streaming), which matches DeepSeek's reference. Every worker logs "Finished streaming dequant fp8 wo_a" and type=DeepseekV4ForCausalLMDSpark, quant=fp8.
    • Routed experts, effective: both MoE paths use 8-bit activations with FP4 weights, as DeepSeek's reference does (act_quant to FP8, then fp4_gemm). No path uses W4A4.
      • TP4/EP1 and TP4/EP4 run flashinfer_mxfp4 with flashinfer_mxfp4_moe_precision=default. On SM100 that quantizes activations to MXFP8.
      • DP4 runs moe_a2a_backend=megamoe, which the draft inherits (speculative_moe_a2a_backend=None). With enable_w4a4_mxfp4_megamoe=False and speculative_enable_w4a4_mxfp4_megamoe=None, MegaMoE uses its default fp8xfp4 MMA.
    • KV cache: FP8 for both target and draft, which is the image default. C1, C16 and C24 do not set --kv-cache-dtype and still log kv_cache_dtype=fp8_e4m3, so the explicit fp8_e4m3 on the other points restates the default. speculative_draft_kv_cache_dtype=None and dspark_draft_bf16=False on every worker.
    • The logged server args of all 13 workers show speculative_draft_model_quantization=None, speculative_draft_kv_cache_dtype=None, speculative_draft_model_revision=None, quantization=None, dtype=auto and speculative_draft_model_path=deepseek-ai/DeepSeek-V4.1-Flash, which is the same checkpoint.
    • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is not set anywhere: not in the recipe, the master row or the shared launch scripts, and not in any file of the 13 server-log archives, including the logged worker environments. At the head it appears only in other models' recipes. It defaults to EnvBool(False) in environ.py at the pinned SHA.
  • Golden AL: infx/golden_al_distribution/dsv41flash_dspark.yaml gives 3.51 for thinking_on with draft length 5.
    • The worker environment of every one of the 11 benchmark points logs SGLANG_SIMULATE_ACC_LEN=3.51, SGLANG_SIMULATE_ACC_METHOD=match-expected and SGLANG_SIMULATE_ACC_TOKEN_MODE=real-draft-token, with SGLANG_DEFAULT_THINKING=1.
    • These values are injected by infx/srt_slurm/synthetic_acceptance.py from the golden curve; the recipe does not set them.
    • The mean accept len in the decode logs is 3.509 to 3.512 on every point.
  • MODELS.md: on current main, dsv41flash agentic coding is active, with SGLang DSpark arms per SKU, and the model has no deprecated scenario.
  • No architecture hacks: there is no --hf-overrides, and json_model_override_args='{}'. enable_deepseek_v4_fp4_indexer=False, so the indexer uses the image's default path.
    • --dsv4-attn-backend flashmla|trtllm only selects the kernel for DeepSeek-V4's native sparse attention.
    • MegaMoE fuses dispatch, expert GEMMs and combine over the same experts.
    • SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=1 (C4, C8) folds the next mHC combine and norm into the post kernel (_post_fusion). The computation is the same.
    • The per-rank Engram host tables only move where the Engram tables live.
    • swa-prefix-tails sizes how much SWA prefix tail is retained for prefix reuse; the sliding window itself is unchanged.
  • Dynamo TRT-LLM metrics: N/A. This is a direct framework: sglang deployment with no Dynamo and no TRT-LLM worker. SGLang metrics are on (--enable-metrics).
  • Recipe publication (merged): every point in this PR is documented in the SGLang cookbook. sgl-project/sglang#44654 added them and is MERGED (mergedAt: 2026-10-16T04:45:08Z, merge commit fd4b75c6960002d341cbb7bb127de7631770c87a). It is the latest commit on sglang main that touches the data file.
    • Published page: https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1#agentic-long-context-deployment (hardware B200, checkpoint deepseek-ai/DeepSeek-V4.1-Flash).
    • Data: docs/src/snippets/agentx/deepseek-ai/deepseek-v4_1.jsx records this PR's commit f4d96b32 and run 38749770474 (status: verified-pr) as the source of three B200 deployments: "Agg TP4", "Agg TP4·EP4" and "Agg DEP4". It lists the same image digest.
    • B200 "Agg TP4" (C1, C4, C8), C1 worker: python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V4.1-Flash --served-model-name deepseek-ai/DeepSeek-V4.1-Flash --tensor-parallel-size 4 --data-parallel-size 1 --expert-parallel-size 1 --moe-a2a-backend none --speculative-algorithm DSPARK --speculative-dspark-block-size 5 --dsv4-attn-backend flashmla --chunked-prefill-size 8192 --cuda-graph-max-bs-decode 1 --max-running-requests 1 --mem-fraction-static 0.88 --prefill-decode-interval 16 --schedule-policy lpm --swa-prefix-tails 128 --tokenizer-backend fastokens --reasoning-parser auto --tool-call-parser auto --trust-remote-code --watchdog-timeout 3600, with SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=0.
      • C4 and C8 drop --data-parallel-size and --moe-a2a-backend.
      • They add --dsv4-attn-backend trtllm --kv-cache-dtype fp8_e4m3 --cuda-graph-backend-prefill disabled --cuda-graph-max-bs-decode 64 --mem-fraction-static 0.76 --schedule-policy shortest-prefill-first and SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=1.
      • Their per-point values: --max-running-requests 2 / 16, --prefill-decode-interval 256 / 192, and --swa-prefix-tails 256 / 256.
    • B200 "Agg TP4·EP4" (C16, C24), worker: the C1 command with --expert-parallel-size 4 --cuda-graph-max-bs-decode 64 --mem-fraction-static 0.76 --schedule-policy shortest-prefill-first.
      • It drops --data-parallel-size, --dsv4-attn-backend, --moe-a2a-backend and the mHC environment variable.
      • Its per-point values: --max-running-requests 32 / 48, --prefill-decode-interval 192 / 96, and --swa-prefix-tails 512 / 768.
    • B200 "Agg DEP4" (C48, C64, C96, C128, C192, C256), worker: the TP4·EP4 command plus the flags below, with SGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK=16384 and SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=0.
      • Parallelism and routing: --data-parallel-size 4 --enable-dp-attention --enable-dp-lm-head --enable-dp-attention-local-control-broadcast --load-balance-method total_requests.
      • Tokenizer: --tokenizer-backend huggingface --tokenizer-worker-num 1.
      • Kernels and batching: --chunked-prefill-size 65536 --cuda-graph-backend-prefill disabled --dsv4-attn-backend trtllm --kv-cache-dtype fp8_e4m3 --moe-a2a-backend megamoe --moe-runner-backend flashinfer_mxfp4 --max-running-requests 256 --swa-prefix-tails 3072.
      • HiCache: --enable-hierarchical-cache --hicache-io-backend direct --hicache-mem-layout page_first_direct --hicache-ratio 2 --hicache-write-policy write_back.
      • Per point, --prefill-decode-interval is 128 / 96 / 64 / 48 / 40 / 24.
    • B200 "Agg DEP4", router: python3 -m sglang_router.launch_router --policy cache_aware --dp-aware --request-id-headers x-correlation-id --connect-timeout-secs 900 --request-timeout-secs 14400 --disable-health-check --disable-retries --worker-urls ....
      • sglang-router 0.3.2 ships in the pinned image: the worker's package list shows sglang-router 0.3.2, and the harness has no sglang-router installer. That matches the master-config pin.
      • "Agg TP4" and "Agg TP4·EP4" have no router.
    • Environment, all deployments: SGLANG_DEFAULT_THINKING=1, SGLANG_DSV41_REASONING_EFFORT=high, SGLANG_ENABLE_DSV41_ENGRAM_HOST_TABLE=1, SGLANG_DSV41_ENGRAM_HOST_TABLE_LAYOUT=per_rank, SGLANG_TIMEOUT_KEEP_ALIVE=900 and NCCL_CUMEM_ENABLE=1.
    • Comparison with the run: I resolved the cookbook command for each of the 11 points from the data file at fd4b75c6 and diffed it against the logged srt-slurm launch command, router command and worker environment in run 38749770474. They are identical except for the InferenceX-only settings listed below.
      • The pinned image auto-resolves quantization and the remaining kernel backends. The logs show quantization=None, which falls back to the checkpoint's FP8/MXFP4 quantization_config, plus attention_backend=dsv4, moe_runner_backend=flashinfer_mxfp4 (set explicitly only on DP4) and fp8_gemm_runner_backend=flashinfer_cutedsl.
      • Under DP attention, SGLang splits --chunked-prefill-size and --max-running-requests across the 4 attention-DP ranks. The scheduler logs show a per-rank chunked_prefill_size of 16384 and a per-rank max_running_requests of 64, equal to the decode graph batch of 64. The recipe and the cookbook pass the same CLI values.
    • Excluded as InferenceX-only:
      • --enable-metrics on the worker and --prometheus-port/--prometheus-host on the router. They are the Prometheus export that AIPerf scrapes for result collection (AIPERF_REQUIRED_SERVER_METRIC_PREFIX=sglang:) and do not affect scheduling or kernels.
      • --host, --port, --nccl-port, worker URLs, CUDA_VISIBLE_DEVICES and HEAD_NODE_IP. These are srt-slurm process placement; the cookbook uses placeholders.
      • PYTHONNOUSERSITE and PYTHONUNBUFFERED, which only set Python path isolation and log buffering in the container.
      • SGLANG_CUDA_COREDUMP_BEFORE_CRASH=0 and SGLANG_PYSPY_DUMP_BEFORE_CRASH=0. These srt-slurm crash-diagnostic toggles only control dumps after a crash.
      • SGLANG_TORCH_PROFILER_DIR=/workspace, set by benchmarks/runtime_settings.sh. It only names the profiler output directory, and no profiling runs.
      • SGLANG_SIMULATE_ACC_*, the synthetic acceptance control. The cookbook discloses it as "synthetic-acceptance".
      • The NCCL_* network variables in the worker fingerprint (NCCL_IB_HCA, NCCL_SOCKET_IFNAME, NCCL_IB_SL, NCCL_IB_TIMEOUT, NCCL_MNNVL_ENABLE, NCCL_NET_GDR_C2C) and the log level NCCL_DEBUG=WARN. They come from the B200 cluster node environment; the recipe, master config, runner and srt-slurm do not set them. NCCL_CUMEM_ENABLE=1 comes from the same environment and is mirrored in the cookbook.
      • The image's own build metadata: NCCL_VERSION, SGLANG_BUILD_COMMIT, SGLANG_BUILD_URL, SGLANG_IMAGE_TAG and SGLANG_RUST_BUILD_MODE. Any user of the image gets them.
      • The AIPerf client settings (CONC, AGENTIC_WARMUP_GRACE_PERIOD, AIPERF_*, KV_OFFLOADING), the master row's dram-utilization and the srt-slurm health_check timeout.
  • Code quality: against main, the diff only changes this recipe and its master-config row and appends one changelog entry. The changelog entry uses the XXX pr-link placeholder that validate_perf_changelog.py accepts, and check-changelog passed in the pinned run.
    • The master row keeps the srt-recipe-dir / srt-recipe layout and three search-space rows (TP4/EP1, TP4/EP4, DP4 with HiCache behind sglang-router 0.3.2).
    • Admission never exceeds the captured decode graph batch.
      • TP points admit 1 / 2 / 16 / 32 / 48 requests, against a decode graph batch of 1 at C1 and 64 elsewhere. DP4 admits 64 per rank, against a graph batch of 64.
      • Every decode batch in all 11 benchmark logs ran on a CUDA graph. The largest per-rank decode batch was 50, at C256.
    • f4d96b32 removes the overview comments that the bot review flagged under the AGENTS.md comment rules. The remaining comments explain specific lines.
    • The only merge conflict with current main (31387958) is in perf-changelog.yaml, and this PR's change to it is append-only: the first 9,845 lines are byte-identical to the merge base c68d38a5, and one entry is appended. nvidia-master.yaml merges cleanly.
    • fix(launch): request explicit Slurm memory for single-node jobs and fit host pools to measured DRAM #3804 (now on main) caps a 4-GPU single-node step on b200-nscale at its GPU share of node DRAM, about 1,000 GiB. The DP4 points fit well under that cap. Each rank logs 102.03 GB of HiCache host pools and two 24,170 MiB Engram host-table layers, about 570 GiB of host pools across the 4 ranks.
  • No engine patches: the diff adds no patch files, git apply, heredoc rewrites, site-packages edits or wheel installs. The launch path has no setup script. sglang-router comes from the image. The pinned image runs as shipped, so no waiver is needed.
  • append-only: N/A, because the single new changelog entry does not use append-only: true.
  • Pareto: one curve, dsv41flash / agentic-coding / b200_sglang / fp4 / run 38749770474. It was counted with infx.workflows.pareto_coverage, with x = E2EL in seconds and y = total token throughput per GPU.
    • Source: the 11 bmk_agentic_* artifacts of the run (request_metrics.throughput.per_gpu.total_tput_tps and request_metrics.latency.e2el). All 11 points share the same image.
    • P90 E2EL frontier: 9 of 11 points (TP4 C8, TP4·EP4 C16/C24, DP4 C48/C64/C96/C128/C192/C256). TP4 C1 and C4 are dominated by C8.
    • P75 E2EL frontier: 9 of 11 points, the same nine. C1 and C4 are again dominated by C8.
    • Per point (tok/s/GPU, P90 E2EL s, P75 E2EL s): C1 7858.2, 8.000, 4.451; C4 9319.4, 7.282, 3.218; C8 16454.2, 6.484, 2.880; C16 27738.5, 8.914, 3.156; C24 43306.0, 10.082, 3.905; C48 84650.5, 12.079, 6.013; C64 115368.9, 13.323, 6.897; C96 147277.5, 16.504, 8.097; C128 173310.9, 19.374, 9.275; C192 254010.8, 24.909, 10.970; C256 305125.7, 33.046, 14.708.
    • Helper output (python -m infx.workflows.pareto_coverage from inferencex-e2e/ on upstream main 3cf7ca2f, fed the 11 points above; the helper is unchanged at 31387958):
      • dsv41flash/agentic-coding/b200_sglang/fp4/run38749770474/p90_e2el is PASS with measuredPoints: 11, invalidPoints: 0, frontierPoints: 9.
      • .../p75_e2el is PASS with measuredPoints: 11, invalidPoints: 0, frontierPoints: 9.
    • Dashboard: https://inferencex.semianalysis.com/inference?unofficialRun=38749770474
  • NVIDIA overview (advisory): the NVIDIA recipes overview has a DeepSeek-V4.1-Flash row in the Framework Recipes table. Its SGLang cell links to https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1, the cookbook page that documents these B200 points.

Signed: nvpohanh

@github-actions

Copy link
Copy Markdown
Contributor

✅✅✅ Verdict: PASS ✅✅✅

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — nvpohanh is a named owner of inferencex-e2e/configs/nvidia-master.yaml and /inferencex-e2e/benchmarks/*_node/srt-slurm-recipes/**/b200-*/; perf-changelog.yaml is catch-all only.

✅ Check 1 (Passing sweep on in-PR commit): PASS — Run 38749770474 (attempt 1, success) ran on head f4d96b32. All 11 single-node agentic / / canary / jobs and both agentic eval / jobs are success; the skipped fixed-sequence and multi-node lanes have no configs for this agentic-only entry.

✅ Check 2 (Evals pass): PASS — eval_results_all gsm8k em_strict is 0.9727 (TP4/EP4 C24) and 0.9742 (DP4 C256), with n=1319 and infrastructure_success: true. Both clear the 0.90 default (no dsv41flash override) and ran on the PR's lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a@sha256:ddae0e39… digest.

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#44654 is MERGED (2026-10-16T04:45:08Z, fd4b75c6), and the published page is live. Its B200 "Agg TP4", "Agg TP4·EP4" and "Agg DEP4" entries match the effective worker args, env vars, per-point values, sglang-router command and image for all 11 points. Only InferenceX harness settings are excluded, with reasons given in the sign-off.

✅ Check 4 (Reuse command): PASS — /use 38749770474 was posted by nvpohanh (COLLABORATOR).

✅ Check 5 (Latest checklist): PASS — the sign-off contains all 18 current template items (including the sub-item), all checked, with a filled additional detail section.

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

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

✅ Check 8 (No architecture hacks): PASS — the recipe has no --hf-overrides, model-config edits or layer/expert pruning. The changes are parallelism, kernel-backend, scheduling, HiCache and MegaMoE settings that run the same computation.

✅ Check 9 (Chat template): PASS — the AIPerf export for the run (profile_export_aiperf.json) records endpoint type: chat with streaming: true.

✅ Check 10 (No engine patches): PASS — the diff touches only the recipe YAML, the master row and the changelog. There are no patch files, heredoc rewrites, site-packages edits or wheel installs.

✅ Check 11 (Golden simulated AL): PASS — the C48 worker env logs SGLANG_SIMULATE_ACC_LEN=3.51, METHOD=match-expected and TOKEN_MODE=real-draft-token with SGLANG_DEFAULT_THINKING=1, injected by synthetic_acceptance.py. This matches dsv41flash_dspark.yaml thinking_on, block 5 = 3.51.

➖ Check 12 (Append-only): N/A — the single new changelog entry does not set append-only: true.

✅ Check 13 (Draft precision): PASS — the draft is the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash, and the recipe sets no draft quantization, dtype or path override. At pinned SGLang 684fea8a, deepseek_v4_dspark.py builds the draft with the target quant config, wo_a_fp8=False, plus the default FP8→BF16 wo_a dequant (the baseline). SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE defaults to EnvBool(False) in environ.py:1057 and is absent from the recipe, master row and logged C48 worker env.

✅ Check 14 (Pareto coverage): PASS — one curve, dsv41flash/agentic-coding/b200_sglang/fp4/run38749770474, built from 11 bmk_agentic_* artifacts (per_gpu.total_tput_tps vs E2EL, one image). pareto_coverage gives 9 frontier points at P90 and 9 at P75 (TP4 C1 and C4 are dominated by C8).

✅ Check 15 (PR description): PASS — the body's claims match the pinned code and run: image/digest, the 11 points across TP4/EP1, TP4/EP4 and DP4, MegaMoE, flashinfer_mxfp4, trtllm attention, HiCache kv-offloading: dram, sglang-router 0.3.2, and DSpark block size 5.

✅ Check 16 (NVIDIA overview): PASS — the NVIDIA overview Framework Recipes table has a DeepSeek-V4.1-Flash row whose SGLang cell links to the V4_1 cookbook page.

➖ Check 17 (Dynamo metrics): N/A — this is a direct framework: sglang deployment with no Dynamo or TRT-LLM workers.

Assessed commit: f4d96b32737490edcb2249533f4fc8be33e9b8ae.

…glang-agentx-1014

Resolve the inferencex-e2e/perf-changelog.yaml append conflict by keeping
main's entries and re-appending this PR's entry. [skip-sweep]

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nvpohanh nvpohanh removed the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Oct 16, 2026
@nvpohanh
nvpohanh merged commit c902ee1 into main Oct 16, 2026
25 checks passed
@nvpohanh
nvpohanh deleted the dsv41flash-fp4-b200-sglang-agentx-1014 branch October 16, 2026 06:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants