Skip to content

[NV][AgentX] Add glm5.1-fp8-b200-tilert-agentic (TileRT PD disagg) / [NV][AgentX] 新增 glm5.1-fp8-b200-tilert-agentic(TileRT PD 分离) - #2645

Draft
CrimsonDump wants to merge 1 commit into
SemiAnalysisAI:mainfrom
CrimsonDump:glm5.1_fp8_tilert_agentic
Draft

[NV][AgentX] Add glm5.1-fp8-b200-tilert-agentic (TileRT PD disagg) / [NV][AgentX] 新增 glm5.1-fp8-b200-tilert-agentic(TileRT PD 分离)#2645
CrimsonDump wants to merge 1 commit into
SemiAnalysisAI:mainfrom
CrimsonDump:glm5.1_fp8_tilert_agentic

Conversation

@CrimsonDump

@CrimsonDump CrimsonDump commented Aug 18, 2026

Copy link
Copy Markdown

Description

Add the GLM-5.1-FP8 B200 AgentX (agentic-coding) submission on TileRT PD disaggregation as one
new master-config key and one new multi-node recipe, and pin TileRT to 0.1.5.post3.

  • glm5.1-fp8-b200-tilert-agentic — vLLM prefill + TileRT decode, 1P1D with TP8 on each side
    and nixl KV transfer, driven by the new recipe
    benchmarks/multi_node/agentic/glm5.1_fp8_b200_tilert-disagg.sh. The fixed-sequence-length
    recipe for the same topology already exists; this is its agentic sibling and reuses the same
    tilert_utils/ entry points.
  • A separate config key rather than a second scenario on glm5.1-fp8-b200-tilert, because
    agentic master configs must declare a cluster: runner. configs/runners.yaml gains the
    cluster:b200-dgxc-slurm label mapping to b200-dgxc-slurm_7/8/9.
  • Concurrency is the single point [1]. A TileRT decode engine serves one sequence at a time,
    so the trajectory count stays at 1 and the router queues the concurrent turns that an agentic
    session fans out into. kv-offloading: none — all KV state lives on the GPU and TileRT
    exposes no DRAM offload tier.
  • runners/launch_b200-dgxc.sh honors SCENARIO_SUBDIR, so agentic-coding configs pick the
    recipe under multi_node/agentic/ instead of the one at the multi_node/ root.
  • benchmarks/multi_node/tilert_utils/run_node.sh gains the agentic branch: an AIPerf trace
    replay per concurrency under LOGS/agentic/conc_<N>/, the router queue timeout, and a second
    --served-model-name so vLLM accepts the HF repo id that the replay sends as --model.

Why TileRT 0.1.5.post3

post3 carries two changes this submission depends on.

  • PD overhead reduction. The decode loop moved from the prefill-phase entry point to the
    decode-phase one, with chained AR steps and a single bulk device-to-host copy of the AR
    buffer instead of a per-step synchronize and per-token readback. This closes most of the
    remaining gap to the non-PD engine reference.
  • Request queueing for AgentX. A TileRT decode engine serves one sequence at a time, and an
    agentic session fans out into concurrent turns (parent plus sub-conversations). The router
    previously answered 429 as soon as every decode node was reserved. --queue-timeout <s>
    makes the request wait for a free node instead, which is what an AgentX replay needs: the
    burst is wider than the pool but short-lived. The default 0 keeps the fail-fast behaviour,
    so fixed-sequence-length runs are unaffected.

benchmarks/multi_node/tilert_utils/setup_deps.sh pins tilert==0.1.5.post3, and the router
version metadata on both TileRT master-config keys is bumped to match.

Validation

  • utils/validate_perf_changelog.py against origin/main passes, with zero deleted lines.
  • generate_sweep_configs.py test-config --config-keys glm5.1-fp8-b200-tilert-agentic --scenario-type agentic-coding --conc 1 generates exactly one job.
  • pytest utils/matrix_logic — 231 matrix and validation tests pass.
  • YAML parsing and bash -n pass on every touched file.
  • End-to-end on two 8×B200 nodes: a 3600 s replay at concurrency 1 completed 539 requests
    with zero errors
    and submission_valid: true.

Open questions

Three things we cannot settle on our side.

