NVIDIA/kvpress

LLM KV cache compression made easy

解决的问题

部署长上下文大语言模型(LLMs)成本高昂,因为键值(KV)缓存会随令牌数量线性增长。例如,使用 float16 处理由 Llama 3.1-70B 处理 100 万个令牌时,可能需要高达 330GB 的内存。KVPress 通过压缩 KV 缓存,降低这些内存需求并提升解码速度。

工作原理

KVPress 实现了多种“压缩方法”——在预填充阶段或解码阶段定期对 KV 对进行剪枝或合并。它与 Hugging Face 的 transformers 库集成,提供一个自定义的 KVPressTextGenerationPipeline 来处理分词和聊天模板。

压缩通过以下几种策略实现:

  • 基于评分的剪枝:使用重要性评分(例如,随机、逆范数或注意力权重)来移除重要性最低的 KV 对。
  • 结构化压缩:保持特定的缓存模式,例如在各层间维持金字塔形大小,或仅保留初始和最近的令牌(StreamingLLM)。
  • 降维:基于通道注意力评分压缩键的维度。
  • 高级技术:使用 CUR 分解、上下文重建(KVzip),或把被移除的令牌合并到存活的邻居中。

适用人群

致力于长上下文 LLM 效率研究的科研人员和开发者,需要一个标准化框架来实现、基准测试和部署 KV 缓存压缩方法。

主要亮点

  • 丰富的库支持:支持多种无需训练的压缩方法,包括 SnapKV、StreamingLLM 和 KVzip。
  • 灵活的流水线:提供自定义的 transformers 流水线,便于集成与评估。
  • 双阶段压缩:支持在预填充阶段和解码阶段(通过 DecodingPress)进行压缩。
  • 量化支持:与 QuantizedCache 兼容,进一步减少内存占用。
  • 基准测试工具:包含 CLI 和笔记本,用于测量精度、峰值内存使用量和总时间增益。

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • Dispatch