Skip to content

Port GLM-5.1 TileRT AgentX to native srt-slurm - #2750

Merged
cquil11 merged 12 commits into
mainfrom
agent/port-glm51-b200-tilert-agentx-srt-slurm
Aug 27, 2026
Merged

Port GLM-5.1 TileRT AgentX to native srt-slurm#2750
cquil11 merged 12 commits into
mainfrom
agent/port-glm51-b200-tilert-agentx-srt-slurm

Conversation

@cquil11

@cquil11 cquil11 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Validation

  • direct latest-main base
  • generated matrix contains exactly one 2-node c1 MTP AgentX point
  • srt-slurm recipe schema loads against exact PR10 head
  • launcher Bash syntax, matrix tests, and diff checks pass
  • draft while the official B200 sweep is iterated to green

Note

Medium Risk
Touches Slurm launcher orchestration, dual-container Enroot imports, and AgentX context/metrics wiring; misconfiguration could break runs or skew trace filtering, but scope is limited to one B200 TileRT agentic recipe.

Overview
Moves B200 GLM-5.1 FP8 TileRT AgentX MTP 1P1D off the manual submit.sh / salloc path and onto native srt-slurm, deleting glm5.1_fp8_b200_tilert-disagg.sh and wiring nvidia-master.yaml to a new recipe at recipes/tilert/glm5.1/b200-fp8/agentic/disagg-1p1d-tp8-mtp.yaml.

The recipe defines heterogeneous vLLM prefill + TileRT decode (NIXL, MTP, 202,752 context), TileRT router frontend, and a custom benchmark that runs agentic_srt.sh with AIPERF_MAX_CONTEXT_LENGTH=202752, AIPERF_REQUIRED_SERVER_METRIC_PREFIX=vllm: (prefill Prometheus only), and Weka trace filtering aligned to that limit.

agentic_srt.sh now optionally sets MAX_MODEL_LEN from AIPERF_MAX_CONTEXT_LENGTH after benchmark_lib clears inherited limits.

launch_b200-nscale-slurm.sh adds a TileRT agentic branch: pins SemiAnalysisAI/srt-slurm at d1e6c97…, copies TileRT recipes, squashes prefill + decode images (including ghcr.io via enroot_uri_for_image), and mounts shared TileRT weight cache plus workspace.

Reviewed by Cursor Bugbot for commit 5084f22. 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 关于重新运行失败任务的文档

@cquil11 cquil11 added the agentx-fast Run AgentX throughput with 1 warmup request per lane and a 20-minute profile; not reusable label Aug 27, 2026
@cquil11
cquil11 marked this pull request as ready for review August 27, 2026 01:53
@cquil11
cquil11 requested a review from a team August 27, 2026 01:53
@claude

claude Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cquil11's task in 6m 0s —— View job


Review of PR #2750

  • Gather context (diff, changed files, repo guidelines)
  • Review new srt-slurm recipe YAML
  • Review master config + perf-changelog changes
  • Review launcher changes
  • Post review feedback

Summary

Found 1 blocking issue (inline comment on runners/launch_b200-nscale-slurm.sh:59): the new srt-slurm diversion gate matches on glm5.1/fp8/tilert/mtp without checking IS_AGENTIC, so the two existing non-agentic glm5.1-fp8-b200-tilert fixed-seq-len points (1k1k, 8k1k) — which still rely on the compat launcher and the still-present benchmarks/multi_node/glm5.1_fp8_b200_tilert-disagg.sh — get pulled into the srt-slurm path where they hard-fail on the missing CONFIG_FILE, clone the wrong srt-slurm fork, and generate a malformed default_mounts block. A one-line gate fix is suggested inline.

Everything else checked out: the deleted agentic wrapper has no remaining references; the agentic config's single MTP point routes cleanly through the pinned TileRT srt-slurm fork with CONFIG_FILE matching the copied recipe path; perf-changelog.yaml is updated and the entry is correctly appended at the end; images (ghcr.io/tile-ai/tilert:0.1.5, vllm/vllm-openai:v0.26.0) are public and go through the existing enroot import path; and the synthetic-acceptance injector is a no-op for this config.

