Skip to content

feat(agentic): add GLM-5.2 MI325X full-context sweeps / 新增 GLM-5.2 MI325X 全上下文 AgentX 扫描#2273

Open
JordanNanos wants to merge 35 commits into
mainfrom
feat/glm52-mi325x-agentx-full-context
Open

feat(agentic): add GLM-5.2 MI325X full-context sweeps / 新增 GLM-5.2 MI325X 全上下文 AgentX 扫描#2273
JordanNanos wants to merge 35 commits into
mainfrom
feat/glm52-mi325x-agentx-full-context

Conversation

@JordanNanos

@JordanNanos JordanNanos commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add a single-node GLM-5.2 FP8 AgentX full-context sweep on MI325X using SGLang TP8/EP1 and the AMD DSA TileLang prefill/decode backends.
  • Launch SGLang with the native 1,048,576-token context and an explicit 1,048,576-token GPU-resident BF16 KV pool. Automatic truncation remains disabled.
  • Expand the measured concurrency curve to [1, 2, 3, 4, 5, 6, 8] after the concurrency-1 qualification used about 35% of the KV pool.
  • Add an unofficial multi-node disaggregated AgentX sweep following the DeepSeek-V4-Pro convention: separate TP8 1P1D, 1P2D, and 2P1D topology arms, with at most four concurrency points per server allocation.
  • Keep EP and DP attention disabled for the multi-node sweep because the MoRI all-to-all path remains unstable on the MI325X Broadcom bnxt_re fleet.
  • Add MI325X Slurm launch, AgentX replay, result staging, and cleanup support without leaving root-owned files in the runner workspace.

Validation

  • bash -n passes for the new and modified AMD multi-node launch scripts.
  • uv run --with 'pydantic>=2' --with pyyaml --with pytest pytest utils/matrix_logic/ -q: 224 passed.
  • Exact config generation emits seven single-node points and three multi-node topology jobs with four concurrency points each.
  • utils/validate_perf_changelog.py --base-ref origin/main --head-ref HEAD: passed.
  • Successful unofficial concurrency-1 qualification: https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29654139122
  • The full single-node curve completed successfully at 7/7 points: https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29657732517
  • Concurrency 3 is the measured optimum: 1,393.6 total tok/s/GPU, about 307 completed requests/hour, 93% GPU KV usage, and 96.9% GPU prefix-cache hit rate. Concurrency 4 reaches 99% KV usage and regresses; concurrency 5 and above saturate the KV pool.
  • The workload checkout for the full curve is correct, but the outer workflow was dispatched from main, so its dashboard provenance label is wrong. Future unofficial dispatches will set both workflow and input refs to this feature branch.

中文说明

  • 新增 GLM-5.2 FP8 在 MI325X 上的单节点 AgentX 全上下文扫描,采用 SGLang TP8/EP1 及 AMD DSA TileLang 预填充/解码后端。
  • SGLang 按模型原生能力显式配置 1,048,576-token 上下文长度与 1,048,576-token GPU 常驻 BF16 KV 缓存池,并保持自动截断关闭。
  • 并发 1 验证约使用 35% KV 缓存池,因此将实测曲线扩展到 [1, 2, 3, 4, 5, 6, 8]
  • 按 DeepSeek-V4-Pro 的 AgentX 扫描惯例新增非正式多节点分离式推理扫描:分别测试 TP8 1P1D1P2D2P1D 拓扑,每次服务端分配最多连续测试 4 个并发点。
  • MI325X 的 Broadcom bnxt_re 集群上,MoRI all-to-all 路径仍不稳定,因此多节点扫描暂不启用 EP 和 DP attention。
  • 补齐 MI325X Slurm 启动、AgentX 回放、结果暂存与清理流程,确保不会在 runner 工作区遗留 root 权限文件。

