如何搭建高吞吐PD分离(Prefill/Decode Disaggregation):UCM异构资源管理完全指南
如何搭建高吞吐PD分离Prefill/Decode DisaggregationUCM异构资源管理完全指南【免费下载链接】unified-cache-managementUnified Cache Manager推理记忆数据管理器是一款以KV Cache为中心的推理加速套件其融合了多类型缓存加速算法工具分级管理并持久化推理过程中产生的KV Cache记忆数据扩大推理上下文窗口以实现高吞吐、低时延的推理体验降低每Token推理成本。项目地址: https://gitcode.com/ModelEngine/unified-cache-managementUnified Cache ManagerUCM统一缓存管理器是一款以 KV Cache 为中心的开源推理加速套件它对大模型推理过程中产生的 KV Cache 记忆数据进行分级管理与持久化帮助你在 Prefill/Decode 分离PD Disaggregation架构下实现高吞吐、低时延、低成本的推理服务尤其适合 GPU/NPU 混合的异构集群场景。对于新手而言PD 分离听起来很复杂但其实核心逻辑可以一句话概括Prefill 节点负责读入Decode 节点负责输出KV Cache 通过共享存储传递两者彻底解耦。本文将带你从原理到实操一步步搭建起自己的 PD 分离集群。一、为什么需要 PD 分离大模型推理分两个阶段Prefill预填充一次性处理整段输入计算密集型吃 GPU 算力Decode解码逐 token 生成输出访存密集型吃显存带宽。两个阶段的资源特性截然不同。混在同一个实例里长请求的 Prefill 会阻塞短请求的 Decode互相拖累。把两者拆分到不同节点独立部署即Prefill/Decode Disaggregation可以各自按最优策略调参显著提升吞吐并降低 TTFT首 Token 时延。UCM 的 PD 分离设计围绕三大核心组件展开独立的 Prefill/Decode 部署策略、KV Cache 存储与传输策略、调度策略。二、三种 KV Cache 传输模式UCM 选择了哪种Prefill 与 Decode 节点之间传递 KV Cache业界大致有三种模式模式路径特点模式1直传P 节点 HBM → D 节点 HBM最快但要求 P/D 全连接或组内互联调度复杂难扩展模式2经 DRAM 中转HBM → DRAM → 对端 DRAM → HBMDRAM 充当逻辑缓存HBM 占用时间短模式3经统一存储池HBM → 统一存储池 → HBM逻辑最简单、解耦度最高复用 Prefix Cache 能力UCM 选择了第三种模式——让统一存储池基于 Prefix Cache 逻辑成为 KV Cache 传输的中继。这带来四大实际收益彻底解耦Prefill 与 Decode 互不依赖调度逻辑和异常处理大幅简化零额外开发完整复用 Prefix Cache 代码路径无需为 PD 分离单独编写逻辑实例无状态化统一存储充当推理实例状态单个实例故障可无缝迁移系统鲁棒性显著增强异构推理近乎零成本P 节点和 D 节点可以使用不同 GPU/NPU 型号、不同精度、不同启动方式KV 与计算分离后异构环境天然支持——这正是异构资源管理的关键价值所在。三、UCM 整体架构速览UCM 采用分层设计自顶向下依次是ProxyPD 混合/分离调度器、Integration对接 vLLM、SGLang、MindIE 等推理引擎的插件层、Prefill/Decode 加速库、Sandbox研发中的实验性技术、Store存储适配层与 Centralized Storage集中式存储。其中 Store 层是 PD 分离的数据底座PipelineStore 将Cache Store设备↔主机内存与Posix Store主机↔本地盘/SSD/NFS 持久存储串成数据管道KV Cache 即可在任意节点之间高效流转。四、动手实践1P1D 集中式 PD 分离最快上手 下面以单节点、1 个 Prefill 实例 1 个 Decode 实例1P1D为例展示 UCM 集中式 PD 分离的最小完整流程。第 1 步准备 UCM 配置文件创建一个 UCM 配置文件可参考仓库示例 examples/ucm_config_example.yaml核心内容ucm_connectors: - ucm_connector_name: UcmPipelineStore ucm_connector_config: store_pipeline: Cache|Posix storage_backends: /mnt/test1 # 所有节点可访问的共享存储目录 cache_buffer_capacity_gb: 32 enable_event_sync: true use_layerwise: false⚠️要点当 Prefill 与 Decode 部署在不同节点时所有节点必须挂载同一个共享文件系统如 NFSstorage_backends指向该共享路径。第 2 步分别启动 Prefill 与 Decode 服务两端启动命令几乎一致关键差异在端口与可见设备Ascend 平台用ASCEND_RT_VISIBLE_DEVICES代替CUDA_VISIBLE_DEVICESvllm serve /home/models/Qwen2.5-7B-Instruct \ --max-model-len 20000 --tensor-parallel-size 1 \ --gpu_memory_utilization 0.87 --block-size 128 --port 7800 \ --kv-transfer-config { kv_connector: UCMConnector, kv_role: kv_both, kv_connector_module_path: ucm.integration.vllm.ucm_connector, kv_connector_extra_config: {UCM_CONFIG_FILE: /path/to/ucm_config_example.yaml} }UCM 与 vLLM 的对接实现在 ucm/integration/vllm/ucm_connector.py它通过 vLLM 标准的 KV Connector 接口注入无需修改推理引擎。第 3 步启动代理服务器做请求分发UCM 自带一个轻量代理服务器 ucm/pd/toy_proxy_server.py负责把请求按轮询策略分发给 Prefill 和 Decode 实例python3 toy_proxy_server.py --pd-disaggregation --host localhost --port 7802 \ --prefiller-host prefill-node-ip --prefiller-port 7800 \ --decoder-host decode-node-ip --decoder-port 7801第 4 步验证与压测一条curl即可完成基本测试压测可直接使用 vLLM 自带 benchmark 工具vllm bench serve --dataset-name random --random-input-len 4096 \ --random-output-len 100 --num-prompts 10 --host localhost \ --port 7802 --endpoint /v1/completionsXpYd 扩展多 Prefill 多 Decode 实例时只需为每个实例分配不同端口代理服务器通过--prefiller-hosts/--decoder-hosts传入完整地址列表即可完整步骤见 docs/source/user-guide/pd-disaggregation/centralized_pd.md。五、异构资源管理Ascend 做 Prefill、CUDA 做 Decode 这是 UCM PD 分离最亮眼的场景——P 节点与 D 节点使用不同硬件平台。例如 Prefill 使用 Ascend NPU计算性价比高Decode 使用 CUDA GPU生态成熟前提只有两条所有 vLLM 实例必须使用相同的 dtype如统一bfloat16共享存储对所有节点可见。启动时 Prefill 端使用export ASCEND_RT_VISIBLE_DEVICES0Decode 端使用export CUDA_VISIBLE_DEVICES0其余参数含 UCM 连接器配置完全一致。KV Cache 在统一存储池中完成跨平台搬运异构差异被存储层完全吸收无需任何跨平台传输代码。这种新旧 GPU 混布、异构算力混用的集群形态正在成为主流因为直连传输模式在异构环境下越来越复杂而 UCM 的解耦架构天然适配。六、大规模分布式 PD 分离P2P 传输 大规模专家并行 ️当集群扩展到 MoE 大模型如 Qwen3-235B、GLM-5.1时推荐分布式 PD 分离架构UCM 在 Prefill 节点实现 Prefix Cache 复用Mooncake负责 Prefill 到 Decode 的 P2P KV Cache 高速传输两者通过 vLLM 的 MultiConnector 双通道协作。以 8 节点192.168.10.1~8部署 GLM-5.1 为例Prefill 实例4 节点DP4TP8 并行策略启用专家并行Expert ParallelismDecode 实例4 节点DP8TP4 并行策略传输通道P 节点配置MultiConnectorMooncake 做 producer UCMConnector 做前缀缓存D 节点配置MooncakeConnectorV1做 consumer负载均衡由独立代理服务将请求分发到各 DP 实例。Prefill 节点的 KV 传输配置示意Decode 端只需把角色换成kv_consumer{ kv_connector: MultiConnector, kv_role: kv_producer, kv_connector_extra_config: { connectors: [ { kv_connector: MooncakeConnectorV1, kv_role: kv_producer, kv_connector_extra_config: { prefill: {dp_size: 4, tp_size: 8}, decode: {dp_size: 8, tp_size: 4} } }, { kv_connector: UCMConnector, kv_role: kv_both, kv_connector_module_path: ucm.integration.vllm.ucm_connector, kv_connector_extra_config: {UCM_CONFIG_FILE: /path/to/ucm_config_example.yaml} } ] } }注意decode段的并行参数必须写成Decode 端的 dp/tpDP8TP4这是 P/D 并行策略不一致时最易踩的坑。完整部署脚本见 docs/source/user-guide/pd-disaggregation/large_scale_ep.md 与 docs/source/user-guide/pd-disaggregation/distributed_pd.md。七、性能实测UCM 前缀缓存带来多少加速在 8 节点 A3 集群128 并发、32K 输入 1K 输出、KV Cache 预热命中率 0.8下三种场景的对比数据输入长度场景TTFT (ms)端到端时延 (ms)32K全量重算基线140,730173,82032KHBM 前缀缓存108,879142,22832KUCM 前缀缓存51,86185,61564K全量重算基线181,864214,98864KUCM 前缀缓存69,718103,752128K全量重算基线268,016301,648128KUCM 前缀缓存105,083138,946128K 长上下文下 TTFT 下降约61%。这里有个关键细节数据并行下测试请求未必被路由回预热时的 DP 进程HBM 前缀缓存的实际命中率远低于预期的 0.8而 UCM 把所有 KV Cache 存入共享外部存储任何 DP 进程处理请求都能命中缓存保证真实命中率 预热比例。另一组 GLM-5.1 4 节点 A3 集群2 Prefill 2 Decode实测中64K 上下文 30 并发场景下启用 UCM 前缀缓存后TTFT 降低 82.1%、吞吐提升 141%详见 docs/source/user-guide/best-practices/GLM-5.1-A3_4Node_PD_Disaggregation.md。八、PD 分离带来的调度灵活性解耦之后调度器获得了前所未有的优化空间榨干算力利用 Chunked Prefill 占用 Decode 实例的剩余算力P/D 角色可自动互换任务可中途迁移避免异常导致重算改善体验防止长请求拖慢短请求显著降低平均 TTFT 与 TPOT同一用户的请求经简单哈希映射到同一实例提高本地缓存命中率强化容错内置重试与检查点恢复机制调度器自身弱状态、多实例冗余消除单点故障。九、新手避坑清单 共享存储必须全员可见跨节点部署时所有节点挂载同一 NFS 路径且storage_backends指向它dtype 必须全局一致异构平台上尤其注意P/D 实例的--dtype要相同Ascend 平台用对设备变量是ASCEND_RT_VISIBLE_DEVICES不是CUDA_VISIBLE_DEVICES并行参数写对端分布式模式下Prefill 节点配置里decode段的 dp/tp 要填Decode 端的并行策略长上下文控制并发Decode 实例 HBM 的 KV Cache 容量决定了并发上限超出会触发抢占重算反而拖慢吞吐。十、延伸学习路径主题位置PD 分离原理总览docs/source/user-guide/pd-disaggregation/index.md集中式 PD 部署1P1D / 异构 / XpYddocs/source/user-guide/pd-disaggregation/centralized_pd.md分布式 PDP2P Mooncakedocs/source/user-guide/pd-disaggregation/distributed_pd.md大规模专家并行部署docs/source/user-guide/pd-disaggregation/large_scale_ep.mdPipelineStore 存储配置详解docs/source/user-guide/prefix-cache/pipeline_store.mdUCM 配置示例文件examples/ucm_config_example.yamlPD 代理服务器源码ucm/pd/toy_proxy_server.pyUCM 源码解析docs/source/developer-guide/deepdive_ucm.md一句话总结UCM 用统一存储池中继 KV Cache这一极简设计把 PD 分离中最复杂的跨节点、跨硬件传输问题转化为一次普通的缓存读写——逻辑简单、彻底解耦、天然支持异构让新手也能快速搭建起生产级的大规模推理集群。【免费下载链接】unified-cache-managementUnified Cache Manager推理记忆数据管理器是一款以KV Cache为中心的推理加速套件其融合了多类型缓存加速算法工具分级管理并持久化推理过程中产生的KV Cache记忆数据扩大推理上下文窗口以实现高吞吐、低时延的推理体验降低每Token推理成本。项目地址: https://gitcode.com/ModelEngine/unified-cache-management创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考