Skip to content

Add B200 DeepSeek V4.1 Flash AgentX / 新增 B200 配方 - #2960

Merged
Oseltamivir merged 6 commits into
mainfrom
config/dsv41flash-b200-agentx
Sep 11, 2026
Merged

Add B200 DeepSeek V4.1 Flash AgentX / 新增 B200 配方#2960
Oseltamivir merged 6 commits into
mainfrom
config/dsv41flash-b200-agentx

Conversation

@Oseltamivir

@Oseltamivir Oseltamivir commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Add B200 TP4 DSv4.1 Flash AgentX at concurrency 1–128, using the full semianalysis_cc_traces_weka_062126 corpus. Five-token DSpark throughput uses golden AL 3.51 (thinking on), with adaptive verification disabled; accuracy evals retain real block verification. Engram stays in host DRAM through UVA; KV stays on GPU. Validation: Bash, exact-key matrix, changelog, launcher/eval tests, and both serving-mode command checks pass. GPU validation pending.

新增 B200 TP4 DSv4.1 Flash AgentX,并发 1–128,使用完整 semianalysis_cc_traces_weka_062126 语料。五 token DSpark 吞吐测试采用 thinking 开启时的黄金 AL 3.51,并关闭自适应验证;准确率 eval 保留真实块验证。Engram 通过 UVA 访问主机 DRAM,KV 保留在 GPU。验证:Bash、精确配置矩阵、changelog、launcher/eval 测试及两种服务模式的命令检查通过;GPU 验证待完成。


Note

Medium Risk
Changes B200 Slurm container mounts and model resolution for a new benchmark key; scoped to dsv41flash/vLLM but affects how jobs launch on shared cluster infrastructure.

Overview
Adds dsv41flash-fp4-b200-vllm-agentic-dspark to the master perf matrix: single-node B200 (Nscale), vLLM deepseekv41-flash-0909, TP4, MTP spec decoding, and agentic-coding sweeps through concurrency 1–128 with Engram on UVA host DRAM and GPU-resident KV.

Introduces a thin B200 bench entry (dsv41flash_fp4_b200_vllm_mtp.sh) that delegates to the existing DSv4.1 Flash MTP script, and documents the recipe in perf-changelog.yaml.

launch_b200-nscale-compat.sh is extended so single-node dsv41flash + fp4 + vLLM keeps the HuggingFace model ID as MODEL_PATH, stages weights via a shared HF_HUB_CACHE mount (no model-ID bind mount), and uses /ix workspace mounts like other DeepSeek v4 images. A new test_dsv41flash_b200.py asserts that srun gets the expected cache and mount wiring.

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

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

4 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

Comment thread utils/evals/test_run_eval_dispatch.py Fixed
Comment thread utils/evals/test_run_eval_dispatch.py Fixed

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

Beyond the inline finding, I looked at two other candidates flagged during review and ruled them out as non-blocking: the new single-node dsv41flash HF-cache mkdir -p at runners/launch_b200-nscale-compat.sh:23 skips the chmod 777 that the existing multinode agentic path applies to the same shared directory — low risk since that path is already created with permissive perms by the pre-existing multinode flow; and the check-then-bind pattern in select_available_server_port (benchmarks/benchmark_lib.sh:44) leaves a narrow TOCTOU window between probing and the server's actual bind, which is unlikely to matter for these single-tenant benchmark runs.

Extended reasoning...