验证

  • 新增及修改的 AMD 多节点启动脚本均通过 bash -n 语法检查。
  • uv run --with 'pydantic>=2' --with pyyaml --with pytest pytest utils/matrix_logic/ -q:224 项通过。
  • 使用精确筛选命令可生成 7 个单节点并发点,以及 3 个多节点拓扑任务;每个多节点任务包含 4 个并发点。
  • utils/validate_perf_changelog.py --base-ref origin/main --head-ref HEAD:通过。
  • 非正式并发 1 验证已成功完成:https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29654139122
  • 完整单节点曲线 7/7 个并发点全部成功:https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29657732517
  • 实测最优点为并发 3:单 GPU 总吞吐量 1,393.6 tok/s,约每小时完成 307 个请求,GPU KV 缓存占用率 93%,GPU 前缀缓存命中率 96.9%。并发 4 的 KV 缓存占用率达到 99% 后性能开始下降;并发 5 及以上会耗尽 KV 缓存池。
  • 完整曲线的工作负载检出分支正确,但外层 workflow 从 main 调度,导致 dashboard 来源标签错误;后续非正式调度会同时将 workflow ref 和输入 ref 指向本功能分支。

Add a concurrency-1 TP8 SGLang AgentX configuration that explicitly allocates the native 1,048,576-token BF16 KV pool on MI325X and replays the unfiltered corpus.

中文:新增 GLM-5.2 MI325X TP8 SGLang AgentX 并发 1 验证配置,显式分配原生 1,048,576-token BF16 KV 缓存池,并回放未过滤的完整语料。
Record PR #2273 in the append-only benchmark changelog entry.

中文:在仅追加的基准测试变更日志条目中记录 PR #2273
@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 关于重新运行失败任务的文档

3 similar comments
@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 关于重新运行失败任务的文档

@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 关于重新运行失败任务的文档

@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 关于重新运行失败任务的文档

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

Deferring — the inline finding (wrong --dsa-prefill/decode-backend flag name, should be --nsa-*) breaks server startup for this recipe's sole job, so a human should review before merge.

Extended reasoning...

This PR adds a single new benchmark recipe (config + shell script + changelog entry) for GLM-5.2 FP8 full-context AgentX qualification on MI325X. It follows the same structural pattern as many existing agentic recipes in the repo, and the changes to configs/amd-master.yaml and perf-changelog.yaml are simple, additive, and low risk in isolation.

However, the bug hunting system found a concrete, high-confidence defect in the new shell script: it passes --dsa-prefill-backend/--dsa-decode-backend to sglang.launch_server, but every other GLM-5.x recipe in this repo (fp4/fp8 variants across b200, b300, mi355x, mi325x, and multi-node slurm YAMLs) uses --nsa-prefill-backend/--nsa-decode-backend for the identical TileLang backend. I independently confirmed this via a repo-wide grep — there is no other --dsa-* usage anywhere. Since sglang parses args with argparse, this typo would cause the server process to exit immediately, so the job (the entire point of this PR) would fail on first run.

There are no security-sensitive concerns here (no auth, crypto, or permission logic touched), but this is exactly the kind of functional bug that warrants a human look before merge rather than an automated approval, since the PR as-is would not achieve its stated purpose.

Comment on lines +68 to +69
--dsa-prefill-backend tilelang
--dsa-decode-backend tilelang

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.

🔴 This recipe launches sglang with --dsa-prefill-backend tilelang / --dsa-decode-backend tilelang (lines 68-69), but SGLang's actual CLI flag for this sparse-attention backend is --nsa-* (Native Sparse Attention), not --dsa-* — every other GLM-5.x sglang recipe in the repo uses --nsa-prefill-backend/--nsa-decode-backend for the identical TileLang backend. Since sglang.launch_server uses argparse, this unrecognized flag will make the server process exit immediately on startup, causing wait_for_server_ready to time out and the whole qualification job to fail.

Extended reasoning...

The bug: benchmarks/single_node/agentic/glm5.2_fp8_mi325x.sh builds SGLANG_CMD with:

