Skip to content

refactor(srt): compose AgentX recipes and select power from the master row - #3818

Merged
adibarra merged 14 commits into
mainfrom
refactor/srt-agentx-compose
Oct 14, 2026
Merged

adibarra merged 14 commits into
mainfrom
refactor/srt-agentx-compose

Conversation

@adibarra

@adibarra adibarra commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • AgentX fragments: all 153 active AgentX recipes become fragments, composed over new shared blocks (configs/srt-recipes/agentic-{single,multi}.yaml) and bound like fixed-sequence. The binder writes image, model, precision and identity, and identity.container.image stays byte-identical. A fragment that sets a bound key to a different value fails before submission.
  • Launcher-owned client env: multi-node clients get RESULT_DIR, AIPERF_DATASET_MMAP_CACHE_DIR and HF_HUB_CACHE from the volumes the launcher mounts, plus IS_MULTINODE and ENABLE_AGENTX_POWER. The power switch is 1 exactly when the launcher collects the point's AgentX power (a power: true row whose lane rule collects AgentX or adapter power), so power no longer depends on a recipe pinning IS_MULTINODE: false, and the client names conc_N results on IS_MULTINODE alone instead of falling back to CONC_LIST.
    • New runners.yaml agentic-volume-mounts replaces lanes._AGENTIC_CACHES. mi355x keeps its workspace result directory through a lane field.
    • Clusters without cache mounts (b300-dsxe) behave as today. A fragment that sets HF_HOME keeps its own cache.
  • Removed from fragments: dead keys (PORT, INFMAX_CONTAINER_WORKSPACE, retired SRT_MEASUREMENT_WINDOW_*, default WEKA_LOADER_OVERRIDE), copies of workflow env, and benchmark.concurrencies. Multi-node AgentX fragments also drop their IS_MULTINODE, ENABLE_AGENTX_POWER, TP, PP_SIZE, PCP_SIZE and EP_SIZE pins (only single-node results read the last four); a fragment that sets IS_MULTINODE or ENABLE_AGENTX_POWER now fails before submission.
  • Master power: true on search-space rows:
    • Replaces telemetry: blocks in 175 recipes (153 AgentX, 22 fixed-sequence) and is set on 68 rows.
    • It merges telemetry-dcgm.yaml with the cluster's new srt-slurm.power-exporter-port and binds benchmark.concurrencies after variant selection, so bundles can measure power now.
    • Removed: recipe-text power detection, recipe_glob rules and the inject_concurrencies text rewrite. The multinode workflow exports POWER.
  • Workflow env stays out of fragments: the binder also writes REQUIRE_POWER into multi-node AgentX recipes: 1 when the workflow requires power or the lane's power rule does (the gb200-nv and gb300-nv Kimi-K3 AgentX rules, which keeps exactly the 24 points whose fragments pinned it strict). BOUND_ENV rejects every name the workflow exports from the matrix point. Fragments drop the REQUIRE_POWER pins, MAX_MODEL_LEN (the AgentX client never reads it), a KV_OFFLOAD_BACKEND_METADATA copy, the DSv4 GB300 frontend copies of the workflow env, and copies equal to runtime_settings.sh values (VLLM_ENGINE_READY_TIMEOUT_S 3600, PYTHONDONTWRITEBYTECODE, the sglang-disagg MORI/NCCL/SGLang settings). Deliberate overrides stay: Dynamo routing and session settings, longer engine-ready timeouts, MORI_IO_QP_MAX_SEND_WR 32767 and single-node variant labels.
  • Docs: RECIPES.md and CONFIGS.md updated.

Verification

  • Matrix: full-sweep and --all-evals are identical to the base, apart from the new power: true on exactly the rows whose recipe had telemetry (140 and 125 rows).
  • Harness (not committed): ran all 3622 point × cluster launches through the real python -m infx.launch with a fake srtctl.
    • Fixed-sequence: identical recipes and srtslurm.yaml.
    • AgentX: for every point, the client's effective environment gives the same Plan.from_env result as the base, except the power mode of multi-node points without power (below). Across the 334 multi-node AgentX points, the 98 power points keep their measurement window, the 44 that pinned power off stay off, and the 192 others go from missing to off; result directory, file name and require_power are unchanged.
  • Suite: the full CI pytest command passes 2324 tests, and ruff is clean.

