文件最后提交记录最后更新时间
fix(doc): update aclnn md Co-authored-by: wuyao51511<wuyao61@h-partners.com> # message auto-generated for no-merge-commit merge: !4051 merge master into master fix(doc): update aclnn md Created-by: wuyao51511 Commit-by: wuyao51511 Merged-by: cann-robot Description: update aclnn md See merge request: cann/ops-transformer!40511 个月前
add ScatterPaCache Co-authored-by: fishing_artist<liuhuansheng1@h-partners.com> # message auto-generated for no-merge-commit merge: !1341 merge master into master add ScatterPaCache Created-by: fishing_artist Commit-by: fishing_artist Merged-by: cann-robot Description: ## 描述 add ScatterPaCache 背景 Pagedattention是当前Transformer大模型中节约KVCache内存,提升KVCACHE利用率的一个通用方案,在将当前step计算出来的Key和Value保存到KVCache中时,由于Pagedattention的方案中KVCache的内存是非连续的,所以需要将Key和Value离散的更新到对应的位置。 ScatterPaCache算子是单输入单输出的,相较于ScatterPaKvCache同时更新KeyCache和ValueCache,该算子只更新某一路Cache。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/699 ## 测试 功能测试、泛化测试Pass,UT全通过 ## 文档更新 添加了aclnn接口说明文档aclnnScatterPaCache.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!13413 个月前
fix scatterPaKvCache example Co-authored-by: yu_qinfei<yuqinfei1@h-partners.com> # message auto-generated for no-merge-commit merge: !4826 merge fix_scatterPaKvCache_example into master fix scatterPaKvCache example Created-by: yu_qinfei Commit-by: yu_qinfei Merged-by: cann-robot Description: ## 描述 修复cann包中ScatterPaKvCache,ScatterPaCache, GatherPaKvCache算子原型缺失问题 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2177 ## 测试 已跑st 用例,cann包中验证原型已存在 ## 文档更新 attention/scatter_pa_kv_cache/docs/aclnnScatterPaKvCache.md ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!482629 天前
fix: scatter_pa_cache not compiling Co-authored-by: fishing_artist<liuhuansheng1@h-partners.com> # message auto-generated for no-merge-commit merge: !1632 merge master into master fix: scatter_pa_cache not compiling Created-by: fishing_artist Commit-by: fishing_artist Merged-by: cann-robot Description: ## 描述 修复scatter_pa_cache没有编译的问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/780 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 修复并装包后,cann包路径下可以找到kernel编译的.o文件,功能测试正常 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [X] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!16323 个月前
fix: scatter_pa_cache not compiling Co-authored-by: fishing_artist<liuhuansheng1@h-partners.com> # message auto-generated for no-merge-commit merge: !1632 merge master into master fix: scatter_pa_cache not compiling Created-by: fishing_artist Commit-by: fishing_artist Merged-by: cann-robot Description: ## 描述 修复scatter_pa_cache没有编译的问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/780 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 修复并装包后,cann包路径下可以找到kernel编译的.o文件,功能测试正常 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [X] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!16323 个月前
fix scatter_pa_cache ut Co-authored-by: fishing_artist<liuhuansheng1@h-partners.com> # message auto-generated for no-merge-commit merge: !5748 merge master into master fix scatter_pa_cache ut Created-by: fishing_artist Commit-by: fishing_artist Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复scatter_pa_cache ut编译和运行问题 ## 关联的Issue [#2594](https://gitcode.com/cann/ops-transformer/issues/2594) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> bash build.sh -u --ophost --ops=scatter_pa_cache ![image.png](https://raw.gitcode.com/user-images/assets/7673863/53a1e03b-9ced-4eca-a50c-ea4144c84dd5/image.png 'image.png') ## 类型标签 <!-- [x] 表示选中 --> - [X] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!57487 天前
add ScatterPaCache Co-authored-by: fishing_artist<liuhuansheng1@h-partners.com> # message auto-generated for no-merge-commit merge: !1341 merge master into master add ScatterPaCache Created-by: fishing_artist Commit-by: fishing_artist Merged-by: cann-robot Description: ## 描述 add ScatterPaCache 背景 Pagedattention是当前Transformer大模型中节约KVCache内存,提升KVCACHE利用率的一个通用方案,在将当前step计算出来的Key和Value保存到KVCache中时,由于Pagedattention的方案中KVCache的内存是非连续的,所以需要将Key和Value离散的更新到对应的位置。 ScatterPaCache算子是单输入单输出的,相较于ScatterPaKvCache同时更新KeyCache和ValueCache,该算子只更新某一路Cache。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/699 ## 测试 功能测试、泛化测试Pass,UT全通过 ## 文档更新 添加了aclnn接口说明文档aclnnScatterPaCache.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!13413 个月前
doc Tools扫描错误修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !3348 merge master into master doc Tools扫描错误修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: doc Tools扫描错误修改 See merge request: cann/ops-transformer!33482 个月前
README.md

