Skip to content

refactor(matrix): select srt-slurm recipes with srt-recipe-dir and srt-recipe - #3805

Merged
adibarra merged 13 commits into
refactor/delete-dead-recipesfrom
refactor/srt-recipe-key
Oct 14, 2026
Merged

adibarra merged 13 commits into
refactor/delete-dead-recipesfrom
refactor/srt-recipe-key

Conversation

@adibarra

@adibarra adibarra commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Multi-node master rows named their recipe through additional-settings: CONFIG_FILE=recipes/...yaml:override_x on the prefill or worker block. Recipe references are now first-class for every srt-slurm config, single- and multi-node:

dsv4-fp4-mi355x-sglang-disagg-agentic-umbp-dspark:
  srt-recipe-dir: dsv4/sglang/mi355x-fp4/agentx
  search-space:
  - conc-list: [4]
    srt-recipe: disagg-umbp-dspark.yaml:override_c4
  • Schema: srt-recipe-dir per config key, relative to the single- or multi-node recipe root. Each row has srt-recipe: <file>[:selector] and optional eval-srt-recipe. Selectors are base, override_<name> or zip_override_<name>[i].
  • Load-time checks: the file and selector must exist. They resolve under the loaded config's project root, not the tooling checkout. Klaud validates candidates against recipes fetched from the candidate head.
  • Rejected: CONFIG_FILE / EVAL_CONFIG_FILE in additional-settings, except on llmd-vllm configs, whose scripts still read CONFIG_FILE.
  • Generator: emits one canonical project-relative path (benchmarks/<single|multi>_node/srt-slurm-recipes/<dir>/<file>[:selector]) and reads node counts from it. The old CONFIG_FILE scan and the silent fallback for missing recipe files are gone.
  • Workflow and launcher: benchmark-multinode-tmpl.yml exports SRT_RECIPE / EVAL_SRT_RECIPE. A new MultiNodeRequest reads them, and a single helper maps the canonical path to the recipes/...:selector path srtctl receives. Power-rule globs use the canonical form.
  • Master configs: migrated mechanically. 459 CONFIG_FILE and 5 EVAL_CONFIG_FILE items became row fields, every config key got srt-recipe-dir, and single-node paths became relative. Also deleted dead settings: SYNTHETIC_ACCEPTANCE* (6 rows, unread) and SLURM_PARTITION (12 rows, overwritten from the cluster record).
  • Recipes: deleted the stale CONFIG_FILE header comments in 30 bundles.
  • Docs: updated RECIPES.md, CONFIGS.md, architecture.md, eval-agentx-procedures.md, nuke.md, add-model-hardware.md and the debug-runs skill.

Verification

  • Matrix equivalence: full-sweep over both masters is identical to the base once old CONFIG_FILE / EVAL_CONFIG_FILE values are mapped to the new fields and the removed dead settings are dropped. That holds for the default (1767 rows) and --all-evals (1797), including node-count and exp-name.
  • srtctl input: every multi-node row passes srtctl the same recipes/...:selector path as before. A new fake-Slurm test covers a bundle variant.
  • New test: a master config in a temp project resolves a recipe that exists only there.
  • Suite: pytest infx/tests passes all 2065 tests, and ruff is clean.

recipe-fingerprint changes once for every point, because the row shape changed. This is expected.

  • dsr1-fp8-gb200-dynamo-sglang low-latency row: main pointed at disagg-tp8-stp-variants.yaml with no selector, so srtctl ran all three zip_override_lowlat variants at conc [4, 8, 16]. The launcher now binds exactly one variant, so the row is split by the variants' concurrency ranges: zip_override_lowlat[0] (c8) at conc [4, 8] and zip_override_lowlat[1] (c16-32) at conc [16]. Variant [2] (tuned for c64) is dropped, since the row runs no conc in its range.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

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

感谢你的贡献!

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

@functionstackx
functionstackx added this pull request to stack #3808 October 7, 2026 23:24
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from 8f3711f to 9a7eaac Compare October 8, 2026 16:03
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from cfd3774 to 64531c2 Compare October 9, 2026 11:39
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch 2 times, most recently from 64e3ce2 to f087de3 Compare October 9, 2026 18:48
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from f087de3 to 4bc066b Compare October 9, 2026 23:43
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from 4bc066b to 5b19744 Compare October 10, 2026 07:51
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from 5b19744 to 24ffea4 Compare October 10, 2026 13:38
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch 2 times, most recently from 1aa95c3 to e0d611b Compare October 12, 2026 10:22
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch 2 times, most recently from a67c441 to c764335 Compare October 14, 2026 01:08
…t-recipe