--dsa-prefill-backend tilelang
--dsa-decode-backend tilelang

SGLang does not expose a --dsa-prefill-backend/--dsa-decode-backend CLI flag anywhere in this repo's usage. The correct flag family, used consistently across every other GLM-5.x sglang recipe (glm5_fp8_mi325x.sh, glm5_fp8_mi355x.sh, the _mtp variants, glm5.1_fp4_mi355x.sh, and the multi-node GLM-5.1 slurm YAMLs on gb300), is --nsa-prefill-backend / --nsa-decode-backend (NSA = Native Sparse Attention, SGLang's actual server-arg name for this sparse-attention backend selector).

Why the author made this mistake: GLM-5.2 (like GLM-5/5.1) is internally architected as GlmMoeDsaForCausalLM — 'DSA' is the informal architecture/model-class name used in ZAI's docs and in this script's own comment ('the DSA TileLang backends'). The author appears to have named the CLI flag after the architecture rather than checking SGLang's actual exposed argument, which remains nsa regardless of the underlying model naming.

Why nothing catches this before merge: The PR's validation section only runs bash -n (a syntax check) and a local matrix-generation dry run (pytest utils/matrix_logic/). Neither exercises the actual sglang server process, so an argparse-level 'unrecognized arguments' failure is invisible until the real GPU job runs.

Step-by-step proof of impact:

  1. The generated job invokes this script, which builds and execs SGLANG_CMD, including --dsa-prefill-backend tilelang --dsa-decode-backend tilelang.
  2. python3 -m sglang.launch_server parses argv with argparse. --dsa-prefill-backend is not a registered option and is not a prefix of any registered option (in particular, it is not a prefix of --nsa-prefill-backend, since they differ at the very first differentiating character group), so argparse cannot fuzzy-match it.
  3. argparse aborts immediately with error: unrecognized arguments: --dsa-prefill-backend tilelang --dsa-decode-backend tilelang and a non-zero exit code, before the server ever binds to --port.
  4. The script backgrounds the process ("${SGLANG_CMD[@]}" > "$SERVER_LOG" 2>&1 &) and then calls wait_for_server_ready --port "$PORT" ... --server-pid "$SERVER_PID", which polls for the port to come up. Since the process already exited, this polling times out (or detects the dead PID) and the script fails.
  5. The entire GLM-5.2 MI325X full-context qualification job — the sole purpose of this PR — fails on every run, before a single token is ever served.

The fix is a one-line-times-two rename: --dsa-prefill-backend--nsa-prefill-backend and --dsa-decode-backend--nsa-decode-backend, matching every sibling GLM-5.x sglang recipe in the repo (e.g. benchmarks/single_node/fixed_seq_len/glm5_fp8_mi325x.sh uses this exact pair for the same MI325X SKU and the same TileLang backend).

Avoid the gfx942 sgl-kernel JIT failure caused by its CUDA cooperative_groups.h include by selecting the Torch DSA top-k fallback and disabling fused top-k.

中文:MI30X 镜像的 sgl-kernel JIT 在 gfx942 编译时错误引用 CUDA cooperative_groups.h;改用 Torch DSA top-k 回退实现并关闭融合 top-k,避免启动失败。
Disable the independently gated topk_v2 CUDA-graph planner so the configured Torch DSA top-k fallback is honored on gfx942.

中文:在 MI325X 上禁用独立控制的 topk_v2 CUDA Graph 规划内核,确保 gfx942 使用已配置的 Torch DSA top-k 回退路径。
@JordanNanos

Copy link
Copy Markdown
Collaborator Author

