本文较长,建议点赞收藏,以免遗失。
在LLM推理计算中Prefill和Decode两个阶段的计算/显存/带宽需求不一样,通常Prefill是算力密集,Decode是访存密集。一些场景中P和D两者分开计算可提升性能。vLLM是一种主流的推理框架,今天我将主要围绕其PD分离场景做讨论,欢迎交流指正!👍
在LLM推理中,Transformer架构的自回归特性导致计算过程分为两个阶段:
传统部署方案将P和D整合在单一实例中,但存在显著缺陷:
为提升资源效率,业界提出KV缓存(KV Cache)机制,避免重复计算,并衍生出P与D分离部署方案:
vLLM作为主流推理框架,其0.8.x版本通过KV Transfer机制支持PD分离(1P1D场景)。核心设计如下:
工作流程:
代码实现简化:
# Prefill节点配置
ktc = KVTransferConfig.from_cli('{"kv_connector":"PyNcclConnector", "kv_role":"kv_producer", "kv_rank":0, "kv_parallel_size":2}')
llm = LLM(model="meta-llama/Meta-Llama-3.1-8B-Instruct", kv_transfer_config=ktc)
llm.generate(prompts, sampling_params)
# Decode节点配置
ktc = KVTransferConfig.from_cli('{"kv_connector":"PyNcclConnector", "kv_role":"kv_consumer", "kv_rank":1, "kv_parallel_size":2}')
llm = LLM(model="meta-llama/Meta-Llama-3.1-8B-Instruct", kv_transfer_config=ktc)
outputs = llm.generate(prompts, sampling_params)
当前局限:
实现高效PD分离需解决以下核心问题:
关键点 | 内容 | 说明 |
---|---|---|
a) PD配比与数量 | a1) 分离与融合的选择 | 短序列/低频请求场景下,融合部署可能更优。 |
a2) P/D实例初始配比 | 需根据负载动态调整P和D比例。 | |
a3) 实例扩缩容支持 | 集群管理需支持弹性伸缩以提升资源利用率。 | |
a4) 角色互换可行性 | 闲置P实例可转为D实例(反之亦然),实现资源复用。 | |
b) 请求调度 | b1) 调度亲和性 | 减少P与D间通信延迟,例如就近部署实例。 |
b2) 负载均衡 | 多P多D时需均衡实例负载。 | |
b3) 网络均衡 | 避免KV传输导致网络阻塞,需平衡计算与带宽。 | |
b4) Batch分配策略 | P阶段适合小batch,D阶段适合大batch。 | |
c) KV存储设计 | c1) 存储介质 | 显存(HBM)、内存、SSD或远端存储(如S3),需权衡速度与容量。 |
c2) 传输方式 | RDMA(NCCL/HCCL)、TCP/RPC等,影响传输效率。 | |
d) Cache复用 | d1) 存储位置 | 显存速度快但容量小,内存/SSD容量大但延迟高。 |
d2) 保存/加载策略 | P阶段生成KV后保存,D阶段直接加载,减少重复计算。 | |
d3) 共享范围 | 是否支持跨节点全局共享Cache。 | |
d4) 淘汰机制 | LRU等策略处理Cache溢出。 | |
e) 可靠性 | e1) 实例故障恢复 | P/D实例故障时需保证服务连续性。 |
e2) 网络健壮性 | 增强控制链路容错能力。 |
架构:每个vLLM进程部署两类连接器(Connector):
异步传输流程:
代码修改重点:
V1适配方案:分离Prefill与Decode调度器,支持Chunk Prefill优化,但维护复杂度较高。
架构:分内外两层:
运行逻辑:
负载均衡优化:通过队列(PrefillQueue)协调远程请求:
核心组件:
工作流程:
优化方向:
事件循环机制:通过队列分阶段处理请求:
Prefill实例:
Decode实例:
KV传输设计:
PD分离是优化LLM推理资源效率的关键路径,vLLM、Dynamo、Mooncake和SGLang等方案各具优势:
未来方向包括:多实例负载均衡、动态扩缩容、全局Cache共享、以及硬件级优化(如零拷贝传输)。建议各位需根据场景需求(序列长度、请求频率)选择融合或分离部署,好了,今天的分享就到这里,点个小红心,我们下期见。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。