在SageMaker HyperPod上实现LLM推理的分离式预填充和解码
本文介绍了如何使用vLLM在Amazon SageMaker HyperPod上通过HyperPod推理运算符实现分离式预填充和解码(DPD)。DPD通过将预填充和解码阶段分配到不同的GPU池,消除了长提示对令牌生成的干扰,从而降低了首令牌延迟和令牌间延迟,提高了推理性能。
在大型语言模型推理过程中,预填充和解码是两种截然不同的阶段。预填充是计算密集型,它并行处理整个输入提示以生成初始键值缓存;而解码是内存密集型,一次生成一个令牌,需要大量内存带宽来访问模型权重和不断增长的键值缓存。当预填充和解码共享同一GPU时,长提示会阻塞每个并发请求的令牌生成。分离式预填充和解码(DPD)通过将这两个阶段分配到通过弹性结构适配器(EFA)连接的不同GPU池上,消除了这种干扰,从而可以独立调整首令牌延迟和令牌间延迟,更可靠地控制尾部延迟,并防止长上下文预填充阻塞正在进行的解码请求。
vLLM通过连续批处理和PagedAttention提高了单节点效率,但大规模部署时仍面临多节点编排和路由优化方面的挑战。本文展示了如何使用HyperPod推理运算符在Amazon SageMaker HyperPod上实现基于vLLM的DPD。
何时使用分离式推理
DPD对于长上下文、高并发的流式工作负载效果最为显著,例如聊天助手、代理管道、文档分析端点和具有大量检索上下文的检索增强生成。在这些情况下,单个长提示会阻塞所有其他请求的解码,导致令牌延迟峰值,而DPD通过构造消除了这一现象。当您的输入提示经常超过4096个令牌、有多个并发用户或请求、需要流式响应且对令牌交付一致性有要求,或者混合了长提示和短提示流量时,可以考虑使用DPD。对于GPU争用不成问题的批量或离线工作负载、低并发部署或仅包含短提示的流量,共置部署更简单。低于路由阈值的请求将直接发送到解码器,无需手动路由。
DPD至少需要一个预填充节点和一个支持RDMA的EFA网络的解码节点。支持的实例类型包括P5和P6系列。
架构
HyperPod DPD实现基于vLLM生产栈路由器,并使用LMCache提供KV缓存传输层。部署包含三个组件:智能路由器、预填充器和解码器。路由器负责令牌化并决定请求是否走分离路径;预填充器为长提示计算KV缓存并推送到解码器;解码器仅执行解码,保证延迟稳定。KV缓存传输通过LMCache、NIXL、libfabric和EFA四层堆栈实现,延迟极低。
部署概述
部署DPD需要HyperPod推理运算符3.2或更高版本,并选择合适的支持RDMA的实例类型。本文详细介绍了部署Llama 70B模型的步骤,包括安装运算符、准备模型检查点、配置部署清单等。部署清单中的关键字段包括spec.pdSpec声明预填充/解码拓扑,routingThreshold设置路由阈值,以及各个角色的参数和资源。