Master configs name each row's recipe with srt-recipe (and eval-srt-recipe)
relative to a per-entry srt-recipe-dir instead of CONFIG_FILE and
EVAL_CONFIG_FILE additional-settings. Validation requires them on every
srt-slurm row, checks the file and selected variant exist at load time,
and rejects the old settings; llmd-vllm entries keep CONFIG_FILE. The
generator emits project-relative paths, counts nodes from the row's
recipe, and the launcher reads SRT_RECIPE/EVAL_SRT_RECIPE, staging the
same recipes/<path>:<selector> argument for srtctl. Also drops the unread
SYNTHETIC_ACCEPTANCE* and SLURM_PARTITION settings.
Master rows now select bundle variants with srt-recipe, so the recipe
headers no longer describe how to pick one.
Recipe existence, selector checks and recipe node counts read files from
the project that holds the loaded configs/ (or the root a caller passes)
instead of the tooling checkout's repository_root(). The generator CLI and
planner pass config_root(config files), Klaud live families pass the
checkout root, and Klaud's canonical matrix fetches the candidate's recipes
from the candidate head.
Master configs now name an srt-recipe resolved under the project that holds
configs/, so the fixture places its master in configs/ beside a recipe.
…ipe-dir

srt-recipe paths, which validation rejects now that every srt-slurm entry needs
srt-recipe-dir. The entry sets srt-recipe-dir and its rows select agentic.yaml;
the generated rows are unchanged.
…GB300 AgentX recipes

#3598 added the GB300 Dynamo+SGLang recipes with headers that say to select a
variant with CONFIG_FILE. Master rows select them with srt-recipe now, so the
headers stop at the variant layout like the other AgentX bundles.
Set an AgentX row's srt-recipe fields once after the topology branch, and fetch each recipe file a Klaud family references once rather than once per row.
The installed-package test no longer checks recipe node counts, which take an explicit root since srt-recipe and so no longer exercise caller-repository resolution. Drop unused monkeypatch fixtures and a history comment.
Show srt-recipe in the CONFIGS.md search-space example, shorten its selection note, name srt-slurm recipes in the revision snapshot description, and shorten the debug-runs recipe path.
The low-latency row named disagg-tp8-stp-variants.yaml without a selector, so one job submitted all three zip variants under a 4-node, 1-decode-worker label. Each variant now runs only the concurrencies it is tuned for, with its selector and its 7 TP8 decode workers on 16 nodes: zip_override_lowlat[0] (c8) at 4 and 8, zip_override_lowlat[1] (c16-32) at 16. zip_override_lowlat[2] is tuned for concurrency 64, which the entry never ran, so it has no row.
…h srt-recipe-dir

#3816 and #3840 added qwen3.8next-fp4-gb300-sglang-agentic-mtp and the
Qwen3.5 FP8 GB300 midcurve entries with a project-relative srt-recipe path
and CONFIG_FILE settings, which validation rejects now that every srt-slurm
entry needs srt-recipe-dir. The entries set srt-recipe-dir and their rows
select the same recipes and DEP16 overrides; the generated rows are
unchanged.
A recipe that fails to parse raised a raw yaml.YAMLError out of
validate_master_config, so Klaud's canonical_matrix crashed on a malformed
candidate recipe instead of rejecting it like other bad srt-recipe
references. It now raises the same ValueError, naming the recipe file.
…cipe-dir

#2594 added qwen3.5-fp4-gb200-dynamo-sglang-mtp with CONFIG_FILE
settings, which validation rejects now that every srt-slurm entry needs
srt-recipe-dir. The entry sets srt-recipe-dir and each row selects the
same recipe; the generated rows are unchanged.
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from c764335 to f0e0645 Compare October 14, 2026 02:09
@adibarra
adibarra merged commit b09359b into main Oct 14, 2026
11 of 14 checks passed
@adibarra
adibarra deleted the refactor/srt-recipe-key branch October 14, 2026 02:12
nvpohanh added a commit that referenced this pull request Oct 14, 2026
Conflicts:
	inferencex-e2e/benchmarks/multi_node/srt-slurm-recipes/dsv41flash/sglang/gb300-fp4/agentx/disagg-variants.yaml
	inferencex-e2e/configs/nvidia-master.yaml
	inferencex-e2e/perf-changelog.yaml