The unofficial MI325X full-context qualification passed: https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29654139122

  • Runner: mi325x-amds_03
  • Every TP rank allocated exactly 1,048,576 BF16 KV tokens (97.81 GB/rank).
  • SGLang reported context_len=1048576, max_total_num_tokens=1048576, and allow_auto_truncate=False before becoming ready.
  • AgentX completed 41 requests with no errors, processing 10,935,651 input tokens. The observed maximum prompt/output lengths were 341,549/17,710 tokens.
  • The successful retry includes the gfx942 workaround in 884dc14d, which disables the independently gated CUDA-only topk_v2 planner in addition to selecting the Torch DSA top-k fallback.

This validates the native 1M server/KV operating point on MI325X. The one-hour trace did not include a single 1M-token request, so it is not an empirical 1M single-request replay.

中文:MI325X 非正式全上下文验证已通过:https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29654139122

  • 运行节点:mi325x-amds_03
  • 每个 TP rank 均分配了 1,048,576 个 BF16 KV token(每个 rank 97.81 GB)。
  • SGLang 就绪前报告 context_len=1048576max_total_num_tokens=1048576,且 allow_auto_truncate=False
  • AgentX 共完成 41 个请求且无错误,累计处理 10,935,651 个输入 token;观测到的最长 prompt/output 分别为 341,549/17,710 token。
  • 成功重试包含提交 884dc14d 中的 gfx942 兼容修复:除选择 Torch DSA top-k 回退路径外,还禁用了独立控制、仅支持 CUDA 的 topk_v2 规划内核。

该结果验证了 MI325X 上原生 1M 上下文的服务端与 KV 工作点。本次一小时 trace 未包含单个 1M-token 请求,因此不属于 1M 单请求的实测回放。

Expand the full-context AgentX configuration to sample concurrency densely around the expected BF16 KV-pool capacity knee.\n\n中文:扩展 GLM-5.2 MI325X 全上下文 AgentX 配置,在预期的 BF16 KV 缓存池容量拐点附近进行密集并发采样。
Add full-context AgentX 1P1D, 1P2D, and 2P1D TP8 topology arms, plus MI325X Slurm launch and artifact plumbing. Keep EP/DP attention disabled on the Broadcom bnxt_re fleet.

中文:新增 GLM-5.2 MI325X 全上下文 AgentX 分离式推理扫描,覆盖 TP8 的 1P1D、1P2D 和 2P1D 拓扑,并补齐 MI325X Slurm 启动与产物收集流程。Broadcom bnxt_re 集群暂不启用 EP/DP attention。
@JordanNanos JordanNanos changed the title feat(agentic): add GLM-5.2 MI325X full-context qualification / 新增 GLM-5.2 MI325X 全上下文 AgentX 验证 feat(agentic): add GLM-5.2 MI325X full-context sweeps / 新增 GLM-5.2 MI325X 全上下文 AgentX 扫描 Jul 18, 2026
中文:将 main 合并到 GLM-5.2 MI325X 扫描分支,并按追加规则重新放置性能变更日志条目。
Serialize missing-model downloads into the MI325X shared NFS Hugging Face cache before submitting disaggregated Slurm jobs.

中文:在提交 MI325X 分离式 Slurm 任务前,将缺失的 GLM-5.2 模型串行下载到共享 NFS Hugging Face 缓存,避免多个拓扑重复下载。
Use privileged directory creation only when the MI325X NFS cache is absent, then assign ownership to the runner before downloading model files.

中文:仅在 MI325X NFS 缓存目录缺失时使用特权创建目录,并在下载模型文件前立即将目录所有权交给 runner 用户。
Place the shared Hugging Face cache under the common runner-home filesystem already used for Slurm logs, avoiding the root-squashed data export.

中文:将共享 Hugging Face 缓存放到 Slurm 日志已验证可见的 runner 公共主目录文件系统中,绕过启用 root-squash 的数据挂载。
Propagate the multi-node container srun exit code and relay the preserved Slurm stderr through the GitHub job log.

中文:向上传递多节点容器 srun 的退出码,并将保留的 Slurm stderr 输出到 GitHub 任务日志,便于准确定位分布式服务启动失败。
Stage a per-run repository copy and Slurm logs under the runner-common filesystem proven visible on all compute nodes, then copy artifacts back and clean it.

