Skip to content

refactor(nvidia): run multi-node fixed-sequence recipes on the InferenceX client - #3415

Merged
cquil11 merged 10 commits into
mainfrom
agent/srt-nvidia-fixed-seq-client
Sep 25, 2026
Merged

cquil11 merged 10 commits into
mainfrom
agent/srt-nvidia-fixed-seq-client

Conversation

@cquil11

@cquil11 cquil11 commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #3413.

Background

NVIDIA multi-node fixed-sequence recipes benchmark with srt-slurm's built-in sa-bench, each with its own prompt counts, request rates and concurrency list. #3413 adds one InferenceX client, benchmarks/multi_node/srt_fixed_sequence.sh, that takes its concurrencies from the matrix CONC_LIST, discovers the served model name from the frontend, and writes a power measurement window per concurrency.

Changes

Client. The 228 recipe files used by the 27 non-deprecated multi-node fixed-sequence configs in configs/nvidia-master.yaml switch to:

benchmark:
  type: custom
  command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh
  env:
    TOKENIZER: /model
    ISL: '8192'
    OSL: '1024'
  • Per-recipe concurrencies, and the 8 override variants that only set them, are removed. The exception is the 22 telemetry-enabled Qwen3.5 GB200/GB300 recipes: srt-slurm needs benchmark.concurrencies to build their expected power windows.
  • Client settings follow the refactor(amd): share one fixed-sequence client across multi-node recipes #3413 defaults: range ratio 0.8, chat template on, 10x prompts, request rate inf, and 2x warmup at inf.

Power. On every DCGM power lane, launch_gb200-nv.sh, launch_gb300-nv.sh and launch_b200-nscale-slurm.sh inject CONC_LIST into benchmark.concurrencies. They previously did this on AgentX lanes only. Without it, srt-slurm expects windows for the recipe's concurrencies rather than the ones the client runs.

TRT-LLM. The 156 TRT-LLM recipes set engine.publish_metrics: false. The pinned srt-slurm passes --publish-metrics, which Dynamo builds before ai-dynamo/dynamo#12162 reject.

H100. All 12 recipes:

  • etcd and NATS run in the small nginx-sqsh image with a 1200 s readiness timeout. Each used to be a ~40 GB copy of the job image on the head node, and the first container step on a node takes minutes.
  • health_check.max_attempts: 360 (1 h). Loading DeepSeek-R1 FP8 over NFS outlasts the 30 min default.
  • In the 4 SGLang recipes, host_setup reads the weights into each worker's page cache before workers start. SGLang aborts if one TP rank finishes loading 480 s before another, which happened whenever one node already had the weights cached.

Testing

One e2e run per lane on this branch (8k1k, --no-evals):

Cluster Engine Result Runs (latest last)
H200 Dynamo TRT-LLM Pass 36074999655
GB300 Dynamo TRT-LLM Pass 36075010179
B200 Dynamo SGLang Pass 36075003735
GB300 Dynamo SGLang Pass 36075008003
GB200 Dynamo SGLang, require-power Pass, power_valid: 1 36075012506
MI355X SGLang Pass 36075014812
GB300 Dynamo SGLang, require-power, concurrencies 1 and 2 Pass, one custom window and power_valid: 1 per concurrency 36096834178
H200 Dynamo TRT-LLM, evals-only, eval-limit=50 Pass, gsm8k 1.00 / 0.98 36096588777
H100 Dynamo SGLang, 2 shapes Pass 36075001644, 36078775267, 36082101896, 36086935975
B300 Dynamo TRT-LLM Fail 36070615374, 36073600788, 36075005717, 36076308221, 36082522289

