面向大型大语言模型的分层 KV 缓存:Amazon SageMaker HyperPod 上采用 Curvine 的实现
Amazon Web Services
Meta
DeepSeek
vLLM
本文介绍了 Amazon SageMaker HyperPod 上的一种分层 KV 缓存架构,通过使用分布式缓存文件系统 Curvine,将缓存层级从 GPU 扩展到 CPU 再到共享 NVMe 池。该架构实现了跨副本的 KV 缓存复用,支持高达 100% 的跨 Pod 缓存命中率,并将首个 token 生成时间(TTFT)提升最多 2.7 倍。该解决方案允许工作负载在成本更低的 G6e 实例上运行,而非 P5 实例,从而降低基础设施成本。
大规模运行大语言模型(LLM)推理通常会迫使KV缓存做出权衡:要么为不断增长的KV缓存支付高昂的超大GPU实例费用,要么接受缓慢的首令牌时间(TTFT),因为相同提示在每次请求时都会被重新计算。对于在企业各业务线端点、检索增强生成(RAG)管道或多轮对话应用中部署广泛公开基础模型(FM)目录(如Qwen、Llama、DeepSeek等)的团队,这一权衡直接转化为更高的基础设施成本和下降的用户体验。其根本原因在于,在生成过程中,vLLM会将每个令牌的注意键和值存储在KV缓存中,而前缀缓存则在共享前导令牌的请求之间重用该缓存。在像ml.g6e.4xlarge(每GPU 48 GB)这样的经济型实例上,留给前缀缓存的内存有限,长提示的缓存命中率下降,相同的系统提示在每次请求时都会被重新预填充,且水平扩展的vLLM副本各自维护隔离的缓存。解决方案构建了一个三层缓存层次结构:L0(GPU前缀缓存)、L1(CPU内存卸载)和L2(通过Curvine共享的分布式NVMe池)。L0是vLLM原生的分页注意力层,L1使用LMCache将驱逐的GPU块卸载到主机DRAM,L2通过Curvine将本地NVMe驱动器池化为共享命名空间,并作为ReadWriteMany持久卷声明(PVC)挂载到每个推理Pod中。HyperPod的智能路由将请求引导至最有可能拥有相关KV块的副本,策略包括前缀感知、KV感知和轮询。最终效果:只有在完全未命中时,系统才会从头开始重新预填充,从而显著减少具有中到高提示重叠工作负载的TTFT。在测试部署中,这实现了高达100%的跨Pod缓存命中率、高达2.7倍的TTFT改进,以及约1,900令牌提示的跨节点L2读取延迟约为56毫秒。通过这种架构,以前需要P5实例的工作负载可以在成本更低的G6e实例上运行,从而降低了每个端点的成本。该实现需要启用分层存储的SageMaker HyperPod、EKS集群,并安装Inference Operator和Curvine。本文介绍了五个阶段:启用分层存储、安装Inference Operator及其依赖项、安装Curvine、修补Inference Operator以支持文件系统支持的L2,以及基准测试。
来源: AWS ML blog —
原文
