KV-Cache
简介
高效缓存键值 (KV) 张量对于优化 LLM 推理至关重要。重用 KV-Cache 而不是重新计算,可以显著改善首字延迟 (TTFT) 和整体吞吐量,同时最大限度地提高系统资源利用率。作为分布式 LLM 推理平台,llm-d 提供了一套完整的 KV-Cache 管理功能来实现这些目标。
此仓库包含 llm-d-kv-cache,这是一个可插拔服务,旨在实现感知 KV-Cache 的路由 (KV-Cache Aware Routing),并为基于 vLLM 的推理平台中高级跨节点缓存协同奠定基础。
Project Northstar (北极星项目)
有关该项目目标和愿景的详细概述,请参阅 Project Northstar 文档。
KV-Cache 索引器概览
该项目的主要组件是 KV-Cache Indexer (索引器),它是一个高性能库,用于维护 vLLM Pod 集群中 KV-Cache 数据块位置的全局近实时视图。
它由从 vLLM 流式传输的 KVEvents 驱动,当 vLLM 实例创建或驱逐 KV 块时,这些事件会提供结构化的元数据。这使得索引器能够跟踪哪些数据块驻留在哪些节点以及哪一层(例如 GPU 或 CPU)。这些元数据是智能路由的基础,使调度程序能够做出最优的、感知 KV-Cache 的放置决策。
下图展示了主要的数据流:读取路径(打分)和写入路径(事件摄取)。
读取路径
- 1: 打分请求:调度程序请求 KVCache Indexer 为给定提示词 (Prompt) 对一组 Pod 进行打分
- 2: 索引查询:索引器根据提示词计算必要的 KV 块键,并查询 KV-Block 索引以查看哪些 Pod 拥有这些数据块
- 3: 返回分数:索引器向调度程序返回 Pod 及其对应的 KV-Cache 命中分数的映射表
写入路径
- A: 事件摄取:随着 vLLM Pod 创建或驱逐 KV 块,它们会发出包含这些更改元数据的
KVEvents - B: 索引更新:事件订阅者消耗这些事件并近实时地更新 KV-Block 索引
示例
- KVCache Indexer:一个参考实现,展示如何运行和使用
kvcache.Indexer模块 - KVCache Aware Scorer:一个参考实现,展示如何将
kvcache.Indexer集成到调度程序中(如llm-d-inference-scheduler) - KV-Events:演示 KV-Cache 库如何处理 KV-Events,包括使用虚拟 ZMQ 发布者的离线示例和使用 vLLM Helm chart 的在线示例。