Papers:CacheGen
CacheGen: KV Cache Compression and Streaming for Fast Large Language Model Serving
研究背景
-
LLM的广泛应用
-
LLM使用特点
prepend an LLM input with a long context containing thousands of tokens or more.
- e.g.在输入中加入领域内知识,便于LLM利用以生成回应(无需LLM自身携带领域知识)。
- e.g.用户要求 LLM 利用交互期间积累的对话历史记录来补充输入。
-
问题:答案生成的延时。
Using long contexts poses a challenge to the response generation latency, as no response can be generated until the whole context is loaded and processed by the LLM.
相关工作
-
增加处理上下文的吞吐量,即提高了处理长上下文的速度或效率,能够在单位时间内处理更多的数据或上下文。但是对于较长的上下文处理,延迟仍然长达数秒。
-
通过存储、重用上下文的
KV cache
,在再次使用上下文时避免冗余计算。但是对应的KV cache
不总是在本地GPU存储中,可能需要从其他机器调取,造成了额外的网络延迟。 -
减小 GPU 内存中 KV 缓存的运行时大小,以适应内存限制或 LLM 的输入限制。
-
删除不重要的 token 或上下文文本
-
对
KV cache
缓存进行智能量化对 KV 缓存中的张量进行压缩或简化处理,将其表示为更紧凑的数据形式。
-
本文工作
针对研究背景中的问题部分,希望减小 KV cache
的传输时间大小以减少网络延迟。文章选择不保留其张量格式,而是将其编码为更紧凑的比特流。由此,提出了 CacheGen
,一个快速上下文加载模块,能够在抓取、处理长上下文时减少网络延迟。
CacheGen
-
KV cache encoding and decoding
-
自定义量化和算术编码策略:利用了 KV 缓存中的分布特性。
KV 张量在相邻 token 之间的局部性(locality):相邻的 token 可能有相似的 KV 值,因此可以压缩。
对不同层量化损失的敏感度:KV 缓存的不同层对量化误差的敏感度不同,因此 CacheGen 根据不同层的特点进行差异化处理。
-
解码和传输的优化
- GPU 加速解码:在解码(即解压缩)阶段,CacheGen 通过 GPU 实现了加速,确保解码过程更快。
-
-
KV cache streaming
-
CacheGen 以流式方式传输已经编码的 KV 缓存数据。流式传输意味着数据按顺序分块发送,而不是一次性传输整个数据包。这样可以更灵活地应对网络状况的变化。
-
在用户查询到达之前,CacheGen 会将长上下文拆分成多个块(chunks),然后对每个块的 KV cache 进行独立编码。不同块可以使用不同的压缩级别进行编码,以便灵活适应不同的网络条件。这类似于视频流传输时,根据网络带宽动态调整视频的清晰度。
-
发送上下文的 KV cache 时,CacheGen 会逐块传输这些编码好的数据。在传输每个块时,CacheGen 会根据当前的网络状况动态调整压缩级别。
-
如果网络带宽太低,CacheGen 还可以选择将块以文本格式发送,而不是发送压缩后的 KV cache 。此时,LLM 会接收到文本数据并重新计算该块的 KV cache 。这种方式增加了计算开销,但可以应对极端的带宽限制。
-