B300 TRT-LLM multi-node is broken on the DSXE cluster independently of this PR; see #3425. Background:

  • DSXE replaced the InfiniBand B300 NV cluster in feat(runners): add the B300 DSXE cluster and retire the B300 NV launcher / 添加 B300 DSXE 集群并下线 B300 NV 启动脚本 #2826. Its nodes reach each other's GPUs over 16 AWS EFA devices (rdmap*), not InfiniBand (mlx5_*).
  • The B300 recipes were tuned for the old cluster: they use TRT-LLM's UCX KV cache transceiver and pin TRTLLM_UCX_INTERFACE to mlx5_* devices.
  • UCX has no EFA transport; on DSXE it sees only two InfiniBand ports and TCP. Workers come up, but every prefill step blocks 60-125 s on a KV send, decode receives no requests, and the job hits its Slurm time limit.
  • NIXL's EFA backend is unavailable in the pinned image (ai-dynamo/tensorrtllm-runtime:0.8.1.post1: backend 'LIBFABRIC' not found).
  • No B300 TRT-LLM multi-node run has happened on DSXE since the move, so this was already broken on main.

@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 only run on labeled PRs. Add full-sweep-fail-fast (strongly recommended); use full-sweep-enabled only when matrix jobs should continue after a failure.
  • 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 上运行。强烈建议添加 full-sweep-fail-fast;仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@cquil11
cquil11 added this pull request to stack #3414 September 24, 2026 21:34