Intentional differences

  • GLM-5.3 TileRT MI355X AgentX published /model as its model because its fragment set MODEL=/model. It now names that checkpoint as the client's TOKENIZER (read before MODEL), so it publishes zai-org/GLM-5.3 with the same tokenizer and served name.
  • srtslurm.yaml model_paths keys change from recipe aliases to hf:<MODEL>, with the same resolved path.
  • benchmark.concurrencies is dropped on 9 qwen3.5 b300 variants without power. It had no effect there.
  • 38 single-node AgentX points whose recipe image was stale now bind the master image and launch. Before, they failed validation (glm5.2-fp8-mi325x-sglang-agentic-mtp, dsv4-fp4-b200-sglang-agentic-hicache-mtp).
  • Single-node runs no longer pass a redundant --set CONC.
  • infx generate binds every srt-slurm point, AgentX included (power telemetry and client paths come from the launcher's own code). The manifest records the cluster.
  • Host DRAM sizing does not change: recipes keep their pool sizes, and single-node variants keep TOTAL_CPU_DRAM_GB and KV_OFFLOADING, which the launcher still checks against the matrix point.
  • Multi-node AgentX points without power: true (192) no longer publish power_valid: 0 with multinode_power_contract_missing; like the points that pinned power off, they publish no power fields.
  • The 35 points whose recipes pinned IS_MULTINODE: false (DSv4 B200, GB200 and GB300 agg, DSv4.1-Flash GB300 agg, Qwen3.5 GB200 and GB300 agg; DSv4 GB300 TP8 agg spans two nodes) now publish is_multinode: true with the master row's prefill/decode topology. GPU counts are unchanged; ep follows the master row (2 instead of 1 on the TP2/EP2 points).
  • DSv4 GB300 vLLM 1P4D pinned PREFILL_TP=1 and RUNNER_TYPE=gb300. Its prefill worker is DEP4 (tensor-parallel-size 1, data-parallel-size 4, expert parallel) on four GPUs, which the master row records as tp: 4, ep: 4, dp-attn: true like its DEP4 siblings. It now publishes prefill_tp 4 and 36 GPUs (was 1 and 33) and the matrix runner label as hw, like its siblings.

@github-actions

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

@adibarra
adibarra added this pull request to stack #3808 October 8, 2026 14:35
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch from 367e3fb to dc4671c Compare October 8, 2026 16:03
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch from dc4671c to 752cb98 Compare October 8, 2026 16:25
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch 2 times, most recently from 5f3fd28 to d2ce3a3 Compare October 9, 2026 17:47
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch 2 times, most recently from a3c209a to 8c01db9 Compare October 9, 2026 23:43
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch from 8c01db9 to d0a5aac Compare October 10, 2026 07:51
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch from d0a5aac to 524fa70 Compare October 10, 2026 13:38
@adibarra
adibarra requested a review from hbarclay as a code owner October 14, 2026 02:12
… master rows

AgentX recipes, single- and multi-node, become fragments like the
fixed-sequence ones. configs/srt-recipes/agentic-{single,multi}.yaml supply
the client command; the binder writes the master model, image, precision and
identity, and the launcher hands multi-node clients RESULT_DIR,
AIPERF_DATASET_MMAP_CACHE_DIR and HF_HUB_CACHE from the volumes it mounts
(agentic-volume-mounts replaces lanes._AGENTIC_CACHES). Dead keys and copies
of the workflow environment leave the fragments; a fragment that sets a bound
key fails before submission.

A multinode search-space row with power: true replaces recipe telemetry
blocks: the shared telemetry-dcgm.yaml is merged with the cluster's
power-exporter-port and benchmark.concurrencies is bound after variant
selection, so bundles can measure power. POWER_LANES now judges the row's
field instead of reading recipe text, and inject_concurrencies is gone.

Selected zip variants drop null-valued keys as srtctl apply does, and
h200-dgxc GLM-5.2 FP8 AgentX keeps serving the Hub snapshot.
infx generate now binds every srt-slurm point of the selected keys, AgentX
as well as fixed-sequence, single- and multi-node, through the binder the
launcher runs. The workflow environment it reproduces gains the AgentX
inputs (IS_AGENTIC, KV_OFFLOADING, TOTAL_CPU_DRAM_GB, THINKING_MODE) and the
multi-node request fields.

A multi-node point takes the binder inputs the launcher derives from the one
cluster its runner label schedules on: launch_path, the lane's POWER_LANES
decision and the cluster's power-exporter-port give the DCGM telemetry block
and bound concurrencies, and config.agentic_client_env, which no longer needs
an SrtRun, gives the AgentX client paths. Such a point fails when its label
spans several clusters or the lane refuses its power. The manifest records
the cluster.
…gment

so binding it fails on its model block and benchmark MODEL. Like the other
AgentX fragments it drops them, the client command its shared block supplies,
and WEKA_LOADER_OVERRIDE, which names the corpus dsv41flash replays by
default. Every point binds to main's selected variant without that override.
The multi-node binder reads IS_AGENTIC instead of defaulting a missing value to fixed-sequence, model_paths drops a guard the binder makes redundant, and RECIPES.md points at the bound-key tables instead of copying them.
select_recipe binds each variant before validate_recipe sees it, and the
binder writes model.path, model.container, model.precision and
benchmark.env.MODEL from the same environment, so those four comparisons
can never fail. infx generate set KV_OFFLOADING and TOTAL_CPU_DRAM_GB to
empty or zero placeholders for fixed-sequence points that nothing reads;
it now sets them only for AgentX points.
The launcher and infx generate each derived the DCGM exporter port and
the AgentX client paths from the cluster, lane, request and power
decision, and infx generate must match the launcher. Both now call
config.binder_inputs. infx generate imports the launcher modules at the
top: they import nothing that imports it back.
…r tests

The bound AgentX client test asserted values it passed in, and the CLI
test's power and client-env tail repeated the srt driver tests that run the
same module with those flags. The fragment-rejection test no longer pins
the explanatory suffix, and an unused constant goes.
RECIPES.md states the infx generate binder inputs in fewer words and
drops a sentence the power-row table already makes. CONFIGS.md puts mounts
back beside volume-mounts, which it describes, and the GLM-5.2 GB200 power
comment moves onto the power field.
Recipes may no longer set model.container, identity.container.image or
telemetry.enabled, yet the Klaud prompt and docs still asked for matching
images, nuke.md still ran a script that rewrites model.container (it now
fails on every recipe), and the power docs still gated energy collection
on recipe telemetry. They now say the binder writes the master image and
a power: true master row enables DCGM telemetry.
…fragments

#3816, #3840 and #3744 added full recipes: the Qwen3.8 GB300 and Qwen3.5
GB300 DEP16 recipes carry model blocks, the client command, benchmark MODEL
and the client paths the launcher hands multi-node points, and both new
recipes and the DSv4.1-Flash B300 one set the identity repo and image the
binder writes. Like the other AgentX fragments they drop them, and
WEKA_LOADER_OVERRIDE, which names both models' default corpus. The Qwen3.8
recipe keeps the TOTAL_CPU_DRAM_GB and KV_OFFLOADING the launcher checks
against the point.

Each point binds to main's selected variant, with the Qwen3.5 model alias
bound as its Hub id like the other GB300 Qwen3.5 AgentX points.
agentic-single.yaml and agentic-multi.yaml were byte-identical. Single- and multi-node AgentX points now compose with configs/srt-recipes/agentic.yaml; the bound recipes are unchanged.
The launcher rejects a variant whose TOTAL_CPU_DRAM_GB differs from the
point's, the check that ties a recipe's literal host pools to the row's
dram-utilization. No test covered it.
Aggregated multi-node AgentX recipes pinned IS_MULTINODE=false so the
client would not measure power, and so published a single-node result
shape for jobs that span nodes (the DSv4 GB300 TP8 agg point runs on
two). The client's conc_N naming had to accept the workflow's CONC_LIST
to keep collecting them. The Qwen3.5 B300 disagg recipe pinned
ENABLE_AGENTX_POWER=0 instead.

The binder now writes both into every multi-node AgentX recipe from the
launcher's own state: IS_MULTINODE from the request, and
ENABLE_AGENTX_POWER=1 exactly when the power decision collects AgentX or
adapter power. A fragment that sets either fails composition. The pins
are deleted, and so are the TP, PP_SIZE, PCP_SIZE and EP_SIZE copies:
only single-node points read them, and multi-node results take their
topology from the workflow's PREFILL_* and DECODE_* env. The client
names results per concurrency on IS_MULTINODE alone.

The DSv4 GB300 vLLM 1P4D recipe also pinned RUNNER_TYPE=gb300 and
PREFILL_TP=1. Its prefill worker is DEP4 (tensor-parallel-size 1,
data-parallel-size 4, expert parallel) on four GPUs, which the master
row records as tp 4, ep 4, dp-attn like its DEP4 siblings; the pin
published prefill_tp 1 and counted one prefill GPU instead of four.
Those pins and the unread OFFLOADING copy are deleted, so the row
publishes its runner label and topology like its siblings.

The client's power mode, result directory and file name are unchanged
for every point, except that the 192 multi-node points without power
switch from an invalid power verdict (multinode_power_contract_missing)
to none. The 35 formerly pinned points publish is_multinode true with
prefill and decode topology.
Fragments still set values the workflow exports from the matrix point or
from runtime_settings.sh. The Kimi-K3 GB200 and GB300 fragments pinned
REQUIRE_POWER=1, two TensorRT-LLM fragments pinned MAX_MODEL_LEN, MiniMax-M3
GB200 TRT copied KV_OFFLOAD_BACKEND_METADATA, the DSv4 GB300 frontends copied
MODEL, MODEL_PREFIX, FRAMEWORK, PRECISION, DURATION, KV_OFFLOADING and CONC,
and GLM-5.3 TileRT set MODEL=/model, which it published as the model.

The binder now writes REQUIRE_POWER into every multi-node AgentX recipe: 1
when the workflow requires power or the lane's power rule does. The
gb200-nv and gb300-nv Kimi-K3 AgentX rules require it, which keeps the
pinned points strict and no others. BOUND_ENV rejects every name the
workflow exports from the matrix point. MAX_MODEL_LEN goes (the AgentX
client never reads it; evals take the job's), and so do the frontend
copies, which the Dynamo frontend never reads. GLM-5.3 names its local
checkpoint as the client's TOKENIZER, which the replay reads before MODEL,
so it publishes zai-org/GLM-5.3 and keeps its tokenizer.

Copies that equal the workflow's value go too: VLLM_ENGINE_READY_TIMEOUT_S
3600, PYTHONDONTWRITEBYTECODE, AIPERF_DYNAMO_SESSION_TIMEOUT_SECONDS 3600
and the MORI, NCCL and SGLang settings runtime_settings.sh exports for
sglang-disagg. Every process keeps its effective value through the job
environment. Fragments keep values that override the workflow's on
purpose: the Dynamo routing and session settings, longer engine-ready
timeouts, MORI_IO_QP_MAX_SEND_WR 32767 and single-node variant labels.
@adibarra
adibarra force-pushed the refactor/srt-agentx-compose branch from 08a5fc6 to 8d81415 Compare October 14, 2026 02:12
@adibarra
adibarra merged commit b76f485 into main Oct 14, 2026
4 checks passed
@adibarra
adibarra deleted the refactor/srt-agentx-compose branch October 14, 2026 02:15
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
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).
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