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