原贴链接

我们开发了一种新的KV缓存压缩方法,可与PagedAttention结合使用,以最大化LLM吞吐量,相比传统vLLM提升高达5倍的toks/sec。

论文:https://arxiv.org/abs/2410.00161

Github(vLLM的分支):https://github.com/IsaacRe/vllm-kvcompress/tree/main

我们的方法通过移除缓存中未充分利用的KV块来释放空间,使您能够向解码批次中添加更多序列,从而提高总吞吐量。这对于vRAM有限的硬件配置(如消费级GPU)特别有用。

如果您正在使用vLLM并希望提高吞吐量(或对KV缓存压缩感兴趣),请尝试一下!

入门指南

很简单——只需启动vLLM:

vllm serve <model_name> --enforce-eager --enable-kvc

然后在采样参数中添加"max_cache_tokens: xxx"来配置每个请求在缓存中保留的最大KV数量。更多详情请查看我们的Github。

结果概要

我们在LongBench上对Llama-3.1-8B-Instruct和Llama-3.1-70B-Instruct-FP8进行了基准测试,达到了高达64倍的压缩率,同时在所有子集(除三个子集外)上保持了90%的全缓存性能(在摘要任务上仍观察到性能下降)。在8倍压缩下,大多数子集的性能影响可以忽略不计。

在64倍压缩下,我们观察到8B模型在单个L4上运行时吞吐量超过5倍,70B模型在单个H100上运行时吞吐量翻倍。在8倍压缩下,8B和70B模型的增幅分别为3.4倍和1.8倍。完整结果请参阅论文!

X/Twitter讨论

讨论总结

帖子介绍了KV-Compress方法,通过移除未充分利用的KV来优化内存使用,显著提升LLM的吞吐量。评论主要集中在技术对比、性能优化、适用场景和未来改进方向上。评论者对方法的创新性和高压缩率下的性能表现表示赞赏,同时也提出了关于任务依赖性、GPU性能影响和具体技术细节的疑问。

主要观点

  1. 👍 KV-Compress与量化压缩的差异
    • 支持理由:KV-Compress通过移除未充分利用的KV来压缩,保留精度;量化压缩则降低所有KV的精度。
    • 反对声音:性能高度依赖于任务类型,尤其是总结任务最难处理。
  2. 🔥 性能提升与任务依赖
    • 正方观点:在高压缩率下仍能保持90%的性能,显著提升吞吐量。
    • 反方观点:总结任务和聊天历史处理时,性能可能受影响。
  3. 💡 对普通用户的影响
    • 解释:对单次请求的加速效果有限,但在处理长序列时有一定提升。
  4. 🛠 未来改进方向
    • 解释:希望未来能兼容分块预填充,处理更长的输入。
  5. 🤝 社区反馈与建议
    • 解释:建议通过更吸引人的标题提高关注度,表达对速度优化不重视的遗憾。

金句与有趣评论

  1. “😂 "It’s the same idea–reducing the memory footprint of each sequence’s representation in KV cache–but the approach is different." —— isaacrehg”
    • 亮点:简洁明了地解释了KV-Compress与量化压缩的区别。
  2. “🤔 "You can reach much higher levels of compression with eviction-based methods, but the performance is very task-dependent." —— isaacrehg”
    • 亮点:指出了驱逐压缩的优势和局限性。
  3. “👀 "How does it do on chat history? It’s not exactly summarization, but if you evict details, they will be gone." —— a_beautiful_rhind”
    • 亮点:提出了关于聊天历史处理的具体疑问。

情感分析

总体情感倾向积极,多数评论者对KV-Compress的创新性和性能提升表示赞赏。主要分歧点在于该方法在不同任务类型和硬件配置上的表现,尤其是总结任务和聊天历史处理的性能影响。部分评论者对技术细节和未来改进方向提出了具体疑问和建议。

趋势与预测

  • 新兴话题:未来改进方向,如兼容分块预填充和处理更长的输入。
  • 潜在影响:可能推动KV缓存压缩技术在推理引擎中的广泛应用,提升LLM在高负载场景下的性能表现。

详细内容:

标题:关于 KV-Compress 技术的热门讨论

在 Reddit 上,一则关于“KV-Compress:用于高吞吐量 LLM 推理的 KV 缓存压缩”的帖子引起了广泛关注。该帖子介绍了一种新的 KV 缓存压缩方法,点赞数众多,评论也十分热烈。

原帖主要讲述了开发的这种新方法可与 PagedAttention 配合使用以提高 LLM 吞吐量,相比传统的 vLLM,能实现高达 5 倍的每秒处理令牌数。同时,还提供了相关的论文链接https://arxiv.org/abs/2410.00161和 Github 链接https://github.com/IsaacRe/vllm-kvcompress/tree/main。此方法通过从缓存中移除未充分利用的 KV 块来释放空间,对硬件配置中 vRAM 稀缺的情况尤其有用。

讨论的焦点主要集中在以下几个方面: 有人询问这是否类似于 exllama 或 llama.cpp 中的量化 KV 缓存。原作者回应说,理念相同但方法不同,量化压缩是降低精度保留所有生成的 KV,而这种新方法是直接移除某些未充分利用的 KV。 有用户提到对于普通人来说,比如拥有 24GB GPU 的用户,是否能更快运行模型。原作者表示在解码长序列时有少量加速,但普通的 PagedAttention 内核已高效,不太明显。 还有用户好奇在处理聊天历史时的效果,担心细节被移除。原作者解释如果受限于缓存中能容纳的 KV 数量,可生成更多 token。 有人称赞这一技术很酷,希望能被合并到主分支,并询问是否在 RULER 上进行过测试,以及是否会影响未来的 cuda 图实现。原作者表示尚未测试但会在后续工作中考虑。 有人提出能否详细解释“未充分利用的 KV”的含义。

在这些讨论中,不同用户的观点和疑问丰富了对这一新技术的探讨。一方面,大家对其提高性能的潜力表示期待;另一方面,也对其在实际应用中的各种情况提出了具体的问题和担忧。这一技术能否在实际应用中取得显著效果,还有待进一步的观察和实践。