@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 checked two other things and ruled them out: the dropped use_chat_template/random_range_ratio fields — many old sa-bench blocks (e.g. the b200-fp8 dsr1 disagg-1p1d recipe) never set them in the first place, so nothing is silently lost there; and the 22 telemetry-enabled Qwen3.5 GB200/GB300 recipes, which do retain benchmark.concurrencies on the new custom block (matching the PR description's claim that srt-slurm still needs it to size expected power windows).

Extended reasoning...

This is a mechanical, repo-wide swap of the benchmark: block in 228 recipe YAMLs from sa-bench to a shared custom script invocation; it touches no auth/crypto/permission logic. A confirmed finding (missing perf-changelog.yaml entry per AGENTS.md's non-negotiable invariant) is already queued as an inline comment, so I did not restate it in the body. I additionally spot-checked two other candidate concerns from the ruled-out list against the actual diff (dropped use_chat_template/random_range_ratio fields, and retained concurrencies on telemetry recipes) and confirmed both are non-issues, which is worth surfacing since a human reviewer would otherwise re-check the same things.

Additional findings (outside the current diff — GitHub can't attach inline comments there):

  • 🔴 perf-changelog.yaml — This PR changes measured benchmark behavior (10x vs 16x/20x num-prompts multiplier, req-rate inf vs 300/700, 2x-at-inf warmup) across 228 recipes with no perf-changelog.yaml entry, so downstream consumers of the changelog lose the record of this performance-relevant change. AGENTS.md's non-negotiable rule states every recipe modification requires a new append-only perf-changelog.yaml entry (AGENTS.md:124), and none of the 228 recipe edits add one. Fix: append a perf-changelog.yaml entry (at the tail, preserving existing bytes) describing the client migration and its measured-behavior deltas (prompt multiplier, request rate, warmup) before merging. [also at: benchmarks/multi_node/srt-slurm-recipes/dsr1/sglang/b200-fp4/8k1k/disagg-1p1d-p-tp4-d-tp8-b512-c32-mtp.yaml:145 - This PR changes the benchmark client (sa-bench to custom/srt_fixed_sequence.sh) for 228 recipes, changing measured request rate, warmup, and prompt-count behavior for every one of them, but does not add a perf-changelog.yaml entry, violating AGENTS.md:124 ("Every change that can…]

    Why this was flagged

    AGENTS.md:124 requires: 'Every change that can affect benchmark performance and every recipe addition or modification requires a new perf-changelog.yaml entry... append only at the tail.' This diff (git diff bb089d3 HEAD) modifies benchmark: blocks in 228 recipe YAMLs, switching sa-bench to a custom srt_fixed_sequence.sh client and changing num_prompts multiplier (16x/20x -> 10x in 34 recipes), request rate (300/700 -> inf in 16 recipes), and warmup count/rate per the PR description itself. perf-changelog.yaml's tail (checked via git diff) shows no new entry added in this diff. No safeguard catches this since it's a manual convention, not a CI-enforced one visible in this diff.

    Verification: normal (policy invariant violation this PR introduces). AGENTS.md:124 is a "Non-negotiable benchmark invariant": "Every change that can affect benchmark performance and every recipe addition or modification requires a new perf-changelog.yaml entry. The file is append-only and byte-sensitive... append only at the tail." The diff (git diff bb089d3..HEAD) modifies the benchmark: block of 228…

@cquil11
cquil11 force-pushed the agent/srt-nvidia-fixed-seq-client branch 5 times, most recently from bad6dd0 to 22f8235 Compare September 25, 2026 05:33
@cquil11
cquil11 removed this pull request from stack #3414 September 25, 2026 05:44
@cquil11
cquil11 force-pushed the agent/srt-multinode-fixed-seq-client branch from 0f03491 to 1898327 Compare September 25, 2026 05:44
Base automatically changed from agent/srt-multinode-fixed-seq-client to main September 25, 2026 05:44
…nceX client

Move the 228 recipe files behind the 27 active NVIDIA multi-node
fixed-sequence configs from srt-slurm's sa-bench to
benchmarks/multi_node/srt_fixed_sequence.sh. Each recipe keeps its ISL/OSL
and sends the same served model name and /model tokenizer sa-bench used;
concurrencies come from the matrix. Telemetry recipes keep
benchmark.concurrencies, which srt-slurm needs for their expected power
windows. Deprecated recipes are unchanged.
…ence power lanes

The client runs CONC_LIST, but GB200, GB300 and B200 injected it into
benchmark.concurrencies only for AgentX, so a narrowed fixed-sequence
power run expected windows it never measured. Inject on every DCGM power
lane, as H200 already does.
The pinned srt-slurm passes --publish-metrics to Dynamo TRT-LLM workers by
default, which Dynamo builds before ai-dynamo/dynamo#12162 reject, so
workers exited at startup. Set engine.publish_metrics: false on the 156
active TRT-LLM recipes.
The first container step on an H100 node takes about eight minutes to
set up the job image, and etcd is that step, so it missed srt-slurm's
300s readiness default. Allow 1200s in the 12 active H100 recipes.
Drop the hardcoded MODEL from the converted recipes; the client now asks
the frontend, which serves the name the workers registered.
Node container setup plus loading DeepSeek-R1 FP8 weights over NFS took
longer than srt-slurm's 30-minute health default. Use 360 attempts, as
the GB200 recipes do.
Each service ran in its own ~40 GB instance of the job image on the head
node, beside prefill rank 0, which was then killed while loading
weights. etcd and NATS are static binaries from /configs, so use the
small nginx image the profile already provides.
TRTLLM_UCX_INTERFACE named RDMA devices (mlx5_*), not a network
interface, so TRT-LLM could not find a local IP ("Can't get local ip
from NIC Interface") and KV cache never reached decode. No other
cluster sets it; drop it from the 26 active B300 TRT-LLM recipes.
SGLang aborts when a TP rank finishes loading 480 s before the slowest
one. On H100 the weights come over NFS, and a node reused from an
earlier run loads from page cache, so the head node's ranks finished
first and the run failed on every job that reused it. Read the weights
into each worker node's page cache in host_setup before workers start.
B300 TRT-LLM disagg is broken on the DSXE cluster regardless; leave
these recipes unchanged here.
@cquil11
cquil11 force-pushed the agent/srt-nvidia-fixed-seq-client branch from 22f8235 to 2957ea0 Compare September 25, 2026 05:45
@cquil11
cquil11 merged commit ee6df1f into main Sep 25, 2026
1 check passed
@cquil11
cquil11 deleted the agent/srt-nvidia-fixed-seq-client branch September 25, 2026 05:45
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.

1 participant