开发者
资源
[object Object]

当前大语言模型推理系统普遍采用KV Cache缓存机制,但该机制存在以下两个问题:

  1. 随着LLM支持的序列长度不断增长,KV Cache所需要的显存资源也急剧增加。
  2. KV Cache只对当前session有效,如果跨session存在重复Token序列的情况下无法实现复用。

Prefix Cache通过哈希表保留session结束后的KV Cache,新的session请求在哈希表中查找是否存在相同的Token序列,即可复用之前计算好的KV Cache,从而实现跨session的KV Cache复用。

其优势主要包括:

  • 更短的prefill时间:由于跨session的重复Token序列对应的KV Cache可以复用,那么就可以减少一部分前缀Token的KV Cache计算时间,从而减少prefill的时间。
  • 更高效的显存使用:当正在处理的sessions相互之间存在公共前缀时,公共前缀部分的KV Cache可以共用,不必重复占用多份显存。
[object Object]
  • Atlas 800I A2 推理服务器、Atlas 300I Duo 推理卡和Atlas 800I A3 超节点服务器支持此特性。
  • Qwen2系列、Qwen2.5系列、Qwen3系列、DeepSeek-R1和DeepSeek-V3/V3.1模型支持对接此特性。
  • 当跨session公共前缀Token数大于等于block size时,才会进行公共前缀Token的KV Cache复用。
  • Prefix Cache支持的量化特性:W4A8量化、W8A8量化、PDMIX量化与稀疏量化,其他量化特性暂不支持。
  • 该特性不能和Multi-LoRA特性同时使用。
  • 该特性可以和PD分离、并行解码、MTP、kvcache池化、异步调度、SplitFuse特性、context parallel + sequence parallel、C8量化同时使用。
  • 该特性支持n、best_of、use_beam_search后处理参数。
  • PD分离场景下,仅P节点需要开启该特性。
  • 前缀复用率低或者没有复用的情况下,不建议开启该特性。
  • 不支持prefix cache + context parallel + sequence parallel + function call(multiturn)的叠加
[object Object]

开启Prefix Cache特性需要配置的补充参数如~所示。

表 1 Prefix Cache特性补充参数1:ModelDeployConfig中的ModelConfig参数 [object Object][object Object]

[object Object]undefined

表 2 Prefix Cache特性补充参数2:ScheduleConfig的参数 [object Object][object Object]

[object Object]undefined

表 3 Prefix Cache特性补充参数3:ModelConfig中的models参数 [object Object][object Object]

[object Object]undefined
[object Object]

以多轮对话为例,简单介绍Prefix Cache如何使用。

  1. 打开Server的config.json文件。

    • whl包安装方式:

      [object Object]
    • run包安装方式:

      [object Object]
  2. 配置服务化参数。在Server的config.json文件中按照~添加相应参数,服务化参数说明请参见章节,参数配置示例如下。

    下面以DeepSeek-R1模型,只开启Prefix Cache特性为例。

    [object Object]
    [object Object]
  3. 启动服务。

    • whl包安装方式:

      [object Object]
    • run包安装方式:

      [object Object]
  4. 第一次使用以下指令发送请求,prompt为第一轮问题。

    如需使用到Prefix Cache特性,第二次请求的prompt需要与第一次的prompt有一定长度的公共前缀,常见使用场景有多轮对话和few-shot学习等。

    [object Object]
  5. 第二次发送请求,prompt为:第一轮问题+第一轮答案+第二轮问题,此时第一轮问题为可复用的公共前缀(实际复用部分可能不是第一轮问题的完整prompt;由于cache实现以block为单位,Prefix Cache以blocksize的倍数储存,如第一轮问题prompt的token数量为164,当blocksize为128时,实际复用部分只有前128token)。

    [object Object]