if [[ $FRAMEWORK != "dynamo-vllm" ]] &&
[[ $MODEL_PREFIX != "dsv4" || $PRECISION != "fp4" || $FRAMEWORK != "dynamo-sglang" || $SPEC_DECODING != "mtp" ]]; then
[[ $MODEL_PREFIX != "dsv4" || $PRECISION != "fp4" || $FRAMEWORK != "dynamo-sglang" || $SPEC_DECODING != "mtp" ]] &&
[[ $MODEL_PREFIX != "glm5.1" || $PRECISION != "fp8" || $FRAMEWORK != "tilert" || $SPEC_DECODING != "mtp" ]]; then

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.

🔴 BLOCKING: This gate also captures the existing non-agentic glm5.1-fp8-b200-tilert fixed-seq-len points (1k1k and 8k1k in configs/nvidia-master.yaml:9754), which are also MODEL_PREFIX=glm5.1 / PRECISION=fp8 / FRAMEWORK=tilert / SPEC_DECODING=mtp. Before this PR they fell through to the compat launcher (which routes them to benchmarks/multi_node/glm5.1_fp8_b200_tilert-disagg.sh); now they continue down the native srt-slurm path.

Why it matters: Those two existing sweep points will hard-fail:

  1. They set no CONFIG_FILE in additional-settings, so the run dies at the CONFIG_FILE is not set check (line 307).
  2. The recipe-clone chain's TileRT branch (line 111) requires IS_AGENTIC == 1, so they'd clone the default NVIDIA srt-slurm with kimi-k2.6 recipes instead of the TileRT fork.
  3. With FRAMEWORK == tilert but IS_AGENTIC != 1, DEFAULT_MOUNTS_BLOCK (line 245–251) appends indented mount entries to an empty string, emitting mapping lines without a default_mounts: parent key — malformed srtslurm.yaml.

Fix: Restrict the srt-slurm diversion to the agentic point so fixed-seq-len keeps its compat route:

Suggested change
[[ $MODEL_PREFIX != "glm5.1" || $PRECISION != "fp8" || $FRAMEWORK != "tilert" || $SPEC_DECODING != "mtp" ]]; then
[[ $MODEL_PREFIX != "glm5.1" || $PRECISION != "fp8" || $FRAMEWORK != "tilert" || $SPEC_DECODING != "mtp" || "${IS_AGENTIC:-0}" != "1" ]]; then

(Alternatively, also port the fixed-seq-len config to srt-slurm recipes in this PR — but as-is those two points break.)

@github-actions

Copy link
Copy Markdown
Contributor

Comment thread runners/launch_b200-nscale-slurm.sh
export MODEL_PATH="${MODEL_PATH:-$NSCALE_MODEL_ROOT/Kimi-K3}"
export SRT_SLURM_MODEL_PREFIX="kimik3"
elif [[ $MODEL_PREFIX == "glm5.1" && $PRECISION == "fp8" && $FRAMEWORK == "tilert" ]]; then
export SRT_SLURM_MODEL_PREFIX="glm5.1-fp8"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pre-staged GLM-5.1 path unused

High Severity

The glm5.1 TileRT branch exports SRT_SLURM_MODEL_PREFIX but never sets MODEL_PATH, so model_paths is empty. The recipe uses hf:zai-org/GLM-5.1-FP8 instead of that alias, so prefill does not load /scratch/models/GLM-5.1-FP8. Unlike other Nscale models, glm5.1 also omits --no-preflight, so apply can fail on the login node.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63170fb. Configure here.

UCX_MEMTYPE_CACHE: "n"
UCX_MEMTYPE_REG_WHOLE: "n"
decode_environment:
<<: *common_environment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nscale UCX devices not configured

Medium Severity

Prefill and decode UCX env sets UCX_MEMTYPE_CACHE and UCX_MEMTYPE_REG_WHOLE but not UCX_NET_DEVICES. The compat TileRT path on this cluster pins the eight RoCE HCAs (mlx5_0 through mlx5_7) for NIXL. Without that pin, KV transfer can bind the wrong NICs and fail or fall back off RDMA.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 63170fb. Configure here.

fi

SRTCTL_ROOT="${GITHUB_WORKSPACE}/${SRT_REPO_DIR}"
echo "Creating srtslurm.yaml configuration..."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