This run reported one CONFIRMED, CI-breaking finding (perf-changelog.yaml:7079 using pr-link: TBD, which fails the changelog validator's placeholder check), so approval is not appropriate and I am not claiming "no bugs found." Per the narrow exception for findings-present runs, I additionally verified two of the three previously ruled-out candidates directly against the diff: (1) the dsv41flash single-node branch in runners/launch_b200-nscale-compat.sh creates the shared HF-hub-cache directory with plain mkdir -p (line 23) while the pre-existing multinode agentic branch (lines 319-321) does mkdir -p followed by chmod 777 ... || true for the same shared path — since the path is long-lived and shared across CI runs, and multinode agentic runs against dsv41flash-adjacent models presumably already created it with permissive perms, this is unlikely to break the new single-node path in practice; and (2) select_available_server_port in benchmarks/benchmark_lib.sh probes and immediately closes the socket rather than holding it until the server binds, a real but narrow TOCTOU race that is low-impact for exclusive single-tenant Slurm benchmark jobs. Both are worth noting as examined-and-ruled-out rather than repeating the posted inline finding.

Comment thread perf-changelog.yaml Outdated
description:
- "Add B200 TP4 AgentX through concurrency 128 with Engram UVA DRAM offload and native five-token DSpark"
- "Use deepseekv41-flash-0909 with adaptive verification and available-port selection"
pr-link: TBD

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.

🔴 New changelog entry uses "pr-link: TBD", which the changelog gate (utils/validate_perf_changelog.py, wired into .github/workflows/test-changelog-gate.yml) rejects: validate_added_pr_link only accepts the exact PR URL or the literal placeholders "XXX"/".../pull/XXX", so this entry fails CI as merged. Fix: use "XXX" (or the exact pull/<PR#> URL) as the placeholder so the gate passes.

Extended reasoning...

utils/validate_perf_changelog.py:159 checks link not in PR_LINK_PLACEHOLDERS and link != expected; PR_LINK_PLACEHOLDERS (line 27-30) is exactly {"XXX", ".../pull/XXX"}. The new entry at perf-changelog.yaml:7079 sets pr-link: TBD, which matches neither, so validate_added_pr_link raises ChangelogValidationError("new PR entry must use ... or an XXX placeholder; found 'TBD'"), failing the changelog-gate CI job for this PR/any rebase check.

Verification: normal. The PR appends a new changelog entry (perf-changelog.yaml:7075-7079) whose final line is pr-link: TBD (confirmed at perf-changelog.yaml:7079). This is a fresh addition that does not exist on the base branch, so any failure it causes is introduced by this change. The value passes the pydantic ChangelogEntry model (infx/matrix/validation.py:1031 accepts pr_link as an arbitrary string),…

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@functionstackx
functionstackx added this pull request to stack #2973 September 10, 2026 13:52
@Oseltamivir
Oseltamivir removed this pull request from stack #2973 September 10, 2026 16:05
为 B200 单独配置 DeepSeek V4.1 Flash AgentX 扫描,启用 UVA DRAM offload 和 DSpark,并将 concurrency 扩展至 128。
补充 B200 扫描的 PR 链接。
对齐官方单节点 TP 配方的模型 runner 和调度批处理默认值,保留 UVA offload、DSpark 及 AgentX 并发扫描。
DSv4.1 Flash 吞吐测试使用 thinking 开启、五个草稿 token 对应的黄金合成 AL 3.51,关闭自适应验证;准确率评测保留真实验证。同步中英文文档并追加性能变更记录。
@Oseltamivir
Oseltamivir force-pushed the config/dsv41flash-b200-agentx branch from b190a4d to 674aed9 Compare September 10, 2026 16:45
同步最新 main,保留性能变更日志历史字节,并在末尾保留本 PR 的变更记录。
@github-actions

Copy link
Copy Markdown
Contributor

Resolve conflicts with the merged H200 (#2963) and GB300 (#2961) arms: keep all
three master-config entries, take main's docs and MODELS_zh.md wording, keep the
overridable engine-readiness default in the shared script, and append this
branch's changelog entries at the tail.

将 main 合并入 B200 DSv4.1 Flash AgentX 分支,解决与已合入的 H200(#2963)和
GB300(#2961)分支的冲突:保留三个 master 配置条目,文档与 MODELS_zh.md 采用 main
的表述,共享脚本保留可覆盖的引擎就绪默认值,并将本分支的 changelog 条目追加到末尾。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

@Oseltamivir

Copy link
Copy Markdown
Collaborator Author

/reuse-sweep-run 34504973416

@Oseltamivir
Oseltamivir merged commit df0096c into main Sep 11, 2026
25 of 38 checks passed
@Oseltamivir
Oseltamivir deleted the config/dsv41flash-b200-agentx branch September 11, 2026 10:19

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

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

Reviewed by Cursor Bugbot for commit 052a811. Configure here.

export INFMAX_CONTAINER_WORKSPACE=/ix
export RESULT_DIR=/ix/results
export HF_HUB_CACHE=/hf-cache
CONTAINER_MOUNTS="$GITHUB_WORKSPACE:/ix,$HF_HUB_CACHE_HOST_PATH:/hf-cache,$AIPERF_MMAP_CACHE_HOST_PATH:/aiperf_mmap_cache"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Missing engine-ready timeout override

Medium Severity

The new B200 dsv41flash launch path never sets VLLM_ENGINE_READY_TIMEOUT_S, so startup stays on the one-hour default from dsv41flash_fp4_vllm_mtp.sh. The matching GB300 recipe already needed 7200 seconds for this same image, checkpoint, and TP4 capture after that deadline killed cold graph capture.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 052a811. Configure here.

Oseltamivir added a commit that referenced this pull request Sep 11, 2026
Resolve conflicts with the merged H200 (#2963), GB300 (#2961), and B200 (#2960)
arms: keep all four master-config entries, take main's docs and MODELS_zh.md
wording, keep the overridable engine-readiness default in the shared script, and
append this branch's changelog entries at the tail.

将 main 合并入 B300 DSv4.1 Flash AgentX 分支,解决与已合入的 H200(#2963)、
GB300(#2961)和 B200(#2960)分支的冲突:保留四个 master 配置条目,文档与
MODELS_zh.md 采用 main 的表述,共享脚本保留可覆盖的引擎就绪默认值,并将本分支的
changelog 条目追加到末尾。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Oseltamivir added a commit that referenced this pull request Sep 11, 2026
Resolve conflicts with the merged H200 (#2963), GB300 (#2961), and B200 (#2960)
arms: keep all four master-config entries, take main's docs and MODELS_zh.md
wording, keep the overridable engine-readiness default in the shared script, and
append this branch's changelog entries at the tail.

将 main 合并入 GB200 DSv4.1 Flash AgentX 分支,解决与已合入的 H200(#2963)、
GB300(#2961)和 B200(#2960)分支的冲突:保留四个 master 配置条目,文档与
MODELS_zh.md 采用 main 的表述,共享脚本保留可覆盖的引擎就绪默认值,并将本分支的
changelog 条目追加到末尾。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Oseltamivir added a commit that referenced this pull request Sep 12, 2026
Adds a b200-nscale config entry and the matching entry point. TP4 and the
image match the B200 sibling recipe from PR #2960; the compat launcher
resolves dsv41flash_fp4_b200_vllm_mtp.sh and allocates --gres=gpu:$TP, so
this takes half a node.

Harbor concurrency 2 -> 32 and max-num-seqs 16 -> 64: concurrency was held
down on H100 only because per-request latency had to stay inside the tunnel's
120s window, and B200 at TP4 has far more headroom. Modal credentials come
from repo secrets via benchmark-tmpl.yml, so they are present on any runner.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Oseltamivir added a commit that referenced this pull request Sep 12, 2026
The B200 run died in the compat launcher with "Unsupported model
prefix/precision: dsv41flash/fp4" -- its model-path table resolves pre-staged
weights under /scratch/models and has no dsv41flash entry, so it never
reached salloc.

Applies the same three hunks PR #2960 uses for the B200 sibling recipe: a
dsv41flash branch that keeps MODEL_PATH as the HF id with a host-side hub
cache, the /ix mount layout this model needs, and the srun container-mounts
switch to the assembled CONTAINER_MOUNTS variable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

2 participants