中文:在所有计算节点均可见的 runner 公共文件系统中暂存每次运行的仓库副本与 Slurm 日志,完成后回传产物并清理,避免节点无法访问 runner 专属工作目录。
Allow NFS metadata to settle after a fast batch exit, then relay stderr and extended accounting before cleaning the per-run directory.

中文:Slurm 批任务快速退出后等待 NFS 元数据同步,再输出 stderr 与扩展计费状态,最后清理本次运行目录,避免丢失真实错误。
Run distributed container tasks with a non-login host shell and report the resolved Docker image before launch.\n\n中文:在 Slurm 分布式容器任务中使用非登录宿主机 shell,避免加载陈旧的 runner profile;启动前输出最终解析的 Docker 镜像。
Emit the resolved Docker argv for MI325X distributed launch failures so malformed arguments can be identified from Slurm stderr.\n\n中文:在 MI325X 分布式启动失败时输出最终 Docker 参数,便于从 Slurm stderr 中定位格式错误的参数。
Pass space-bearing metadata through Docker environment inheritance so JSON remains a single value in distributed Slurm launches. Remove the temporary argv trace.\n\n中文:通过 Docker 环境变量继承传递包含空格的元数据,确保 JSON 在 Slurm 分布式启动中保持为单一参数;同时移除临时参数跟踪。
Pass runner-selected RDMA settings into distributed SGLang containers, pre-pull the image on every allocated node before the creation barrier, and persist server logs in the shared benchmark directory.\n\n中文:将 runner 选择的 RDMA 配置传入 SGLang 分布式容器,在容器创建屏障前为所有分配节点预拉取镜像,并将服务端日志持久化到共享基准测试目录。
When a distributed SGLang process dies during a blocking startup wait, print its local prefill or decode log before tearing down the Slurm step.\n\n中文:分布式 SGLang 进程在启动等待阶段退出时,先输出对应节点的预填充或解码日志,再终止 Slurm 任务步骤。
Replace the unsupported DSA backend options with the NSA prefill/decode option names exposed by the MI325X disaggregated SGLang image.\n\n中文:将不受支持的 DSA 后端参数替换为 MI325X 分离式 SGLang 镜像实际提供的 NSA 预填充/解码参数名。
Reap failed SGLang server processes, report their return code, and allow process-substitution logs to flush before printing the local failure log.\n\n中文:回收失败的 SGLang 服务进程并输出返回码,同时等待进程替换日志完成刷新后再打印本地故障日志。
Mirror the working MI325X single-node top-k fallbacks in the disaggregated launcher and enable informative startup logging for GLM-5.2 worker initialization.\n\n中文:在分离式启动器中复用 MI325X 单节点已验证的 top-k 回退配置,并为 GLM-5.2 worker 初始化启用更详细的启动日志。
Use the same ROCm 7.2 SGLang 0.5.15 image as the successful single-node run. This published image includes MoRI and Broadcom userspace support while adding current GLM-5.2 runtime support.

中文:GLM-5.2 分离式推理改用当前版本的 SGLang

使用已通过单节点测试的 ROCm 7.2 SGLang 0.5.15 镜像。该公开镜像同时包含 MoRI、Broadcom 用户态支持以及当前 GLM-5.2 运行时支持。
Match the successful MI325X single-node recipe by selecting TileLang DSA attention and the Torch top-k backend. This avoids the sgl-kernel CUDA-only top-k path on gfx942.

中文:GLM-5.2 分离式推理改用可移植的 DSA top-k 后端

与已通过测试的 MI325X 单节点方案保持一致,DSA attention 使用 TileLang,top-k 使用 Torch 后端,避免 gfx942 上 sgl-kernel 的 CUDA 专用 top-k 路径。
Mirror GLM-5.2 scheduler exceptions to synchronous stderr before SGLang tears down its process tree, so MI325X Slurm logs preserve the actual initialization failure.

