Skip to content

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

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

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

Conversation

@shyeh25

@shyeh25 shyeh25 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

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

  • repin the SGLang image to lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a, pinned by multiarch digest;
  • replace the TP4/EP4 C1–C16 and DP4 C32–C192 points with ten points: TP4/EP1 at C1, C4, C8 and C32, TP4/EP4 at C16, and aggregate TP4/EP4 with DP attention (DP4) at C64, C96, C128, C160 and C256;
  • use the validated per-point prefill-decode interval, schedule policy, attention backend, prefill chunking, admission, memory and SWA prefix-tail settings;
  • on the DP4 points, use MegaMoE (C256 also with 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
  • If python -m infx.matrix.changed --base origin/main lists affected config keys, I have appended one new entry covering them to the physical end of inferencex-e2e/perf-changelog.yaml; if it lists none, I have added none. I have not edited historical entries
  • If this PR appends an inferencex-e2e/perf-changelog.yaml entry, 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 GB200 SGLang AgentX 聚合曲线(dsv41flash-fp4-gb200-sglang-agentic-dspark):

  • 将 SGLang 镜像更新至 lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a,并以 multiarch digest 固定;
  • 以十个点取代原本的 TP4/EP4 C1–C16 与 DP4 C32–C192:TP4/EP1 的 C1、C4、C8、C32,TP4/EP4 的 C16,以及启用 DP attention 的聚合式 TP4/EP4(DP4)的 C64、C96、C128、C160、C256;
  • 使用已验证的逐点 prefill-decode interval、调度策略、attention 后端、prefill chunk、运行请求上限、显存与 SWA 前缀尾部设置;
  • DP4 测试点使用 MegaMoE(C256 另用 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

Move dsv41flash-fp4-gb200-sglang-agentic-dspark to
lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a (multiarch digest
pinned) and replace the eight points with ten tuned points: TP4/EP1 at
C1/C4/C8/C32, TP4/EP4 at C16, and aggregated TP4/EP4 with DP attention
behind sglang-router at C64/C96/C128/C160/C256 using the MegaMoE
all-to-all backend and HiCache host-DRAM KV offload. The recipe carries
the per-point schedule policy, attention backend, prefill-decode interval,
prefill chunking, admission, memory and SWA prefix-tail settings.

将 dsv41flash-fp4-gb200-sglang-agentic-dspark 更新为
lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a(固定 multiarch
digest),并以十个调优点取代原本的八个点:TP4/EP1 的 C1/C4/C8/C32、
TP4/EP4 的 C16,以及在 sglang-router 之后启用 DP attention 的聚合式
TP4/EP4 的 C64/C96/C128/C160/C256(使用 MegaMoE all-to-all 后端与
HiCache 主机 DRAM KV offload)。recipe 包含各点的调度策略、attention 后端、prefill-decode interval、
prefill chunk、运行请求上限、显存与 SWA 前缀尾部设置。

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 nit, I checked the candidate concern that TP4/EP4 C16 never gets a GSM8K accuracy eval — per infx/evals/EVALS.md, agentic eval groups are split by model/runner/framework/precision/spec-decoding/dp-attn/image but explicitly not by TP/EP, so C16 (EP4) shares a group with the EP1 entries and the eval correctly lands on the group's highest concurrency (C32); this is documented behavior, not a bug.

Extended reasoning...

Config-only change (image bump + search-space retune) across nvidia-master.yaml, agentic.yaml, and perf-changelog.yaml for one SGLang benchmark entry; no auth/crypto/permissions surface. The one open item is the already-reported comment-style nit (restating dict values); separately verified against EVALS.md that the per-point eval-coverage concern raised by the ruled-out candidate is expected behavior given how eval groups are keyed, not a correctness bug.

Comment on lines +8605 to +8610
# TP4 with tensor-parallel experts (EP1) at C1-C8 and C32; the KV cache stays GPU-resident.
- { tp: 4, ep: 1, kv-offloading: none, spec-decoding: mtp, conc-list: [1, 4, 8, 32], srt-recipe: agentic.yaml }
# TP4/EP4 at C16; the KV cache stays GPU-resident.
- { tp: 4, ep: 4, kv-offloading: none, spec-decoding: mtp, conc-list: [16], srt-recipe: agentic.yaml }
# TP4/EP4 with DP attention and MegaMoE behind sglang-router; HiCache extends the
# prefix cache into host DRAM.

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): the three new per-entry comments restate the dict's own tp/ep/conc-list values ("TP4 with tensor-parallel experts (EP1) at C1-C8 and C32", "TP4/EP4 at C16", "TP4/EP4 with DP attention and MegaMoE behind sglang-router") instead of giving a succinct, line-specific technical reason. sweep:^\s*# TP4 AGENTS.md's "Code comments (mandatory)" section bans restating the code and bans header/overview-style comments above a config block. Fix: keep only the non-obvious technical justification (e.g. why the KV cache stays GPU-resident, or what HiCache's host-DRAM extension buys), and drop the topology/concurrency recap that duplicates the adjacent { tp:, ep:, conc-list: } literal.

Why this was flagged

inferencex-e2e/configs/nvidia-master.yaml:8605, 8607, and 8609-8610 each add a comment above a search-space entry that repeats values already in the same line (tp, ep, conc-list), which AGENTS.md:64-67 ("No header comments", "Do not restate the code") forbids for every file including configs. The diff's own header-comment shortening elsewhere shows the author is aware of this rule, yet these three new comments reintroduce the same overview-style restatement at per-entry scope. A reviewer or coding agent using AGENTS.md as the checklist gets comments that drift out of sync with the dict they restate (as already happened: override_tp4_c16 below was not renamed to match its sibling's new override_tp4ep1_c* naming) instead of a single durable technical note.

Verification: nit: style/convention issue, nothing breaks. The three new comments at nvidia-master.yaml:8605, 8607, and 8609-8610 each restate values already present on the immediately following search-space line, which AGENTS.md:61-67 ("No header comments... above a recipe, override, or section" / "Do not restate the code.") forbids. Each comment does carry one legitimately technical clause, so the fix is to keep only those clauses and drop the topology/concurrency restatement.

…ntry

Remove the per-entry comments that restated the topology and concurrency
of each search-space line. The configuration is unchanged.

删除 GB200 SGLang 条目中逐行复述拓扑与并发的 search-space 注释,配置不变。

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

[by Claude Code] The SGLang cookbook integration of this PR's AgentX config (dsv41flash-fp4-gb200-sglang-agentic-dspark) will happen in sgl-project/sglang#44654, 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 (b260d0e4e) as "in progress". It switches to the measured run at the next cookbook sync after a run is pinned or this PR merges.

@nvpohanh

Copy link
Copy Markdown
Collaborator

[by Claude Code] sgl-project/sglang#44654 has been merged. This PR's AgentX config (dsv41flash-fp4-gb200-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 (b260d0e4e) as "in progress". It switches to the measured run at the next cookbook sync after a run is pinned or this PR merges.

@nvpohanh

Copy link
Copy Markdown
Collaborator

/use 38749229680

@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh staged run 38749229680.

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

@nvpohanh

nvpohanh commented Oct 16, 2026 •

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:

  • Recipe publication (merged): every point in this PR is documented in the SGLang cookbook by sgl-project/sglang#44654, which is MERGED (mergedAt: 2026-10-16T04:45:08Z, merge commit fd4b75c6960002d341cbb7bb127de7631770c87a). It is the latest commit touching the DeepSeek-V4.1 AgentX data on SGLang main (a2981ab8).
    • Published page: https://docs.sglang.io/cookbook/autoregressive/DeepSeek/DeepSeek-V4_1#agentic-long-context-deployment (hardware GB200, checkpoint deepseek-ai/DeepSeek-V4.1-Flash, image 684fea8a, provenance PR 4112 at b260d0e4). The NVIDIA overview links the same page.
    • Data: docs/src/snippets/agentx/deepseek-ai/deepseek-v4_1.jsx has three GB200 deployments from dsv41flash-fp4-gb200-sglang-agentic-dspark: "Agg TP4" (C1/C4/C8/C32), "Agg TP4·EP4" (C16) and "Agg DEP4" (C64/C96/C128/C160/C256, with HiCache and sglang-router).
    • Image: lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a@sha256:ddae0e399d3d94f7827f16183301cf8dac4cf0eae0ef25590b7dac5881d713d8. sglang-router 0.3.2 and fastokens==0.3.4 ship in the image: they appear in the worker fingerprint and the container package inventory, and nothing is installed at launch. The cookbook has no install step.
    • Worker, all 10 points: python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V4.1-Flash --served-model-name deepseek-ai/DeepSeek-V4.1-Flash --trust-remote-code --tensor-parallel-size 4 --speculative-algorithm DSPARK --speculative-dspark-block-size 5 --reasoning-parser auto --tool-call-parser auto --tokenizer-backend fastokens --watchdog-timeout 3600, plus the per-point settings below.
      • Worker environment: NCCL_CUMEM_ENABLE=1, 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.
      • NCCL_CUMEM_ENABLE=1 is not set by the recipe. The GB200-NV cluster exports it into every worker container (worker fingerprint of every point), so the cookbook carries it.
      • "Agg TP4", C1 / C4 / C8 / C32: --expert-parallel-size 1 --chunked-prefill-size 8192 and SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=1.
        • C1: --cuda-graph-max-bs-decode 1 --max-running-requests 1 --mem-fraction-static 0.88 --prefill-decode-interval 16 --swa-prefix-tails 128.
        • C4: --cuda-graph-max-bs-decode 64 --max-running-requests 8 --mem-fraction-static 0.76 --prefill-decode-interval 64 --schedule-policy shortest-prefill-first --swa-prefix-tails 128.
        • C8: --cuda-graph-backend-prefill breakable --enable-decoder-swa-bounded-replay --cuda-graph-max-bs-decode 64 --max-running-requests 16 --mem-fraction-static 0.76 --prefill-decode-interval 96 --schedule-policy shortest-prefill-first --swa-prefix-tails 256.
        • C32: --dsv4-attn-backend trtllm --cuda-graph-max-bs-decode 64 --max-running-requests 64 --mem-fraction-static 0.76 --prefill-decode-interval 80 --schedule-policy shortest-prefill-first --swa-prefix-tails 1024.
      • "Agg TP4·EP4", C16: --expert-parallel-size 4 --chunked-prefill-size 8192 --cuda-graph-max-bs-decode 64 --max-running-requests 32 --mem-fraction-static 0.76 --prefill-decode-interval 96 --schedule-policy shortest-prefill-first --swa-prefix-tails 512, without SGLANG_OPT_DSV41_MEGA_MHC_PREFILL.
      • "Agg DEP4", C64 / C96 / C128 / C160 / C256:
        • Arguments: --expert-parallel-size 4 --data-parallel-size 4 --enable-dp-attention --enable-dp-attention-local-control-broadcast --enable-dp-lm-head --enable-symm-mem --moe-a2a-backend megamoe --dsv4-attn-backend trtllm --chunked-prefill-size 65536 --cuda-graph-backend-prefill disabled --cuda-graph-max-bs-decode 64 --max-running-requests 384 --mem-fraction-static 0.76 --schedule-policy shortest-prefill-first --swa-prefix-tails 3072 --load-balance-method total_requests --tokenizer-worker-num 8 --enable-hierarchical-cache --hicache-ratio 2 --hicache-write-policy write_back --hicache-io-backend direct --hicache-mem-layout page_first_direct.
        • Environment: SGLANG_DP_USE_GATHERV=1, SGLANG_OPT_DEEPGEMM_MEGA_MOE_NUM_MAX_TOKENS_PER_RANK=16384, SGLANG_OPT_DSV41_MEGA_MHC_PREFILL=0, SGLANG_RAGGED_VERIFY_MODE=static.
        • --prefill-decode-interval is 72 / 56 / 48 / 40 / 24. C256 adds --moe-runner-backend flashinfer_mxfp4.
      • Router, "Agg DEP4": python3 -m 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 --worker-urls <worker>.
    • I resolved the cookbook commands for each of the 10 points. I diffed them against the logged worker command, the logged Env: line, the full worker-container environment (fingerprint) and the logged sglang-router command in run 38749229680. Every recipe argument and recipe environment variable matches, and the router arguments match exactly. The only differences are the InferenceX-only settings below and placeholders (ports, IP addresses, worker URL).
      • The pinned image auto-resolves backends the recipe does not set: attention_backend=dsv4 everywhere, dsv4_attn_backend=auto at C1-C16, and moe_runner_backend=flashinfer_mxfp4 on the TP points ("Use flashinfer_mxfp4 as MoE runner backend for DeepseekV4ForCausalLM"). The KV cache is fp8_e4m3, the image default for this checkpoint.
      • Under DP attention, SGLang splits --max-running-requests and --chunked-prefill-size across the 4 attention-DP ranks. The logs show 96 and 16384 per rank. The recipe and the cookbook pass the same CLI values.
    • Excluded as InferenceX-only:
      • --enable-metrics. This is the Prometheus export that AIPerf scrapes for result collection (AIPERF_REQUIRED_SERVER_METRIC_PREFIX=sglang:); it does not affect scheduling or kernels.
      • --host, --port, --nccl-port, the router's --worker-urls, --prometheus-port and --prometheus-host, CUDA_VISIBLE_DEVICES=0,1,2,3 and HEAD_NODE_IP. These are srt-slurm process placement and metrics plumbing.
      • PYTHONUNBUFFERED, PYTHONNOUSERSITE, SGLANG_CUDA_COREDUMP_BEFORE_CRASH=0 and SGLANG_PYSPY_DUMP_BEFORE_CRASH=0. These are log buffering, Python path isolation and crash-dump toggles.
      • SGLANG_SIMULATE_ACC_*, the synthetic acceptance control. The cookbook discloses it (synthetic-acceptance) with the golden AL of 3.51.
      • The rest of the GB200-NV container environment in the worker fingerprint. NCCL_IB_*, NCCL_SOCKET_IFNAME, NCCL_MNNVL_ENABLE, NCCL_NET_GDR_C2C, NVSHMEM_*, UCX_NET_DEVICES and OMPI_MCA_* are the cluster's NIC names and fabric wiring, which a GB200 NVL72 operator sets for their own fabric. NCCL_DEBUG and HF_* are a log level and cache paths. None of them is a serving setting.
      • The AIPerf client settings (AGENTIC_WARMUP_GRACE_PERIOD, AIPERF_*), the DRAM-budget accounting (KV_OFFLOADING, TOTAL_CPU_DRAM_GB), the srt-slurm health_check and observability blocks, and Slurm settings. The serving side of KV offload is the HiCache flags above, which the cookbook documents.
  • PR validation: Run Sweep 38749229680 ran on commit b260d0e4ef31e76bacba68cce9a8107ba4922c72 (pull_request, full-sweep-fail-fast), which is still in this PR. It completed with success on attempt 2. The current head 0be0fe0b merges main on top of it (see Code quality).
    • It is pinned with /use 38749229680 and staged (staged dashboard).
    • Its bmk_agentic_*, results_bmk, eval_results_all and server-log artifacts are unexpired. Attempt 2's expire 2027-01-14; C1's attempt-1 artifacts expire 2027-01-13.
    • All 10 benchmark jobs succeeded: TP4 C1 (canary), C4, C8 and C32; TP4/EP4 C16; TP4/EP4 with DP4 attention C64, C96, C128, C160 and C256. Every point recorded 0 error-dropped requests.
    • Both agentic eval / jobs succeeded.
    • Attempt 1 measured only the C1 canary (14:20-15:53Z). The run was then cancelled at 16:00Z while the other 9 benchmark servers and both eval servers were still loading ("The operation was canceled."), so nothing else was measured. Attempt 2 reran only those cancelled jobs. Its C1 canary entry is the carried-over attempt-1 job (same runner and timestamps), and its artifacts are attempt 1's.
    • The skipped jobs are the empty fixed-sequence and multi-node lanes.
  • Evals: gsm8k em_strict, both n=1319 with infrastructure_success: true, from eval_results_all:
    • 0.9727 at TP4 C32 (job).
    • 0.9750 at TP4/EP4/DP4 C256 with HiCache (job).
    • Both clear the 0.90 default in infx/evals/thresholds.yaml. The lookup is by exact model prefix and has no dsv41flash override. They also clear the 0.91 dsv4 value.
    • Both ran on the same image digest as the config with real DSpark verification. The eval server environment has no SGLANG_SIMULATE_ACC_*, and the measured mean accept length is 3.94 (C32) and 4.15 (C256).
  • Image: upstream lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a.
    • Docker Hub index sha256:ddae0e399d3d94f7827f16183301cf8dac4cf0eae0ef25590b7dac5881d713d8: arm64 sha256:2b9d5dd760cbaf6a521b1c56d2896dfbb5c6ed76521ac3df5e84ba6872362be2, amd64 sha256:561794b60719bc05d31d8ec45e3b448bf7e112ec16e1b0c5b4bcb0511064431a.
    • SGLang 684fea8af3b11a5b51ec9966c02959a32ad3421c (SGLANG_BUILD_COMMIT in the logged environment; the logged package is sglang 0.0.0.dev1+g684fea8af).
    • The config is framework: sglang, an open-source engine entry, so the engine-ordering item is satisfied by this submission itself.
  • Chat template: AgentX replay runs agentx profile, and the AIPerf export records endpoint type chat with streaming.
    • On every point, the only inference route in the worker logs is POST /v1/chat/completions (353 at C1 to 35,940 at C256). There is no /v1/completions traffic.
    • The server applies the checkpoint's chat template (chat_template=None, no override). It logs "Auto-detected --reasoning-parser as 'deepseek-v41' from chat template" and the deepseekv41 tool-call parser.
    • The run's THINKING_MODE is thinking_on, with SGLANG_DEFAULT_THINKING=1 and reasoning effort high.
  • Draft precision: the served draft is the DSpark head bundled in deepseek-ai/DeepSeek-V4.1-Flash at revision 5254448103b6254fc646dacbca1cbbf20e9216c1. This is the current Hugging Face main (last modified 2026-10-12) and the snapshot in every point's logs.
    • The head is mtp.0-mtp.2: num_nextn_predict_layers: 3, dspark_block_size: 5, 128 routed experts per stage, and 2,401 tensors in shards 44-46.
    • The logs show "DSpark draft weights are bundled in the target checkpoint; defaulting --speculative-draft-model-path to --model-path" and type=DeepseekV4ForCausalLMDSpark, quant=fp8.
    • Shipped (safetensors headers):
      • The attention projections (wq_a, wq_b, wkv, wo_a, wo_b), the shared experts and main_proj are F8_E4M3 with F8_E8M0 block scales.
      • The 384 routed experts are packed FP4 (I8 storage) with F8_E8M0 group-32 scales, which is MXFP4.
      • The norms, the gate weight, markov_head and confidence_head are BF16. attn_sink, the gate bias and hc_* are F32.
      • config.json has quant_method: fp8, dynamic activations, weight_block_size: [32, 32], scale_fmt: ue8m0 and expert_dtype: fp4.
    • Pinned image's default handling: --speculative-draft-model-quantization is not set, so the draft inherits the target's checkpoint-detected quantization (serving_hook.py#L656-L668). The logs show quantization=None, speculative_draft_model_quantization=None and _speculative_draft_quantization_explicitly_set=False.
      • wo_a: the image dequantizes the shipped FP8 wo_a to BF16 at load (deepseek_v4_dspark.py#L108 wo_a_fp8=False, #L1014 _dequant_fp8_wo_a_streaming). The logs show "Finished streaming dequant fp8 wo_a". This is the default conversion that the verifier treats as the baseline.
      • Routed experts on the TP points: the draft's experts stay MXFP4 on the image's auto-selected flashinfer_mxfp4 runner (C1: "Shuffling FP4 expert weights for TRT-LLM MxFP4 kernel (layer: stages.0/1/2.mlp.experts)"). That runner uses MXFP8 activations on SM100 (mxfp4.py#L414-L422).
      • Routed experts on the DP4 points (MegaMoE): enable_w4a4_mxfp4_megamoe=False, and speculative_enable_w4a4_mxfp4_megamoe is unset on every point. The draft's MegaMoE MMA type is therefore fp8xfp4, FP8 activations against the unrequantized MXFP4 weights (mega_moe.py#L56-L60). The W4A4 mxf4xmxf4 path is not used.
      • The draft's per-rank weight memory at EP4 (2.47 GB) matches MXFP4 routed experts.
      • The Markov head stays BF16 as shipped (SGLANG_DSPARK_OPT_MARKOV_W2_BF16 defaults to EnvBool(True), environ.py#L542).
    • Effective: as shipped.
      • FP8 attention, shared experts and main_proj; BF16 wo_a through the default conversion; MXFP4 routed experts with FP8/MXFP8 activations; BF16 heads.
      • The logged server args of all 10 points and both evals show dtype=auto, json_model_override_args='{}' and speculative_draft_kv_cache_dtype=None. The draft KV follows the target's default fp8_e4m3.
    • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is absent from the recipe, the shared launcher, every point's worker environment and the logs.
  • Golden AL: infx/golden_al_distribution/dsv41flash_dspark.yaml gives 3.51 for thinking_on with 5 speculative tokens, matching --speculative-dspark-block-size 5.
    • Every benchmark point logged SGLANG_SIMULATE_ACC_LEN=3.51, SGLANG_SIMULATE_ACC_METHOD=match-expected and SGLANG_SIMULATE_ACC_TOKEN_MODE=real-draft-token, with THINKING_MODE: thinking_on. The values are injected by infx/srt_slurm/synthetic_acceptance.py from the golden curve ("Applied override: --set roles.agg.env.SGLANG_SIMULATE_ACC_LEN=3.51"), not set in the recipe.
    • The mean accept len in the decode logs is 3.509 to 3.512 on every point.
  • MODELS.md: dsv41flash agentic coding is active (SGLang DSpark arms per SKU).
    • HiCache host DRAM is within the KV-offload policy. GB200 NVL72 is in the standardized-capacity class, and the DP4 points use 4 of the tray's 4 GPUs.
    • The GB200-NV runner measures 860,160 MiB (901.9 GB) available, and the run's offload budget is 721 GB (dram-utilization: 0.80).
    • The logged HiCache host pools total 430.0-444.4 GB per node across C64-C256. The TP points do not offload.
  • No architecture hacks: there is no --hf-overrides, json_model_override_args is '{}', and no model files are edited. All 3 DSpark stages run, and the target runs its native 40 layers.
  • Dynamo TRT-LLM metrics: N/A. This config is framework: sglang. It serves through sglang.launch_server and, at DP4, sglang_router, with no Dynamo or TRT-LLM process in the serving path. enable-metrics is on.
  • Code quality:
    • The diff retunes this recipe's overrides, bumps the image and replaces the search-space rows in the master config, and appends one changelog entry (11 added lines, nothing changed or removed). check-changelog passed.
    • The head 0be0fe0b323f33a41bb0b8530c0f39e0e8697295 merges main (31387958) into the measured commit b260d0e4 with a merge commit, so the pinned commit stays in the PR. The PR now merges cleanly with main.
      • Only perf-changelog.yaml conflicted. It was resolved with infx.workflows.prepare_perf_changelog_merge resolve-conflict: main's bytes are unchanged and this PR's single entry is re-appended at the end, with pr-link filled in. validate_perf_changelog passes against main.
      • Between b260d0e4 and the head, the recipe (dsv41flash/sglang/gb200-fp4-mtp/agentic.yaml) and the dsv41flash-fp4-gb200-sglang-agentic-dspark master-config entry are byte-identical. The PR diff against main is still the same three files.
      • The harness changes merged from main do not change this config's serving settings. fix(launch): request explicit Slurm memory for single-node jobs and fit host pools to measured DRAM #3804 adds a Slurm memory request sized to the GPU share of measured DRAM; the GB200-NV value (860,160 MiB) is unchanged, so the 721 GB offload budget is unchanged. GB200-NV now stages single-node models but has no DeepSeek-V4.1-Flash entry, so it still serves hf:deepseek-ai/DeepSeek-V4.1-Flash. synthetic_acceptance.py only adds DFlash, and dsv41flash_dspark.yaml is unchanged. The AgentX client bumps (1.0.10/1.0.11) are client-only.
      • The head's Run Sweep 38857353239 passed check-changelog. Its reuse-sweep-gate returned skip-pr-sweep: true from the /use authorization, and it ran no benchmark or eval. The full-sweep-fail-fast label was removed before that push and the merge commit carries [skip-sweep], so pushes after /use cannot start a fresh sweep; reuse does not require the label.
    • The bot review's comment nit was addressed in b260d0e4.
    • Admission and graph batch cover the observed per-rank decode batches:
      • TP points: peak running requests are 1/6/5/11 at C1/C4/C8/C32 and 9 at C16, against max-running-requests of 1/8/16/64 and 32.
      • DP4 points: per-rank peaks are 13/19/28/30/47 at C64/C96/C128/C160/C256, against 96 per rank and a decode graph batch of 64.
  • No engine patches: the diff adds no patch files, git apply, heredoc rewrites, site-packages edits, monkey-patching or forked engine wheels. No serving-stack package is installed on top of the image; only the AgentX/AIPerf client gets its own venv.
    • The runner's runners/srt-slurm/patches/ holds only srt-slurm harness backports (573-participating-gpus.patch for power telemetry and 602-vllm-sidecar-reasoning-parser.patch for vLLM sidecars). They do not touch SGLang.
    • No waiver is needed.
  • append-only: N/A, because the single new changelog entry does not use append-only: true (append-only: false in the run's changelog metadata).
  • Pareto: one curve, dsv41flash / agentic-coding / gb200_sglang / fp4 / run 38749229680, counted with infx.workflows.pareto_coverage from upstream main (x = E2EL in seconds, y = total token throughput per GPU, 4 GPUs per point).
    • Source: the 10 bmk_agentic_* artifacts of the run (request_metrics.throughput.per_gpu.total_tput_tps and request_metrics.latency.e2el). Every point uses the same image and the measured commit.
    • P90 E2EL frontier: 8 of 10 points (C8, C16, C32, C64, C96, C128, C160, C256). C1 and C4 are dominated by C8.
    • P75 E2EL frontier: 8 of 10 points, the same 8. C1 and C4 are dominated by C8.
    • Per point (tok/s/GPU, P90 E2EL s, P75 E2EL s): C1 7859.5, 8.263, 4.619; C4 9838.4, 6.646, 2.992; C8 16548.5, 6.102, 2.819; C16 28551.0, 7.448, 2.889; C32 56581.6, 11.708, 4.770; C64 116371.8, 13.473, 6.776; C96 150194.7, 15.939, 7.791; C128 177416.9, 18.665, 8.886; C160 217653.0, 21.931, 9.780; C256 321460.0, 30.470, 13.243.
    • Helper output: dsv41flash/agentic-coding/gb200_sglang/fp4/run38749229680/p90_e2el is PASS with measuredPoints: 10, invalidPoints: 0, frontierPoints: 8; .../p75_e2el is PASS with measuredPoints: 10, invalidPoints: 0, frontierPoints: 8.
    • Dashboard: https://inferencex.semianalysis.com/inference?unofficialRun=38749229680
  • NVIDIA overview (advisory): the NVIDIA recipes overview Framework Recipes table lists DeepSeek-V4.1-Flash with SGLang ✅, linking to the same DeepSeek-V4.1 cookbook page.

Signed: nvpohanh

@github-actions

Copy link
Copy Markdown
Contributor

✅✅✅ Verdict: PASS ✅✅✅

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — @nvpohanh is a listed owner of both specific paths (inferencex-e2e/configs/nvidia-master.yaml, srt-slurm-recipes/**/gb200-*/); perf-changelog.yaml falls only under the catch-all.

✅ Check 1 (Passing sweep + evals on in-PR commit): PASS — Run 38749229680 (attempt 2, success) ran on head b260d0e4, which is in the PR. All 10 agentic / jobs and both agentic eval / jobs are success; single-node */ and eval / are skipped only because this AgentX-only PR has no fixed-sequence configs.

✅ Check 2 (Eval accuracy): PASS — eval_results_all gsm8k em_strict: 0.9727 (TP4 C32) and 0.9750 (DEP4 C256), n=1319, infrastructure_success: true. Both clear the 0.90 default (no dsv41flash override). The eval jobs used the config's image digest ddae0e39….

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#44654 is MERGED (2026-10-16T04:45:08Z, fd4b75c6); its deepseek-v4_1.jsx GB200 cells "Agg TP4" / "Agg TP4·EP4" / "Agg DEP4" reproduce every point's worker args, env, image and the sglang-router command, provenanced to b260d0e4. The page is live on docs.sglang.io; the exclusions (metrics, ports, crash-dump, synthetic acceptance) are justified.

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

✅ Check 5 (Latest checklist template): PASS — every item in the current PR_REVIEW_CHECKLIST.md template is present and checked.

✅ Check 6 (Upstream image / engine ordering): PASS — framework: sglang on cluster:gb200-nv uses upstream lmsysorg/sglang:nightly-dev-cu13-20261014-684fea8a@sha256:ddae0e39…. This is an open-source engine entry, so the ordering rule does not apply.

✅ Check 7 (No deprecated models/scenarios): PASS — on 2026-10-16, dsv41flash Agentic coding is active in MODELS.md (SGLang DSpark arms per SKU).

✅ Check 8 (No architecture hacks): PASS — the effective recipe has no --hf-overrides, json-model-override-args or model-file edits.

✅ Check 9 (Spec-decode chat template): PASS — AgentX replay drives /v1/chat/completions with the checkpoint's chat template (USE_CHAT_TEMPLATE=true for speculative configs).

✅ Check 10 (No engine patches): PASS — the diff only changes YAML recipe/config/changelog; it adds no patches, heredoc rewrites, or engine wheel installs.

✅ Check 11 (Agentic golden AL): PASS — synthetic_acceptance.py injects SGLANG_SIMULATE_ACC_LEN=3.51 with match-expected / real-draft-token from dsv41flash_dspark.yaml. The golden value for thinking_on, 5 tokens, is 3.51, matching --speculative-dspark-block-size 5.

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

✅ Check 13 (Draft precision): PASS — the bundled DSpark head of deepseek-ai/DeepSeek-V4.1-Flash loads with no draft quantization, dtype or KV overrides. The pinned image's defaults apply: FP8 wo_a dequantized to BF16 and MXFP4 experts. SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is unset in the recipe and launchers and is EnvBool(False) at environ.py#L1057. SGLANG_GLM_NEXTN_MOE_PTPC is also off (L1060).

✅ Check 14 (Pareto coverage): PASS — curve dsv41flash/agentic-coding/gb200_sglang/fp4/run38749229680, from the 10 bmk_agentic_* artifacts (same image, head SHA). pareto_coverage reports p90_e2el 8/10 frontier points and p75_e2el 8/10 (C1 and C4 are dominated).

✅ Check 15 (PR description): PASS — the body's image, 10-point topology (TP4/EP1 C1/4/8/32, TP4/EP4 C16, DEP4+HiCache C64–C256), router 0.3.2 and C256 flashinfer_mxfp4 claims match the pinned recipe and master config.

✅ Check 16 (NVIDIA overview): PASS — the NVIDIA overview Framework Recipes table lists DeepSeek-V4.1-Flash with an SGLang ✅ linking to the DeepSeek-V4.1 cookbook page.

➖ Check 17 (Dynamo metrics): N/A — framework: sglang serves through sglang.launch_server and sglang-router, with no Dynamo or TRT-LLM in the path.

Assessed commit: b260d0e4ef31e76bacba68cce9a8107ba4922c72.

…agg-sglang-agentx-1014

Resolve the inferencex-e2e/perf-changelog.yaml conflict with
infx.workflows.prepare_perf_changelog_merge resolve-conflict: main's bytes
are kept unchanged and this PR's single entry is re-appended at the end,
with the PR link filled in.

[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 aec75b7 into main Oct 16, 2026
25 checks passed
@nvpohanh
nvpohanh deleted the dsv41flash-fp4-gb200-agg-sglang-agentx-1014 branch October 16, 2026 05:49
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