Automatic Prefix Caching
APC技术,遇到新prompt和老prompt前缀完全相等的,则复用老prompt的KV cache,避免重新计算。
VLLM代码实例:
# set enable_prefix_caching=True to enable APC llm = LLM( model='lmsys/longchat-13b-16k', enable_prefix_caching=True )
应用场景:
1. 长文档问答。给1个长文档,变换不同的query。则把长文档放到前面,可以复用KV cache。
2. 多轮聊天。多轮对话聊天历史,放到前面,可以复用KV cache。
我的实验:
1. fetch_count>1时,不管是否打开enable_prefix_caching,prompt的KV cache都会被复用。
2. prefill公共前缀较长,且decode output较短时,KV cache复用的威力才能发挥出来。
3. 只要前面有1个字符不同,后面完全相同的部分,也不能被视为公共前缀。因为2个prompt这部分的KV值不相等了。