# 方案F:GLM-5.3-NVFP4 PD 分离完整链(双机 6000D)编排手册 > 2026-09-08 实测终态。四角色、两台机、启动顺序强制。吞吐换算口径:**链合计 ÷2 = 单机等效**(与单机方案 A-E 可比)。 > 完整压测数据见飞书《GLM-5.3-NVFP4 双场景压测报告》方案 F 行(文档 `SZUSdEqY1oRVxGxgILBcHqPJnEc` / wiki `NzbMwzmKviYidRkZYRrc8GYQnrf`)。 ## 拓扑 | 角色 | 机器 | 容器 | 端口 | profile | |---|---|---|---|---| | 1. mc-master(Mooncake 元数据) | 174.1.60.1 | `mc-master` | 50051 | `profiles/pro6000/glm53_nvfp4_pro6000_pd_master.env` | | 2. prefill(TP4 PP2 + DFLASH 草稿) | 174.1.60.1 | `glm53-pd-smoke-prefill` | 30000 | `profiles/pro6000/glm53_nvfp4_pro6000_pd_prefill.env` | | 3. decode(TP8 + DFLASH v5 配方) | 174.1.60.2 | `glm53-s1-decode` | 30000 | `profiles/pro6000/glm53_nvfp4_pro6000_pd_decode.env` | | 4. router(MiniLB) | 174.1.60.2 | `pd-smoke-router` | 31000 | `profiles/pro6000/glm53_nvfp4_pro6000_pd_router.env` | 镜像统一:`lmsysorg/sglang:nightly-dev-20260828-daf63171` (digest `sha256:28e0d26073161e49ca56eba808d264a4223804a212020f1dfe1b2405b9f8a399`)。 ## 启动顺序(强制) ``` mc-master (60.1) → prefill (60.1) → decode (60.2) → router (60.2) ``` 对应脚本(`experiments/pro6000/glm53_nvfp4_pro6000d_sglang_dual_scenario_bench/scripts/`): ```bash # 60.1(注意:60.1 日常跑生产容器 glm53-pp4,先停它,见下节) bash /tmp/deploy_pd_smoke_master.sh # 判据 ss :50051 bash /tmp/deploy_pd_probe.sh p1b_prefill_tp4pp2_cps8k_radix_launch.sh # 判据 :30000/health 200,~10-15min # 60.2 bash /tmp/deploy_s1_decode.sh # 判据 :30000/health 200,~10min bash /tmp/deploy_pd_smoke_router.sh # 判据 ss :31000 ``` 场景一(90% 命中)必须用 **radix 变体** launch(`p1b_prefill_tp4pp2_cps8k_radix_launch.sh`, 与基线唯一差异 = 无 `--disable-radix-cache`)。场景二 0 命中,radix 开销可忽略,两场景共用同一部署。 ## 基础设施依赖(缺一不可) | 依赖 | 位置 | 说明 | |---|---|---| | sglang 补丁树 | `/data/sglang_patch_glm53` → 容器 `/sgl-workspace/sglang` | 与镜像原版差 **11 个文件**(10 改 + 1 新增 `dflash_pp.py`),清单与 diff 见 `platforms/patches/pro6000/glm53_pd_chain/`。无补丁则 DFlash+PD 冷启动接线缺失,decode 首请求 400 | | mooncake wheel | `/data/flashkda_deploy/wheels/mooncake_transfer_engine_cuda13-0.3.12.post1-cp312-cp312-manylinux_2_28_x86_64.whl` | 容器内 launch 脚本 `pip install --no-deps` 自装 | | DFlash2 草稿权重 | `/data/hf_models/GLM-5.3-DFlash2` | 两角色都要挂 | | IB 设备 | mlx5_0–mlx5_3 + `--device /dev/infiniband` + `--ulimit memlock=-1` | RDMA KV 传输通道 | | 环境变量 | `MOONCAKE_MASTER=174.1.60.1:50051` `MOONCAKE_PROTOCOL=rdma` | prefill/decode 容器都要 | ## 质量门(经 router :31000,全链路含 KV transfer + 草稿) 60.2 上生成 router 口径的 gate 副本: ```bash sed 's/PORT=30000/PORT=31000/' /root/quality_gate_605.sh > /tmp/quality_gate_31000.sh ``` 判据:GSM8K×5 + 中文推理必须过。tool call 预期不过(链配方无 parser,与方案 B/D 同口径的已知配置缺口,记录放行)。 2026-09-08 实测 **6/7**(核心项全过,DFlash 草稿无质量损失)。 ## 压测 驱动脚本:`run_pd_s1.sh` / `run_pd_s2.sh`(同 scripts 目录),跑在 60.1(语料本地, `--url http://174.1.60.2:31000/generate` 走 router,`--container glm53-pd-smoke-prefill` 读 prefill 日志核命中率)。 - **场景一**:128k/64k × cc1-4,nreq8,shared-frac 0.9,canonical 窗口 9301-9308 - **场景二**:cc8/16/32 canonical 9311-9313(nreq 16/32/32);cc40/64 全新窗口 pool-override 16,384,000 / 17,203,200(nreq 40/64 单轮满波) - 指标读取:命中率读 prefill 容器日志(PP2 日志计数 ×2,不影响比值);accept 从 decode 日志读 (router 转发后 usage 字段可能缺失) - 每点核验:ok/failed=0、retractions、s1 hit≈0.90、s2 hit=0 ### 2026-09-08 实测判决(13/13 干净点) - **场景一**:128k cc1 TTFT 3.91s = 六方案最低(跨机重叠把 prefill 与 RDMA 传输完全藏住), 但 cc≥2 时 decode 侧排队,TTFT 堆到 31.0s;÷2 输出吞吐 21.2-23.5 tok/s,仅为 A 的 30-57%。 根因:decode KV 池 214,336 token 按 16k 场景定容 → 128k 仅 1 驻留、64k 仅 3。 - **场景二**:÷2 单机等效 74-85 tok/s = A 的 75-96%,但 TTFT 较 A 减半。 判决:**两机买 TTFT、不买吞吐**。decode MRR12 在 cc16+ 饱和;DFlash accept 在 12-batch verify 下掉到 1.8(单机 EAGLE 2.84)。 - **PD 机制验证**:跨机 prefill/decode 重叠成立、mooncake RDMA 传输被吸收——机制无罪, 容量配置(decode 池按 16k 定容)是判决主因。 ## 拆链与生产恢复(顺序固定) ```bash # 1. 拆链 # 60.1: docker rm -f mc-master glm53-pd-smoke-prefill # 60.2: docker rm -f glm53-s1-decode pd-smoke-router # 2. 等双机显存排空(60.1 <2000MiB;60.2 GPU7 常有外部裸金属任务 main_v2.py,核实归属勿清) # 3. 恢复 60.1 生产:bash /tmp/deploy_glm53_pp4.sh → health 200 + docker inspect Args 核对 ``` ## 60.1 生产停机窗口提示 60.1 日常跑生产 `glm53-pp4`(方案 D,TP2PP4,8 卡满载)。拉 prefill 角色前必须停生产; `deploy_glm53_pp4.sh` 生成的参数与生产容器 `docker inspect` Args 已核对逐字一致, 恢复即完全复现。全程停机 ~2-2.5h(部署+13 点压测+质量门+恢复)。