aclnnScatterPaCache

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 ×
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:更新KCache中指定位置的key。

  • 计算公式:

    • 场景一:

      key:[batch * seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, num_head, k_head_size]
      slotMapping:[batch * seq_len]
      cacheMode:"Norm"
      

      keyCache=slotMapping(key)keyCache = slotMapping(key)

    • 场景二:

      key:[batch, seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, 1, k_head_size]
      slotMapping:[batch, num_head]
      compressLensOptional:[batch, num_head]
      compressSeqOffsetOptional:[batch * num_head]
      seqLensOptional:[batch]
      cacheMode:"Norm"
      

      keyCache= slotMapping(key[:compressSeqOffset],ReduceMean(key[compressSeqOffset:compressSeqOffset+compressLens]),key[compressSeqOffset+compressLens:seqLens])\begin{aligned} keyCache =\ & slotMapping(key[: compressSeqOffset], \\ & ReduceMean(key[compressSeqOffset : compressSeqOffset + compressLens]), \\ & key[compressSeqOffset + compressLens : seqLens]) \end{aligned}

    • 场景三:

      key:[batch, seq_len, num_head, k_head_size]
      keyCache:[num_blocks, block_size, 1, k_head_size]
      slotMapping:[batch, num_head]
      compressLensOptional:[batch * num_head]
      seqLensOptional:[batch]
      cacheMode:"Norm"
      

      keyCache=slotMapping(key[seqLens−compressLens:seqLens])keyCache = slotMapping(key[seqLens - compressLens : seqLens])

    上述场景根据构造的参数来区别,符合第一种入参构造走场景一,符合第二种构造走场景二,符合第三种构造走场景三。场景一没有compressLensOptional、seqLensOptional、compressSeqOffsetOptional这三个可选参数,场景三没有compressSeqOffsetOptional可选参数。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
key 输入 待更新的key值,公式中的key。 FLOAT16、FLOAT、BFLOAT16、INT8、UINT8、INT16、UINT16、INT32、UINT32、HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN、FLOAT4_E2M1、FLOAT4_E1M2 ND
keyCacheRef 输入/输出 需要更新的keyCache,公式中的keyCache。 与key一致。 ND
slotMapping 输入 key的每个token在cache中的存储偏移,公式中的slotMapping。 INT32、INT64 ND
compressLensOptional 可选输入 压缩量,公式中的compressLens。 与slotMapping一致。 ND
compressSeqOffsetOptional 可选输入 每个batch中每个head的压缩起点,公式中的compressSeqOffset。 与slotMapping一致。 ND
seqLensOptional 可选输入 每个batch的实际seqLens,公式中的seqLens。 与slotMapping一致。 ND
cacheMode 输入 keyCacheRef的内存排布格式。 STRING -

约束说明

  • 参数说明中shape使用的变量说明如下:
    • batch:当前输入的序列数量(一次处理的样本数),取值为正整数。
    • seq_len:序列的长度,取值为正整数。
    • num_head:多头注意力中“头”的数量,取值为正整数。
    • k_head_size:每个注意力头中key的特征维度(单头key的长度),取值为正整数。
    • num_blocks:keyCache中预分配的块总数,用于存储所有序列的key数据,取值为正整数。
    • block_size:每个缓存块包含的token数量,取值为正整数。
  • 输入值域限制:seqLensOptional和compressLensOptional里面的每个元素值必须满足公式:reduceSum(seqLensOptional[i] - compressLensOptional[i] + 1) <= num_blocks * block_size(对应场景二、三)。
  • 输入数据类型限制:HIFLOAT8、FLOAT8_E5M2、FLOAT8_E4M3FN、FLOAT4_E2M1、FLOAT4_E1M2仅支持key是3维的场景(对应场景一)。

调用说明

调用方式 样例代码 说明
aclnn test_aclnn_ScatterPaCache 通过aclnnScatterPaCache调用ScatterPaCache算子