Port this PR's changes to main's recipe layout (#3805, #3818, #3824):
- disagg-variants.yaml: keep this PR's overrides; drop their
  benchmark.env.CONC, which the master row's conc-list now sets.
- nvidia-master.yaml: the five new rows select their override with
  srt-recipe instead of a CONFIG_FILE additional setting.
- perf-changelog.yaml: keep main's entries and append this PR's entry
  after them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nvpohanh added a commit that referenced this pull request Oct 14, 2026
…agg-sglang-agentx-refresh

Resolve conflicts with the srt-slurm recipe refactors on main (#3805,
#3818, #3824):
- configs/nvidia-master.yaml: keep this PR's TP4/EP4 and DP4 search
  space and image; reference the recipe as `srt-recipe: agentic.yaml`
  under the `srt-recipe-dir` that main added.
- gb200-fp4-mtp/agentic.yaml: drop the `base.model` block, which main
  now composes from the master row (image, model, precision); keep this
  PR's engine args and per-point overrides unchanged.
- perf-changelog.yaml: keep main's entries and append this PR's entry
  at the end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nvpohanh added a commit that referenced this pull request Oct 14, 2026
…-sglang-agentx-tp4

Resolve the conflicts in configs/nvidia-master.yaml and perf-changelog.yaml.

Main now selects srt-slurm recipes with srt-recipe-dir and srt-recipe and
composes AgentX recipes from fragments (#3805, #3818), so this entry and its
bundle move to that format:
- The master entry sets srt-recipe-dir, and each row selects its override with
  srt-recipe instead of a CONFIG_FILE setting.
- The bundle drops the keys the binder and launcher now write: the model
  block, the identity repo and image, the client command,
  benchmark.concurrencies, RESULT_DIR, IS_MULTINODE, ENABLE_AGENTX_POWER,
  AIPERF_DATASET_MMAP_CACHE_DIR and HF_HUB_CACHE. It also drops the unread
  INFMAX_CONTAINER_WORKSPACE and PORT.

No serving setting changes: engine args and env, frontend, Dynamo, services
and Slurm options bind exactly as the PR's sweep submitted them. The
perf-changelog entry stays appended at the end of the file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ankur-singh added a commit that referenced this pull request Oct 14, 2026
…cipe

Main now requires srt-recipe-dir on srt-slurm configs (#3805). Move the
CONFIG_FILE additional-settings to row-level srt-recipe selectors; recipe
files and selectors are unchanged.
Ankur-singh added a commit that referenced this pull request Oct 14, 2026
…o-SGLang AgentX 配方 (#2978)

* feat(config): add Qwen3.5 B300 Dynamo-SGLang AgentX recipes

添加 Qwen3.5 NVFP4 B300 Dynamo-SGLang AgentX 配置和配方,并校验合成接受长度与已提交的黄金曲线一致。

* chore(changelog): link Qwen3.5 B300 PR #2978

在性能变更日志中补充 Qwen3.5 B300 PR #2978 链接。

* fix(config): extend Qwen3.5 AgentX Slurm limits

延长 Qwen3.5 AgentX 配方的 Slurm 时间限制。

* fix: remove temporary cache environment overrides

移除 Qwen3.5 B300 AgentX 配方中指向 /tmp 的缓存环境变量设置。

* feat(agentx): move Qwen3.5 B300 SGLang AgentX to nightly-dev-20261013-7224fce1

- Bump the four recipes and the master entry to
  lmsysorg/sglang:nightly-dev-20261013-7224fce1 and rename the recipe
  variants to match.
- Drop SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE so the NextN draft layer is served
  at its shipped precision.
- Replace aliases this image removed: cuda-graph-max-bs becomes
  cuda-graph-max-bs-decode (the old spelling is now an ambiguous prefix),
  and SGLANG_DISABLE_TP_MEMORY_INBALANCE_CHECK=1 becomes
  SGLANG_ENABLE_TP_MEMORY_INBALANCE_CHECK=0.
- Drop settings with no effect in this image: environment variables it no
  longer reads (SGLANG_ENABLE_SPEC_V2, SGLANG_ENABLE_FLASHINFER_GEMM,
  SGLANG_FLASHINFER_FP4_GEMM_BACKEND, SGLANG_CUTEDSL_MOE_NVFP4_DISPATCH),
  false booleans srt-slurm never passes (including the deprecated
  enable-dp-attention), and settings whose readers these TP-only aggregate
  workers never reach (DP-attention scheduler gathers, Mooncake and NVSHMEM
  variables, load-balance-method, moe-dense-tp-size, and
  hicache-io-backend: kernel, which page_first_direct rewrites to direct).
- Drop the recipe-level cpus-per-task directive, which conflicts with the
  b300-dsxe cpus-per-gpu default, and run the AgentX client from
  benchmarks/srt_agentic.sh.

将 Qwen3.5 B300 SGLang AgentX 迁移到 nightly-dev-20261013-7224fce1:

- 将四个配方与主配置条目升级到
  lmsysorg/sglang:nightly-dev-20261013-7224fce1,并相应重命名配方变体。
- 移除 SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE,使 NextN 草稿层以发布时的精度运行。
- 替换该镜像已移除的别名:cuda-graph-max-bs 改为 cuda-graph-max-bs-decode
  (旧写法现在是有歧义的前缀),SGLANG_DISABLE_TP_MEMORY_INBALANCE_CHECK=1
  改为 SGLANG_ENABLE_TP_MEMORY_INBALANCE_CHECK=0。
- 移除在该镜像中无效的设置:不再被读取的环境变量(SGLANG_ENABLE_SPEC_V2、
  SGLANG_ENABLE_FLASHINFER_GEMM、SGLANG_FLASHINFER_FP4_GEMM_BACKEND、
  SGLANG_CUTEDSL_MOE_NVFP4_DISPATCH),srt-slurm 从不传递的 false 布尔参数
  (包括已弃用的 enable-dp-attention),以及这些仅 TP 的聚合 worker 不会
  触达的设置(DP 注意力调度器 gather、Mooncake 与 NVSHMEM 变量、
  load-balance-method、moe-dense-tp-size,以及会被 page_first_direct 改写为
  direct 的 hicache-io-backend: kernel)。
- 移除与 b300-dsxe 默认 cpus-per-gpu 冲突的配方级 cpus-per-task 指令,并改为
  通过 benchmarks/srt_agentic.sh 运行 AgentX 客户端。

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

* fix(agentx): use the default ReplaySSM cache length for Qwen3.5 B300 TP2/EP2

On lmsysorg/sglang:nightly-dev-20261013-7224fce1 the GDN ReplaySSM
spec-verify commit kernel (gdn_replayssm_compact_commit_kernel) contracts
over the replay window in tl.dot, which Triton requires to be at least 16.
With linear-replayssm-cache-len: 8 the TP2/EP2 worker fails to compile
that kernel at its first verify ("Input shapes should have M >= 1, N >= 1
and K >= 16"). Drop the override so the point uses the default length of
16, as the other recipes already do, and note it in the changelog entry.

在 lmsysorg/sglang:nightly-dev-20261013-7224fce1 中,GDN ReplaySSM 投机验证
提交 kernel(gdn_replayssm_compact_commit_kernel)在 tl.dot 中对回放窗口做
归约,而 Triton 要求该维度至少为 16。设置 linear-replayssm-cache-len: 8 时,
TP2/EP2 worker 在首次验证时无法编译该 kernel("Input shapes should have
M >= 1, N >= 1 and K >= 16")。移除该覆盖项,使该测试点与其他配方一样使用默认
长度 16,并在变更日志条目中加以说明。

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

* config: migrate qwen3.5 B300 agentic entry to srt-recipe-dir / srt-recipe

Main now requires srt-recipe-dir on srt-slurm configs (#3805). Move the
CONFIG_FILE additional-settings to row-level srt-recipe selectors; recipe
files and selectors are unchanged.

* chore: refresh PR #2978 for sweep reuse [skip-sweep]

* recipes: drop launcher-bound fields from qwen3.5 B300 agentic fragments

model.path/container/precision, identity.model.repo, identity.container.image
and RESULT_DIR/HF_HUB_CACHE/AIPERF_DATASET_MMAP_CACHE_DIR/IS_MULTINODE are
set by the launcher or workflow; main's fragment check rejects them (#3818).

* chore: refresh PR #2978 for sweep reuse [skip-sweep]

---------

Co-authored-by: Ankur-singh <ankusingh@nvidia.com>
Co-authored-by: Po-Han Huang <pohanh@nvidia.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Ankur-singh added a commit that referenced this pull request Oct 14, 2026
Resolve conflicts by keeping the PR's DSpark recipes and master-config rows and
applying main's recipe-fragment migration (#3805, #3818, #3820): srt-recipe-dir
with row-level srt-recipe, launcher-bound fields dropped, @fabric references for
RDMA devices. disagg-1p4d-dep4-tp8-c4-mtp.yaml stays deleted per the PR.
Ankur-singh added a commit that referenced this pull request Oct 14, 2026
Keep the PR's GB200 DSpark recipes and master-config rows, and apply main's
recipe-fragment migration (#3805, #3818, #3820): srt-recipe-dir with row-level
srt-recipe, launcher-bound fields dropped from the fragments, @fabric RDMA
references. perf-changelog is main's bytes plus this PR's entries.
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.

2 participants