DCGM import URI is double-transformed

High Severity

import_squash now runs every image through enroot_uri_for_image, but the DCGM path still pre-rewrites nvcr.io/ to nvcr.io# first. The helper then treats nvcr.io#nvidia as the registry and emits an invalid Enroot URI, so power-enabled B200 nscale launches fail when the exporter squash is not already cached.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 01ac482. Configure here.

Comment on lines +51 to 61
elif [[ $MODEL_PREFIX == "glm5.1" && $PRECISION == "fp8" && $FRAMEWORK == "tilert" ]]; then
export SRT_SLURM_MODEL_PREFIX="glm5.1-fp8"
else
run_compat_launcher
fi

if [[ $FRAMEWORK != "dynamo-vllm" ]] &&
[[ $MODEL_PREFIX != "dsv4" || $PRECISION != "fp4" || $FRAMEWORK != "dynamo-sglang" || $SPEC_DECODING != "mtp" ]]; then
[[ $MODEL_PREFIX != "dsv4" || $PRECISION != "fp4" || $FRAMEWORK != "dynamo-sglang" || $SPEC_DECODING != "mtp" ]] &&
[[ $MODEL_PREFIX != "glm5.1" || $PRECISION != "fp8" || $FRAMEWORK != "tilert" || $SPEC_DECODING != "mtp" ]]; then
run_compat_launcher
fi

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 glm5.1+fp8+tilert compat-bypass condition (lines 51-52, 59) is not scoped to IS_AGENTIC, so it also captures the pre-existing non-agentic glm5.1-fp8-b200-tilert recipe, which previously worked via run_compat_launcher's legacy tilert exec path.

Extended reasoning...

The non-agentic glm5.1-fp8-b200-tilert master-config entry (configs/nvidia-master.yaml, ~line 9754) sets spec-decoding: mtp on all its scenarios and has no CONFIG_FILE additional-setting. After this diff it no longer falls through to run_compat_launcher (line 51-59 match), but the srt-slurm clone dispatch at line 111 only fires when IS_AGENTIC==1, so this recipe instead falls into the generic else clone branch (line 144, clones vanilla NVIDIA/srt-slurm and copies the unrelated kimi-k2.6 recipe) and then unconditionally hits if [[ -z "$CONFIG_FILE" ]]; then echo Error: CONFIG_FILE is not set...; exit 1; fi (line 307-311). A benchmark that ran successfully before this PR now fails every time with 'CONFIG_FILE is not set', a user-visible regression this diff must avoid by scoping the new elif at line 51-52 (or the line 59 clause) to IS_AGENTIC, or by giving the non-agentic recipe its own CONFIG_FILE/clone branch.

Verification: normal. The new glm5.1+fp8+tilert branches are not scoped to IS_AGENTIC, so they capture the pre-existing NON-agentic recipe glm5.1-fp8-b200-tilert (configs/nvidia-master.yaml:9754) and break it. That recipe: framework: tilert, precision: fp8, model-prefix: glm5.1, spec-decoding: "mtp" on both fixed-seq-len scenarios (so IS_AGENTIC=0), and no CONFIG_FILE additional-setting. Merged trace…

@github-actions

Copy link
Copy Markdown
Contributor

@cquil11
cquil11 force-pushed the agent/port-glm51-b200-tilert-agentx-srt-slurm branch from 01ac482 to 666d9bd Compare August 27, 2026 03:43
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@cquil11
cquil11 force-pushed the agent/port-glm51-b200-tilert-agentx-srt-slurm branch from 539f4c7 to c3a5b76 Compare August 27, 2026 07:34
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

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

There are 4 total unresolved issues (including 3 from previous reviews).

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 ce74d8a. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@cquil11 cquil11 removed the agentx-fast Run AgentX throughput with 1 warmup request per lane and a 20-minute profile; not reusable label Aug 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@cquil11
cquil11 merged commit 1d06f36 into main Aug 27, 2026
52 checks passed
@cquil11
cquil11 deleted the agent/port-glm51-b200-tilert-agentx-srt-slurm branch August 27, 2026 15:17
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.

1 participant