Skip to content

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

Draft
adibarra wants to merge 11 commits into
refactor/delete-dead-recipesfrom
refactor/srt-recipe-key
Draft

adibarra wants to merge 11 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
…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

#3603 restored dsv41flash-fp4-mi355x-atom-agentic-dspark with project-relative
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.
@adibarra
adibarra force-pushed the refactor/srt-recipe-key branch from 5b19744 to 24ffea4 Compare October 10, 2026 13:38

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant