ReshapeAndCacheOperation

功能

遍历每个key和value,将key和value(num_heads, head_size)以slotmapping填入key_cache/value_cache指定位置。

图1 ReshapeAndCacheOpeartion功能示意图

算子上下文

图2 ReshapeAndCacheOpeartion算子上下文

如上图所示,为典型rope场景下pa decoder layer的部分结构。ReshapeAndCache与paged attention配合使用,用于存储某layer上各个token的历史key和value。与加速库的KVCache算子不同,ReshapeAndCache算子只维护某一层的kvcache而非一个服务的全部kvcache。因此,若模型中有n个layer,使用ReshapeAndCache的情况下需要n个k_cache tensor与n个v_cache tensor管理历史kv。

定义

struct ReshapeAndCacheParam {
   enum CompressType : int {
      COMPRESS_TYPE_UNDEFINED = 0,
      COMPRESS_TYPE_KVHEAD,
      COMPRESS_TYPE_KVHEAD_ROPE
   };
   CompressType compressType = COMPRESS_TYPE_UNDEFINED;
};

参数列表

成员名称

类型

默认值

描述

CompressType

int

COMPRESS_TYPE_UNDEFINED

压缩类型。

  • COMPRESS_TYPE_UNDEFINED:默认值,不压缩。
  • COMPRESS_TYPE_KVHEAD:压缩key_cache, value_cache的kvHead维度。
  • COMPRESS_TYPE_KVHEAD_ROPE:rope场景下压缩key_cache, value_cache的kvHead维度。

输入输出

规格约束