GLM-5.3 PD 部署:验收全绿与性能报告(2026-10-18)

14 台 8×RTX 6000D · 8P+6D · 目标负载:agent 多轮对话

结论

一句话:GLM-5.3 的 PD 集群(8 个 prefill + 6 个 decode,共 14 台)验收全部通过,官方 34 项 34/34、团队 features / agent 全过、长上下文三档全过、18 项统一测试 18/18,测试全部直连我们自己的入口。配置按 agent 多轮对话调优:单流每 token 约 11 ms(约 90 token/s),128 个并发 agent 会话时集群输出 3125 token/s,0 错误。本轮修复了关闭思考无效(官方 34 项从 26/34 到 34/34)、Anthropic effort: none 无效、前端偶发 500 三个问题。

官方 34 项
34/34
修复前 26/34
单流每 token
10.9 ms
2K 上下文,约 92 token/s
128 会话输出
3,125 tok/s
0 错误,缓存命中 95.9%
后续轮次首字
1.8 s
单会话 p50;96 会话 4.2 s
1M 冷启动
190 s
门槛 600 s,cached=0

本报告在做什么

这份报告总结 10-18 这一轮:上线了哪些改动、验收结果、单流和并发速度、为 agent 场景做的取舍、试过但没采用的方案,以及下一阶段方向。所有验收和压测都在 n13 上直接打我们自己的入口(:29201 转发层 → :30200 前端),不经过外部网关。压测请求每条带唯一前缀,冷请求必须 cached_tokens=0 才算有效;本报告所有数据都满足这一条。

环境与拓扑

项配置
硬件14 台,每台 8×RTX 6000D(SM120,PCIe,无 NVLink)、2×Xeon Gold 6530(4 个 NUMA 节点)、8×ConnectX-8 400G
布局8P+6D:prefill n41 n43 n44 n57 n59 n60 n61 n63;decode n42 n53 n55 n56 n58 n62
prefillPP8×TP1,chunk 2048,每个 stage 算完立即发送 KV(early KV send)
decodeTP8×DCP4,MoE TP8(不用 EP8),MTP 3 步 / 4 个 draft token,CUDA graph 到 bs32,PCIe-IPC allreduce
KV 传输Mooncake RDMA(8 条 rail),prefill_complete 分配策略
worker 镜像zhongtian-ai/sglang:glm53-06b21661b009(sglang main,含 #109)
前端zhongtian-ai/openai-http-frontend:854a9e2c67f8(dynamo main):按缓存放置会话、换 prefill 留余量(#43/#45),Anthropic effort(#46),连接池空闲超时(#47)

验收

同一套测试,修复前(10-17,PD 切换后第一次验收)和现在(10-18,新镜像)对比。全部直连我们的入口。

项修复前(10-17)现在(10-18)
官方 34 项❌ 26/34(关闭思考、工具调用、Responses)✅ 34/34
团队 validate_features✅ 通过✅ 通过
团队 validate_agent❌ A 段 effort=none 0/3✅ A 18/18 · B 6/6 · C ✓ · D 9/9
长上下文 131K(门槛 90 s)—✅ 3/3:12.8–13.1 s
长上下文 512K(门槛 300 s)—✅ 3/3:64.9–65.2 s
长上下文 1M(门槛 600 s)—✅ 2/2:190.1–190.9 s
18 项统一测试❌ 17/18(D-cache)✅ 18/18
协议 / 缓存 / 计费 api_check✅ 19/19✅ 19/19

单流速度

一个请求单独跑(冷,1000 token 输出)。每 token 时间几乎不随上下文变长;首字时间主要是 prefill 计算。压测文本重复度高,MTP 接受长度约 3.9;真实文本约 2.3–2.4,实际每 token 约 13–14 ms(约 70–75 token/s)。

02.557.51012.5每 token(ms) · 2K: 10.910.9每 token(ms) · 32K: 11.111.1每 token(ms) · 128K: 11.311.32K32K128Kms输入上下文
每 token(ms)单流每 token 时间 p50 (越低越好)
输入上下文首字 p50 / p99每 token p50单流速度recall
2K1.2 / 1.3 s10.9 ms≈92 tok/s16/16
32K3.7 / 4.1 s11.1 ms≈90 tok/s13/13
128K11.7 / 12.0 s11.3 ms≈88 tok/s9/9

单流每 token 时间:这一路的变化

2K 上下文,单请求。前三档来自 n63→n62 测试对,最后一档是现在的整个集群。

010203040每 token(ms) · 调优前: 33.633.6每 token(ms) · decode 修复: 20.520.5每 token(ms) · + MTP 3/4: 10.910.9每 token(ms) · 现在(集群): 10.910.9调优前decode 修复+ MTP 3/4现在(集群)ms
每 token(ms)单流每 token 时间 (越低越好)

并发:agent 多轮会话 1 → 128

每个会话是一个 agent 任务:2 万 token 前缀,每轮追加约 2K token 工具结果、输出 300 token、等 2 秒再发下一轮,上下文到 10 万为止。每档跑 240 秒,全部 0 错误(64 会话那一档的 1 次 500 已查清并修复,见“发现的问题”),冷请求 cached=0。

01000200030004000集群输出 tok/s: 5151集群输出 tok/s: 200200集群输出 tok/s: 710710集群输出 tok/s: 12511251集群输出 tok/s: 20272027集群输出 tok/s: 26982698集群输出 tok/s: 312531251416326496128tok/s并发 agent 会话数
集群输出 tok/s集群总输出 token/s
会话数输出 tok/s后续轮次首字 p50 / p90 / p99每 token p50 / p99缓存命中
1511.77 / 1.94 / 2.05 s7.1 / 9.3 ms95.5%
42001.79 / 1.97 / 2.11 s7.0 / 10.8 ms95.5%
167102.19 / 2.88 / 3.91 s7.9 / 12.7 ms95.4%
321,2512.71 / 3.52 / 4.33 s9.8 / 15.5 ms95.3%
642,0273.42 / 4.45 / 5.41 s13.4 / 21.1 ms95.5%
962,6984.21 / 5.31 / 6.53 s15.2 / 25.1 ms95.8%
1283,1254.88 / 6.61 / 9.79 s17.4 / 29.1 ms95.9%

并发下的首字和每 token 时间

0246810后续轮次首字 p50(s): 1.81.8后续轮次首字 p50(s): 1.81.8后续轮次首字 p50(s): 2.22.2后续轮次首字 p50(s): 2.72.7后续轮次首字 p50(s): 3.43.4后续轮次首字 p50(s): 4.24.2后续轮次首字 p50(s): 4.94.9后续轮次首字 p99(s): 22后续轮次首字 p99(s): 2.12.1后续轮次首字 p99(s): 3.93.9后续轮次首字 p99(s): 4.34.3后续轮次首字 p99(s): 5.45.4后续轮次首字 p99(s): 6.56.5后续轮次首字 p99(s): 9.89.81416326496128秒并发 agent 会话数
后续轮次首字 p50(s)后续轮次首字 p99(s)首字时间 (越低越好)

并发下的每 token 时间

05101520每 token p50(ms): 7.17.1每 token p50(ms): 77每 token p50(ms): 7.97.9每 token p50(ms): 9.89.8每 token p50(ms): 13.413.4每 token p50(ms): 15.215.2每 token p50(ms): 17.417.41416326496128ms并发 agent 会话数
每 token p50(ms)每 token 时间 (越低越好)

128 会话时各节点利用率

prefill 取第一个 PP stage 的忙碌比例,平均约 82%,排队 ≤0.7。decode 6 台都是 100% 忙,平均每台 9 个请求在跑,KV 用到 89–91%(峰值 99%):再往上加会话,decode KV 会先不够,所以 128 会话就是这个布局的上限。(这一轮采样把 n53 误归到了 prefill 组,它的 decode 数据没采到,采样脚本已修正。)

020406080100PP0 忙碌 % · n41: 9090PP0 忙碌 % · n43: 8181PP0 忙碌 % · n44: 7575PP0 忙碌 % · n57: 6666PP0 忙碌 % · n59: 9797PP0 忙碌 % · n60: 8787PP0 忙碌 % · n61: 7575PP0 忙碌 % · n63: 8282PP7 忙碌 % · n41: 8686PP7 忙碌 % · n43: 7575PP7 忙碌 % · n44: 6969PP7 忙碌 % · n57: 5959PP7 忙碌 % · n59: 9696PP7 忙碌 % · n60: 8383PP7 忙碌 % · n61: 6868PP7 忙碌 % · n63: 7676n41n43n44n57n59n60n61n63%prefill 节点
PP0 忙碌 %PP7 忙碌 %prefill 忙碌比例
decode 节点忙碌平均在跑(最大)KV 平均(峰值)输出 tok/s
n42100%8.9(17)91%(99%)525
n55100%9.6(18)90%(99%)515
n56100%9.1(16)89%(99%)528
n58100%9.3(15)90%(99%)511
n62100%9.5(16)89%(99%)535

冷长 prompt 混合(并发 96)

每条请求都不命中缓存,长度按固定比例 4K:32K:135K = 6:3:1。这是我们为 agent 场景让出去的部分:冷长请求的 p99 首字较长。

输出 tok/s输入 tok/s首字 p50 / p90 / p99每 token p50recall
1,72696,6979.0 / 22.3 / 147.3 s18.2 ms1224/1224

为什么是 8P+6D

同一套压测(EP8 decode 时测)。agent 场景 8P+6D 吞吐最高、每 token 更快,首字只比 9P+5D 慢 0.1 s;9P+5D 只在冷长 prompt 上占优。

0100020003000agent 96 会话 out tok/s · 9P+5D: 24942494agent 96 会话 out tok/s · 8P+6D: 26402640agent 96 会话 out tok/s · 7P+7D: 26532653冷混合 c96 out tok/s · 9P+5D: 18151815冷混合 c96 out tok/s · 8P+6D: 17261726冷混合 c96 out tok/s · 7P+7D: 162616269P+5D8P+6D7P+7Dtok/s
agent 96 会话 out tok/s冷混合 c96 out tok/s输出 token/s
布局agent 64agent 96agent 96 首字 p50 / p99agent 96 每 token冷混合冷混合首字 p99
9P+5D188924943.96 / 6.07 s18.4 ms181539 s
8P+6D(当前)200426404.08 / 6.17 s16.2 ms1726116 s
7P+7D201526534.52 / 7.01 s14.3 ms1626187 s

decode MoE:TP8 替代 EP8

EP8 时 allreduce 有 43–68% 的时间在等专家负载最重的那张卡;其中约 2/3 是每步随机的不均衡,EPLB 冗余专家只能消掉固定的 1/3。MoE TP8 让每张卡算每个专家的 1/8,工作量完全相同。测试对上每步快 3–8%,整个集群吞吐 +1–2%、每 token 快 0.5–0.8 ms。

01000200030004000EP8 · 64 会话: 20042004EP8 · 96 会话: 26402640MoE TP8 · 64 会话: 20442044MoE TP8 · 96 会话: 26742674MoE TP8 · 128 会话: 3104310464 会话96 会话128 会话tok/s
EP8MoE TP8集群输出 token/s
batch(测试对,约 6.5 万上下文)EP8 每步 / decode tok/sMoE TP8 每步 / decode tok/s
235.1 ms / 13732.2 ms / 148
858.3 ms / 33155.0 ms / 346
1269.8 ms / 40867.9 ms / 425

prefill chunk:为什么是 2048

8P+4D 时测。chunk 越小 agent 首字越快,但冷长请求的尾巴越长。2048 是两者的平衡点。

chunkagent 64 首字 p50 / p90 / p99agent 输出冷混合输出冷混合首字 p99
40964.14 / 5.71 / 7.69 s1678171231.6 s
2048(当前)3.52 / 4.54 / 6.21 s1806163857.1 s
10242.86 / 5.04 / 11.68 s18711564156.9 s

运行建议

场景建议
agent 多轮(主流量)当前配置已按它调优。后续轮次首字 p99 想控制在 7 s 内,并发控制在约 96 个会话;128 是上限,再往上 decode KV 不够
单流 / 低并发每 token 约 11 ms(真实文本约 13–14 ms),上下文到 1M 基本不变慢;首字随未命中长度增长,128K 冷启动约 12 s
冷长 prompt 占比变高如果未命中的 prefill token 长期超过约三成,或用户反馈首轮慢,把 n62 切回 prefill 变成 9P+5D:冷长尾 p99 从约 120 s 降到约 40 s,agent 吞吐少约 6%。切一台约 5 分钟,可随时切回
thinking 关闭reasoning_effort:"none"、enable_thinking:false、thinking:false、no_think:true、Anthropic effort:"none" / thinking.type:"disabled" 都已真正生效

官方 34 项:34/34(逐项输入 / 输出)

每格的 .txt:上半是输入(请求 JSON),下半是完整输出(流式就是完整事件流)。

用例(请求参数)结果
original-repeat-4096-none
stream=true
max_tokens=4096
reasoning_effort="none"
✅ 通过 · HTTP 200 · 1.9 秒 · 结束 stop
回答正文
OK
chat-default
max_tokens=512
✅ 通过 · HTTP 200 · 0.7 秒 · 结束 stop
回答正文
OK
chat-none-stream
stream=true
max_tokens=512
reasoning_effort="none"
✅ 通过 · HTTP 200 · 9.2 秒 · 结束 stop
回答正文
OK
math
max_tokens=512
reasoning_effort="none"
temperature=0
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 stop
回答正文
323
natural-cold
max_tokens=512
reasoning_effort="none"
✅ 通过 · HTTP 200 · 1.8 秒 · 结束 stop
回答正文
OK
natural-hot-chat
max_tokens=512
reasoning_effort="none"
✅ 通过 · HTTP 200 · 0.6 秒 · 结束 stop
回答正文
OK
natural-hot-chat-stream
stream=true
max_tokens=512
reasoning_effort="none"
✅ 通过 · HTTP 200 · 0.6 秒 · 结束 stop
回答正文
OK
natural-hot-messages
stream=false
max_tokens=512
✅ 通过 · HTTP 200 · 3.4 秒 · 结束 end_turn
回答正文
OK
natural-hot-messages-stream
stream=true
max_tokens=512
✅ 通过 · HTTP 200 · 2.0 秒 · 结束 end_turn
回答正文
OK
responses-64
max_output_tokens=64
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 completed
回答正文
OK
responses-512
max_output_tokens=512
✅ 通过 · HTTP 200 · 0.5 秒 · 结束 completed
回答正文
OK
responses-effort-low
max_output_tokens=512
reasoning={"effort": "low"}
✅ 通过 · HTTP 200 · 0.5 秒 · 结束 completed
回答正文
OK
responses-max-tool-calls
max_output_tokens=512
max_tool_calls=2
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 completed
回答正文
OK
messages-thinking-roundtrip
max_tokens=1024
✅ 通过 · HTTP 200 · 1.0 秒 · 结束 end_turn
回答正文
OK
tool-forced
stream=false
max_tokens=1024
reasoning_effort="none"
tool_choice={"type": "function", "function": {"name": "add_numbers"}}
✅ 通过 · HTTP 200 · 3.1 秒 · 结束 tool_calls
工具调用
[{"id": "call_24b5ed667b2c44cdb6dd6440", "type": "function", "function": {"name": "add_numbers", "arguments": "{\"a\": 17, \"b\": 25}"}}]
回答正文
(空)
tool-forced-stream
stream=true
max_tokens=1024
reasoning_effort="none"
tool_choice={"type": "function", "function": {"name": "add_numbers"}}
✅ 通过 · HTTP 200 · 3.9 秒 · 结束 tool_calls
工具调用
[{"id": "call_afcef3904046451f89bd56f3", "type": "function", "function": {"name": "add_numbers", "arguments": "{\"a\": 17, \"b\": 25}"}}]
回答正文
(空)
tool-named-openai
stream=false
max_tokens=1024
reasoning_effort="none"
tool_choice={"type": "function", "function": {"name": "add_numbers"}}
✅ 通过 · HTTP 200 · 2.6 秒 · 结束 tool_calls
工具调用
[{"id": "call_69bf469014954269b7afd225", "type": "function", "function": {"name": "add_numbers", "arguments": "{\"a\": 17, \"b\": 25}"}}]
回答正文
(空)
tool-auto
stream=false
max_tokens=1024
reasoning_effort="none"
tool_choice="auto"
✅ 通过 · HTTP 200 · 3.4 秒 · 结束 tool_calls
工具调用
[{"id": "call_fe632e1f2031440c80fa6a0c", "type": "function", "function": {"name": "add_numbers", "arguments": "{\"a\": 17, \"b\": 25}"}}]
回答正文
(空)
responses-64-contract
max_output_tokens=64
✅ 通过 · HTTP 200 · 0.8 秒 · 结束 completed
回答正文
OK
chat-default-high
max_tokens=4096
temperature=0
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 stop
回答正文
OK
chat-none
max_tokens=4096
reasoning_effort="none"
temperature=0
✅ 通过 · HTTP 200 · 0.5 秒 · 结束 stop
回答正文
OK
chat-low
max_tokens=4096
reasoning_effort="low"
temperature=0
✅ 通过 · HTTP 200 · 0.5 秒 · 结束 stop
回答正文
OK
chat-high
max_tokens=4096
reasoning_effort="high"
temperature=0
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 stop
回答正文
OK
chat-max
max_tokens=4096
reasoning_effort="max"
temperature=0
✅ 通过 · HTTP 200 · 0.8 秒 · 结束 stop
回答正文
OK
responses-default-high
max_output_tokens=4096
temperature=0
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 completed
回答正文
OK
responses-none
max_output_tokens=4096
reasoning={"effort": "none"}
temperature=0
✅ 通过 · HTTP 200 · 0.7 秒 · 结束 completed
回答正文
OK
responses-low
max_output_tokens=4096
reasoning={"effort": "low"}
temperature=0
✅ 通过 · HTTP 200 · 0.5 秒 · 结束 completed
回答正文
OK
responses-high
max_output_tokens=4096
reasoning={"effort": "high"}
temperature=0
✅ 通过 · HTTP 200 · 0.4 秒 · 结束 completed
回答正文
OK
responses-max
max_output_tokens=4096
reasoning={"effort": "max"}
temperature=0
✅ 通过 · HTTP 200 · 1.0 秒 · 结束 completed
回答正文
OK
messages-default-high
max_tokens=4096
temperature=0
✅ 通过 · HTTP 200 · 0.8 秒 · 结束 end_turn
回答正文
OK
messages-none
max_tokens=4096
output_config={"effort": "none"}
temperature=0
✅ 通过 · HTTP 200 · 0.7 秒 · 结束 end_turn
回答正文
OK
messages-low
max_tokens=4096
output_config={"effort": "low"}
temperature=0
✅ 通过 · HTTP 200 · 0.8 秒 · 结束 end_turn
回答正文
OK
messages-high
max_tokens=4096
output_config={"effort": "high"}
temperature=0
✅ 通过 · HTTP 200 · 0.8 秒 · 结束 end_turn
回答正文
OK
messages-max
max_tokens=4096
output_config={"effort": "max"}
temperature=0
✅ 通过 · HTTP 200 · 0.9 秒 · 结束 end_turn
回答正文
OK

发现的问题

问题证据处理
🔴 关闭思考无效GLM-5.3 的模板总是以 <think> 结尾、没有开关。PD 切换前的旧镜像带着一个从没进 git 的本地补丁;新镜像没有它,reasoning_effort:"none" 仍然思考 150–450 字。官方 34 项因此 7 项失败,团队 agent A 段 0/3sglang #109:关闭思考时在 prompt 里补上 </think>,去掉模板默认的 Max 档位,输出按正文解析;冲突的参数返回 400。4 种写法思考都为 0
🔴 关闭思考时工具调用失败思考已关,但 GLM 工具调用语法仍然要求先有一段思考:强制调用的请求一直写正文到 max_tokens,或把 </think> 漏进正文sglang #109:关闭思考时语法直接从回答开始。4 个工具用例通过
🟡 Anthropic effort:"none" 无效前端把 Messages 请求转成 chat 时丢了 output_config.effort,随后默认打开 thinkingdynamo #46:effort:"none" 等同 thinking.type:"disabled";和 enabled 同时出现时返回 400
🟡 偶发 500(约 1/11000)压测 64 会话那档出现 1 次 prefill failed: transport failed,耗时 1 ms。原因是 worker 空闲 5 秒就关连接,而前端的连接池默认保留 90 秒,偶尔会拿到 worker 正在关的连接dynamo #47:前端连接池空闲 3 秒就丢弃连接,低于 worker 的 5 秒。上线后 64 会话 300 秒(2030 轮)0 错误,日志 0 次 transport failed
🟡 外部网关截断大请求旧 NewAPI 网关在一台 t3.large 上,入站带宽和包速率配额打满(bw_in_allowance_exceeded、pps_allowance_exceeded),几 MB 的 512K/1M 请求在上传阶段被断开。同一时段直连集群全部正常NewAPI 已下线,验收改为直连我们自己的入口
🟢 运维脚本把集群密码放在命令行里gcx.sh 把密码(只做了 base64)放在 ssh 命令行,本机任何进程用 ps 都能看到改为每一跳经 stdin 传递,解码进程命令行确认不含密码;跳板换成 NetBird 内网跳板

本轮改动

改了什么结果
sglang #109:GLM-5.x 关闭思考 + 工具调用语法官方 34 项 26 → 34;团队 agent 全过;decode 每步 55.0 → 55.3 ms(噪声内)
dynamo #46:Anthropic effort nonemessages-none 通过
dynamo #47:前端连接池空闲超时 3 s消除偶发 1 ms 500;上线后 api_check 19/19,agent 64 会话 2026 tok/s、0 错误
zhongtian-ops #17:decode MoE TP8集群吞吐 +1–2%,每 token −0.5–0.8 ms
zhongtian-ops #16:补上漏掉的 n53/n55,布局 8P+6Dagent 96 会话吞吐比 9P+5D +6%
dynamo #43/#45:按缓存放置会话、换 prefill 留余量后续轮次缓存命中 95–99%
14 台分两半滚动上线全程不中断服务;0 次容器重启;旧容器只停不删,可回滚

试过但不采用

方案结果原因
7P+7D输出只多 0.5%首字和冷长尾明显变差
6P+6D首字变差prefill 不够
DCP8每步更慢(batch 8 时 115 ms,DCP4 58 ms)KV 只多 9%,还要降显存比例
MTP 改 1 或 2 步吞吐持平没有收益
注意力投影 BF16 转 FP8decode 行数下与 BF16 持平;只有 lm_head 快 0.1–0.3 ms/步收益太小,不值得承担 logits 精度风险
decode 前缀复用 + 会话绑定首字没改善,decode 显存顶到 99%sglang #108 关闭
chunk 1024 / 512agent p50 略好冷长尾 p99 到 157 s 以上
EPLB 冗余专家只能消掉约 1/3 的不均衡MoE TP8 直接消掉全部
decode 每 socket 一个 TP4避免跨 socket allreduce放不下:每卡需要约 116 GB 权重,只有 89.8 GB
host 内存 membind 到本地 NUMA实测远端分配 0–23 MB/分钟收益接近 0,且需要 SYS_NICE

下一阶段优化方向

按预期收益排序。本阶段先保证全绿和稳定,这些留到下一阶段逐项做,每项先在测试对上 A/B。

方向预期收益依据状态
交接协议 early landed:decode 收齐各 stage 的 KV 就开始,不等 prefill 释放共识后续轮次首字 −1~2 sPP8 共识这一段约 1.8 s代码、单测、镜像已就绪,待测试对 A/B
扩 decode KV 容量(draft KV、显存余量、CUDA graph 预留)会话上限从 128 往上推128 会话时 KV 平均 90%、峰值 99%,是当前上限的直接原因待调研
PP 层切分调平(现在 10×7+8)首字 −几个百分点最后一个 stage 比第一个闲 5–10 个百分点待做
TP8 两级 allreduce(socket 内先规约,再跨 socket 一次)decode 每步 −3~8%allreduce 约占每步 25%,TP4 放不下所以必须跨 socket待做
Mooncake 每张 GPU 固定用本地 railKV 传输带宽最多翻倍(如果确实有跨 socket)n41/n42 上 r0、r5 累计流量比其他 rail 多约 35%待确认
双 prefill 池:PP4×TP2 接 agent,PP8 接冷长 promptagent 后续轮次首字 −20~30%PP4×TP2 单会话首字快约 33%,但冷算力少约 25%等交接协议做完再评估
Mooncake L3 共享 KV(跨 prefill 迁移缓存)会话可以换 prefill 而不重算RDMA put 返回 -800,需要重编基础镜像阻塞
tokenizer / detokenizer 绑到没有 GPU 的 NUMA1/3每 token 抖动 <1%CPU 负载每个 NUMA 节点只有 12–16%低优先级
集群看板加每条 rail 的 RDMA 流量rail 不均衡可直接看到现在只能临时 ssh 查待做

回退

  1. worker:glm53/pd/cutover.sh workers zhongtian-ai/sglang:glm53-60f9434897a9(上一版镜像)
  2. 前端:glm53/pd/cutover.sh frontend zhongtian-ai/openai-http-frontend:554aca953361
  3. 整体回到 PD 之前:cutover.sh rollback,旧容器 *.prod 只停未删

请求样例(输入 / 输出)

一个真实的 agent 会话:第一轮冷启动(cached_tokens=0),后面三轮每轮追加工具结果后重放完整历史,命中各自的缓存。每格的 .txt:上半是输入(请求 JSON),下半是完整的流式事件。

请求结果
第 1 轮(冷)
stream=true
max_tokens=300
reasoning_effort="low"
temperature=0
messages=2(111,884 字符)
唯一前缀,必须不命中缓存
HTTP 200 · 6.0 秒 · 首字 2.68 秒 · 结束 length
输入 19,127 token · 命中缓存 0 · 输出 300 token
思考
We need answer to user. Need infer task? They provided huge repeated sentence "Agent run sample-bae59af8-1792334751. The archive room holds many boxes..." likely a document. User asks "Complete the archive task step by step." Need know what…
回答正文
(空)
第 2 轮
stream=true
max_tokens=300
reasoning_effort="low"
temperature=0
messages=4(122,971 字符)
HTTP 200 · 3.5 秒 · 首字 1.4 秒 · 结束 stop
输入 21,028 token · 命中缓存 19,072 · 输出 206 token
思考
The document is just repeated filler. Nothing to extract.
回答正文
I've reviewed the tool result. Here's my step-by-step assessment:

**Step 1 — Read the document:** The content consists of a single sentence repeated many times: "The archive room holds many boxes of routine records and nothing in this sent…
第 3 轮
stream=true
max_tokens=300
reasoning_effort="low"
temperature=0
messages=6(135,049 字符)
HTTP 200 · 3.3 秒 · 首字 1.5 秒 · 结束 stop
输入 23,121 token · 命中缓存 20,992 · 输出 193 token
思考
Same filler. Confirm step 2 complete, no new info.
回答正文
I've reviewed the second tool result as well.

**Step 1 — Read the document:** Like the first, this result consists entirely of the same repeated filler sentence: "The archive room holds many boxes of routine records and nothing in this sen…
第 4 轮
stream=true
max_tokens=300
reasoning_effort="low"
temperature=0
messages=8(147,064 字符)
HTTP 200 · 2.8 秒 · 首字 1.51 秒 · 结束 stop
输入 25,199 token · 命中缓存 23,104 · 输出 151 token
回答正文
I've reviewed the third tool result.

**Step 1 — Read the document:** It contains the same single filler sentence repeated throughout: "The archive room holds many boxes of routine records and nothing in this sentence refers to anything out…

复现

# 在 n13 上,wiki 仓库 checkout 目录里(直连我们的入口,不经外部网关)
python3 scripts/acceptance/run_model_acceptance.py --model zai-org/GLM-5.3 --target http://127.0.0.1:29201 \
    --layers contract,team_features,team_agent,long_context --out /tmp/acc
# 速度:单流 2K/32K/128K、agent 1→128 会话、冷混合
bash glm53/pd/report/speed_sweep.sh final
python3 -I glm53/pd/agent_bench.py http://127.0.0.1:30200 128 240
python3 -I glm53/pd/bench.py http://127.0.0.1:30200 96 240 4000:400:6,32000:400:3,135000:400:1
# 生成本报告
python3 glm53/pd/report/build_perf_report.py spec.json out/