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 三个问题。
这份报告总结 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 |
| prefill | PP8×TP1,chunk 2048,每个 stage 算完立即发送 KV(early KV send) |
| decode | TP8×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)。
| 输入上下文 | 首字 p50 / p99 | 每 token p50 | 单流速度 | recall |
|---|---|---|---|---|
| 2K | 1.2 / 1.3 s | 10.9 ms | ≈92 tok/s | 16/16 |
| 32K | 3.7 / 4.1 s | 11.1 ms | ≈90 tok/s | 13/13 |
| 128K | 11.7 / 12.0 s | 11.3 ms | ≈88 tok/s | 9/9 |
2K 上下文,单请求。前三档来自 n63→n62 测试对,最后一档是现在的整个集群。
每个会话是一个 agent 任务:2 万 token 前缀,每轮追加约 2K token 工具结果、输出 300 token、等 2 秒再发下一轮,上下文到 10 万为止。每档跑 240 秒,全部 0 错误(64 会话那一档的 1 次 500 已查清并修复,见“发现的问题”),冷请求 cached=0。
| 会话数 | 输出 tok/s | 后续轮次首字 p50 / p90 / p99 | 每 token p50 / p99 | 缓存命中 |
|---|---|---|---|---|
| 1 | 51 | 1.77 / 1.94 / 2.05 s | 7.1 / 9.3 ms | 95.5% |
| 4 | 200 | 1.79 / 1.97 / 2.11 s | 7.0 / 10.8 ms | 95.5% |
| 16 | 710 | 2.19 / 2.88 / 3.91 s | 7.9 / 12.7 ms | 95.4% |
| 32 | 1,251 | 2.71 / 3.52 / 4.33 s | 9.8 / 15.5 ms | 95.3% |
| 64 | 2,027 | 3.42 / 4.45 / 5.41 s | 13.4 / 21.1 ms | 95.5% |
| 96 | 2,698 | 4.21 / 5.31 / 6.53 s | 15.2 / 25.1 ms | 95.8% |
| 128 | 3,125 | 4.88 / 6.61 / 9.79 s | 17.4 / 29.1 ms | 95.9% |
prefill 取第一个 PP stage 的忙碌比例,平均约 82%,排队 ≤0.7。decode 6 台都是 100% 忙,平均每台 9 个请求在跑,KV 用到 89–91%(峰值 99%):再往上加会话,decode KV 会先不够,所以 128 会话就是这个布局的上限。(这一轮采样把 n53 误归到了 prefill 组,它的 decode 数据没采到,采样脚本已修正。)
| decode 节点 | 忙碌 | 平均在跑(最大) | KV 平均(峰值) | 输出 tok/s |
|---|---|---|---|---|
| n42 | 100% | 8.9(17) | 91%(99%) | 525 |
| n55 | 100% | 9.6(18) | 90%(99%) | 515 |
| n56 | 100% | 9.1(16) | 89%(99%) | 528 |
| n58 | 100% | 9.3(15) | 90%(99%) | 511 |
| n62 | 100% | 9.5(16) | 89%(99%) | 535 |
每条请求都不命中缓存,长度按固定比例 4K:32K:135K = 6:3:1。这是我们为 agent 场景让出去的部分:冷长请求的 p99 首字较长。
| 输出 tok/s | 输入 tok/s | 首字 p50 / p90 / p99 | 每 token p50 | recall |
|---|---|---|---|---|
| 1,726 | 96,697 | 9.0 / 22.3 / 147.3 s | 18.2 ms | 1224/1224 |
同一套压测(EP8 decode 时测)。agent 场景 8P+6D 吞吐最高、每 token 更快,首字只比 9P+5D 慢 0.1 s;9P+5D 只在冷长 prompt 上占优。
| 布局 | agent 64 | agent 96 | agent 96 首字 p50 / p99 | agent 96 每 token | 冷混合 | 冷混合首字 p99 |
|---|---|---|---|---|---|---|
| 9P+5D | 1889 | 2494 | 3.96 / 6.07 s | 18.4 ms | 1815 | 39 s |
| 8P+6D(当前) | 2004 | 2640 | 4.08 / 6.17 s | 16.2 ms | 1726 | 116 s |
| 7P+7D | 2015 | 2653 | 4.52 / 7.01 s | 14.3 ms | 1626 | 187 s |
EP8 时 allreduce 有 43–68% 的时间在等专家负载最重的那张卡;其中约 2/3 是每步随机的不均衡,EPLB 冗余专家只能消掉固定的 1/3。MoE TP8 让每张卡算每个专家的 1/8,工作量完全相同。测试对上每步快 3–8%,整个集群吞吐 +1–2%、每 token 快 0.5–0.8 ms。
| batch(测试对,约 6.5 万上下文) | EP8 每步 / decode tok/s | MoE TP8 每步 / decode tok/s |
|---|---|---|
| 2 | 35.1 ms / 137 | 32.2 ms / 148 |
| 8 | 58.3 ms / 331 | 55.0 ms / 346 |
| 12 | 69.8 ms / 408 | 67.9 ms / 425 |
8P+4D 时测。chunk 越小 agent 首字越快,但冷长请求的尾巴越长。2048 是两者的平衡点。
| chunk | agent 64 首字 p50 / p90 / p99 | agent 输出 | 冷混合输出 | 冷混合首字 p99 |
|---|---|---|---|---|
| 4096 | 4.14 / 5.71 / 7.69 s | 1678 | 1712 | 31.6 s |
| 2048(当前) | 3.52 / 4.54 / 6.21 s | 1806 | 1638 | 57.1 s |
| 1024 | 2.86 / 5.04 / 11.68 s | 1871 | 1564 | 156.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" 都已真正生效 |
每格的 .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/3 | sglang #109:关闭思考时在 prompt 里补上 </think>,去掉模板默认的 Max 档位,输出按正文解析;冲突的参数返回 400。4 种写法思考都为 0 |
| 🔴 关闭思考时工具调用失败 | 思考已关,但 GLM 工具调用语法仍然要求先有一段思考:强制调用的请求一直写正文到 max_tokens,或把 </think> 漏进正文 | sglang #109:关闭思考时语法直接从回答开始。4 个工具用例通过 |
🟡 Anthropic effort:"none" 无效 | 前端把 Messages 请求转成 chat 时丢了 output_config.effort,随后默认打开 thinking | dynamo #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 none | messages-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+6D | agent 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 转 FP8 | decode 行数下与 BF16 持平;只有 lm_head 快 0.1–0.3 ms/步 | 收益太小,不值得承担 logits 精度风险 |
| decode 前缀复用 + 会话绑定 | 首字没改善,decode 显存顶到 99% | sglang #108 关闭 |
| chunk 1024 / 512 | agent 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 s | PP8 共识这一段约 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 固定用本地 rail | KV 传输带宽最多翻倍(如果确实有跨 socket) | n41/n42 上 r0、r5 累计流量比其他 rail 多约 35% | 待确认 |
| 双 prefill 池:PP4×TP2 接 agent,PP8 接冷长 prompt | agent 后续轮次首字 −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 查 | 待做 |
glm53/pd/cutover.sh workers zhongtian-ai/sglang:glm53-60f9434897a9(上一版镜像)glm53/pd/cutover.sh frontend zhongtian-ai/openai-http-frontend:554aca953361cutover.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/