1. Runner label. Agentic master configs must use a cluster:<name> runner, and no existing
cluster label covers the multi-node B200 machines (cluster:b200-dgxc is the ten single-node
b200-dgxc_* runners). This PR adds the cluster:b200-dgxc-slurm mapping to
configs/runners.yaml, but the label also has to exist on the runners themselves. Could you
add it to b200-dgxc-slurm_7 / _8 / _9 — the same alias pattern as cluster:mi355x-amds vs
mi355x, no new machines, the same three nodes b200-multinode already covers? We would also
add the matching hardware: entry — are the values the same as cluster:b200-dgxc
(available-cpu-dram-mib: 3095781, gpus-per-node: 8)?

2. No engine-side Prometheus metrics. TileRT exposes /metrics on neither the router nor
the decode engine; only the vLLM prefill does. The aggregate therefore carries
server_metrics.present: false, and 9 of the 12 metrics_plots.png panels render empty (KV
utilization, queue depth, prefix-cache hit rate, throughput over time, preemptions, and the
KV-offload panels — empty for us in any case, since kv-offloading: none). Client-side metrics
are unaffected: TTFT, TPOT, ITL, E2EL, interactivity, throughput per GPU, token counts and the
theoretical cache-hit rate all come from the AIPerf records. Is that acceptable for ingest and
the dashboard?

3. Corpus coverage. GLM-5.1's native context is 202752 positions. --max-context-length
drops a trace whenever its peak context exceeds that, so 175 of the 393 traces in
cc-traces-weka-062126-256k remain eligible — about 14.7% of the corpus's requests by count.
Is that acceptable as-is?

中文说明

新增 GLM-5.1-FP8 B200 AgentX(agentic-coding)在 TileRT PD 分离上的提交,包含一个新的主配置键
与一个新的多节点配方,并将 TileRT 固定到 0.1.5.post3

  • glm5.1-fp8-b200-tilert-agentic —— vLLM prefill + TileRT decode,1P1D、两侧各 TP8,KV 走
    nixl 传输,由新增配方 benchmarks/multi_node/agentic/glm5.1_fp8_b200_tilert-disagg.sh
    驱动。相同拓扑的定长配方已存在,本配方是其 agentic 版本,复用同一套 tilert_utils/ 入口。
  • 采用独立的配置键而非在 glm5.1-fp8-b200-tilert 上追加场景,因为 agentic 主配置必须声明
    cluster: runner。configs/runners.yaml 新增 cluster:b200-dgxc-slurm label,映射到
    b200-dgxc-slurm_7/8/9
  • 并发取单点 [1]。TileRT 的 decode 引擎一次只服务一条序列,因此 trajectory 数保持 1,
    agentic 会话扇出的并发轮次由 router 排队。kv-offloading: none —— KV 状态全部驻留 GPU,
    TileRT 不提供 DRAM offload 层。
  • runners/launch_b200-dgxc.sh 识别 SCENARIO_SUBDIR,使 agentic-coding 配置选中
    multi_node/agentic/ 下的配方,而非 multi_node/ 根目录那份。
  • benchmarks/multi_node/tilert_utils/run_node.sh 新增 agentic 分支:按并发在
    LOGS/agentic/conc_<N>/ 下运行 AIPerf trace 回放、设置 router 排队超时,并追加第二个
    --served-model-name,使 vLLM 接受回放以 --model 发来的 HF repo id。

为什么需要 TileRT 0.1.5.post3

post3 带来本次提交依赖的两项改动。

  • PD 开销优化。 decode 循环从 prefill 阶段入口改为 decode 阶段入口,配合链式 AR 与对 AR
    缓冲区的单次整块 D2H 拷贝,取代原先每步一次同步、每 token 一次回读。这基本抹平了与非 PD
    引擎参照之间的剩余差距。
  • 面向 AgentX 的请求排队。 TileRT 的 decode 引擎一次只服务一条序列,而 agentic 会话会扇出
    成并发的多轮(父对话加子对话)。此前 router 在所有 decode 节点被占满时立即返回 429
    --queue-timeout <秒> 改为让请求等待空闲节点,这正是 AgentX 回放所需:突发宽度大于池子但
    持续很短。默认值 0 保持原有的 fail-fast 行为,因此定长场景不受影响。

benchmarks/multi_node/tilert_utils/setup_deps.sh 将依赖固定为 tilert==0.1.5.post3,两个
TileRT 主配置键上的 router 版本元数据同步更新。

本地验证

  • utils/validate_perf_changelog.pyorigin/main 校验通过,删除行为 0。
  • generate_sweep_configs.py test-config --config-keys glm5.1-fp8-b200-tilert-agentic --scenario-type agentic-coding --conc 1 恰好生成 1 个 job。
  • pytest utils/matrix_logic —— 231 项矩阵与校验测试全部通过。
  • 所有改动文件的 YAML 解析与 bash -n 均通过。
  • 双节点 8×B200 真机端到端:并发 1 下的 3600 秒回放完成 539 个请求、零错误
    submission_valid: true

待确认问题

以下三点我们这边无法自行决定。

1. Runner label。 agentic 主配置必须使用 cluster:<name> runner,而现有的 cluster label
没有一个覆盖多节点 B200 机器(cluster:b200-dgxc 指的是 b200-dgxc_* 那十台单机)。本 PR 已在
configs/runners.yaml 中新增 cluster:b200-dgxc-slurm 映射,但该 label 同时需要真实存在于
runner 上。能否为 b200-dgxc-slurm_7 / _8 / _9 添加此 label —— 与 cluster:mi355x-amds
mi355x 是同一种别名做法,不需要新机器,就是 b200-multinode 已经在用的这三台。我们也会补上
对应的 hardware: 条目 —— 取值是否与 cluster:b200-dgxc 相同(available-cpu-dram-mib: 3095781gpus-per-node: 8)?

2. 引擎侧没有 Prometheus 指标。 TileRT 的 router 与 decode 引擎均不暴露 /metrics,只有
vLLM prefill 有。因此聚合结果会是 server_metrics.present: falsemetrics_plots.png 的 12 个
面板中会有 9 个为空(KV 利用率、队列深度、prefix cache 命中率、吞吐时序、preemption,以及那几个
KV offload 面板 —— 我们 kv-offloading: none,本就应为空)。客户端指标不受影响:TTFT、TPOT、
ITL、E2EL、interactivity、每 GPU 吞吐、token 计数与理想缓存命中率均来自 AIPerf 自身记录。
这对 ingest 与 dashboard 可接受吗?

3. 语料覆盖率。 GLM-5.1 的原生上下文为 202752。--max-context-length 按整条 trace 的峰值
上下文丢弃,因此 cc-traces-weka-062126-256k 的 393 条中仅剩 175 条可用,按请求数计约覆盖语料
的 14.7%。这样可以接受吗?

Related Issue

N/A

Type of Change

  • New feature
  • Configuration change

Checklist

  • I have tested my changes locally
  • For every change that can affect benchmark performance and every recipe addition or modification, I have appended a new entry to the physical end of perf-changelog.yaml and have not edited historical entries
  • Before merging via reuse, an authorized maintainer (OWNER/MEMBER/COLLABORATOR) has commented /reuse-sweep-run on this PR

Oseltamivir pushed a commit that referenced this pull request Aug 18, 2026
…a TileRT)

Ported from #2645. Original PR author: CrimsonDump (@CrimsonDump).

从 #2645 迁移。原 PR 作者:CrimsonDump(@CrimsonDump)。

(cherry picked from commit 24d7457)
Oseltamivir pushed a commit that referenced this pull request Aug 18, 2026
…a TileRT)

Ported from #2645. Original PR author: CrimsonDump (@CrimsonDump).

从 #2645 迁移。原 PR 作者:CrimsonDump(@CrimsonDump)。

(cherry picked from commit 24d7457)
Oseltamivir pushed a commit that referenced this pull request Aug 18, 2026
…a TileRT)

Ported from #2645. Original PR author: CrimsonDump (@CrimsonDump).

从 #2645 迁移。原 PR 作者:CrimsonDump(@CrimsonDump)。

(cherry picked from commit 24d7457)
Oseltamivir pushed a commit that referenced this pull request Aug 19, 2026
…a TileRT)

Ported from #2645. Original PR author: CrimsonDump (@CrimsonDump).

Build and pin an internal TileRT post2 queueing backport because upstream post3 is unavailable.

从 #2645 迁移。原 PR 作者:CrimsonDump(@CrimsonDump)。

由于上游 post3 不可获取,构建并固定内部 TileRT post2 排队 backport。

(cherry picked from commit 24d7457)
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