中文:输出 SGLang scheduler 初始化错误

在 SGLang 清理进程树之前,将 GLM-5.2 scheduler 异常同步写入 stderr,使 MI325X Slurm 日志能够保留真实的初始化失败原因。
Wrap the GLM-5.2 scheduler multiprocessing target so failures before SGLang enters its internal exception handler are written synchronously to stderr.

中文:追踪 scheduler 进程启动失败

为 GLM-5.2 scheduler 的 multiprocessing 入口增加外层异常输出,使 SGLang 内部异常处理器启动前的失败也能同步写入 stderr。
Patch the stable multiprocessing target assignment used by the published ROCm image so pre-handler scheduler failures are captured synchronously.

中文:适配 SGLang scheduler 入口布局

针对公开 ROCm 镜像中稳定的 multiprocessing target 赋值位置应用补丁,从而同步捕获内部异常处理器启动前的 scheduler 失败。
Use whitespace-tolerant matching for the scheduler multiprocessing target in the published ROCm image so the diagnostic wrapper is applied reliably.

中文:灵活匹配 scheduler 进程入口

对公开 ROCm 镜像中的 scheduler multiprocessing 入口使用可容忍空白差异的匹配方式,确保诊断包装器可靠生效。
Correct the Python raw regexes used to instrument the SGLang scheduler process so the diagnostic wrapper is actually installed.\n\n中文:修正用于插桩 SGLang 调度器进程的 Python 原始正则表达式,确保诊断包装器能够正确安装。
Mirror uncaught launch exceptions directly to stderr and enable Python fatal-signal traces for the GLM-5.2 disaggregated startup investigation.\n\n中文:将未捕获的启动异常直接同步输出到 stderr,并启用 Python 致命信号追踪,用于排查 GLM-5.2 分离式推理启动失败。
Install sentencepiece and tiktoken for GLM-5.2 disaggregated workers, which otherwise fail before model loading while constructing the tokenizer. Remove the temporary traceback instrumentation now that the root cause is identified.\n\n中文:为 GLM-5.2 分离式推理工作进程安装 sentencepiece 和 tiktoken,避免在模型加载前构建分词器时失败。根因已确认,同时移除临时异常追踪插桩。
Require the MI325X multi-node cache snapshot to contain its config, weight index, and tokenizer files before reuse. An incomplete GLM-5.2 snapshot is now resumed through snapshot_download instead of reaching SGLang without tokenizer.json. Remove the unnecessary tokenizer dependency installation.\n\n中文:MI325X 多节点共享缓存快照只有在配置、权重索引和分词器文件齐全时才会复用。若 GLM-5.2 快照不完整,将通过 snapshot_download 续传,避免缺少 tokenizer.json 时直接启动 SGLang;同时移除不必要的分词器依赖安装。
Point MI325X multi-node GLM-5.2 jobs at the exact node-local Hugging Face snapshot already validated by the successful single-node sweep on nodes 017 and 018. This avoids reconstructing the 753 GB checkpoint in the controller-visible cache.\n\n中文:MI325X 多节点 GLM-5.2 任务改为复用节点 017 和 018 上已通过单节点扫描验证的 Hugging Face 精确快照,避免在控制器可见缓存中重新构建 753 GB 检查点。
中文:将 GLM-5.2 MI325X 分离式推理的服务同步等待时间延长到一小时,并将该配置传入各 Slurm 容器,以适配多节点并发加载模型时更长的启动时间。
中文:同步最新 main,并按追加式变更日志规则将本 PR 的 GLM-5.2 MI325X 基准测试条目重新追加到文件末尾。
中文:合并本 PR 的 GLM-5.2 MI325X 变更日志条目,确保正式扫描仅执行一次 7 点单节点曲线和一次 12 点多节点曲线,避免重复占用 GPU。
@github-actions

Copy link
Copy Markdown
Contributor

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

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant