文件最后提交记录最后更新时间
【update】block_sparse_attention/fused_infer_attention_score等算子资料修改 Co-authored-by: wjc<wangjincheng14@huawei.com> # message auto-generated for no-merge-commit merge: !4071 merge personal/wjc/doc_updates into master 【update】block_sparse_attention/fused_infer_attention_score等算子资料修改 Created-by: Anthony0331 Commit-by: wjc Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本次PR对block_sparse_attention、fused_infer_attention_score等算子的API文档进行了集中修正和优化。主要解决了文档中普遍存在的拼写错误、参数名不一致、术语不准确、约束条件描述模糊或过时、以及部分格式和示例代码错误等问题。这些修改旨在提升整个算子接口文档集的准确性、一致性和可读性,确保开发者能够正确理解和使用相关功能。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#1825](https://gitcode.com/cann/ops-transformer/issues/1825) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了以下文件: attention/block_sparse_attention/docs/aclnnBlockSparseAttention.md attention/fused_infer_attention_score/docs/aclnnFusedInferAttentionScore.md attention/fused_infer_attention_score/docs/aclnnFusedInferAttentionScoreV2.md attention/fused_infer_attention_score/docs/aclnnFusedInferAttentionScoreV3.md attention/fused_infer_attention_score/docs/aclnnFusedInferAttentionScoreV4.md attention/fused_infer_attention_score/docs/aclnnFusedInferAttentionScoreV5.md attention/incre_flash_attention/docs/aclnnIncreFlashAttention.md attention/incre_flash_attention/docs/aclnnIncreFlashAttentionV2.md attention/incre_flash_attention/docs/aclnnIncreFlashAttentionV3.md attention/incre_flash_attention/docs/aclnnIncreFlashAttentionV4.md attention/nsa_compress_attention_infer/docs/aclnnNsaCompressAttentionInfer.md attention/nsa_compress_attention_infer/examples/test_aclnn_nsa_compress_attention_infer.cpp attention/nsa_compress_with_cache/docs/aclnnNsaCompressWithCache.md attention/nsa_selected_attention_infer/docs/aclnnNsaSelectedAttentionInfer.md attention/nsa_selected_attention_infer/examples/test_aclnn_nsa_selected_attention_infer.cpp attention/prompt_flash_attention/docs/aclnnPromptFlashAttention.md attention/prompt_flash_attention/docs/aclnnPromptFlashAttentionV2.md attention/prompt_flash_attention/docs/aclnnPromptFlashAttentionV3.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!40711 个月前
【FIA&IFA】危险函数整改 Co-authored-by: L_Euler<hanxiaobin3@huawei.com> # message auto-generated for no-merge-commit merge: !2484 merge personal/hxb/cleancode into master 【FIA&IFA】危险函数整改 Created-by: L_Euler Commit-by: L_Euler Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 危险函数整改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/1128 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!24842 个月前
修改版权头 Co-authored-by: yayahello<zhaopenglei@hisilicon.com> # message auto-generated for no-merge-commit merge: !3171 merge master into master 修改版权头 Created-by: yayahello Commit-by: yayahello Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 版权声明不标准,修改为标准头 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#1100](https://gitcode.com/cann/ops-transformer/issues/1100) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [x] ❓ 其他,请描述: See merge request: cann/ops-transformer!31712 个月前
[FIA]修改FA的aclnninner调用通过头文件方式 Co-authored-by: linengyao<linengyao@huawei.com> # message auto-generated for no-merge-commit merge: !3258 merge modify_opapi_headfile into master [FIA]修改FA的aclnninner调用通过头文件方式 Created-by: linengyao Commit-by: linengyao Merged-by: cann-robot Description: ## 描述 FA类推理算子的aclnn实现调用aclnninner通过头文件方式而非extern方式 ## 背景: 当前使用aclnninner都是extern接口,如果生成的接口修改了(extern的地方不会自动修改),编译可能会检查不出来。原因为extern只有符号,和连接的实体接口并不一致。 ## 修改点 FA类推理算子的aclnninner文件需要用到自动生成的文件aclnnInner_fused_infer_attention_score.h中的函数接口,之前的方式是在每个需要调用的地方使用extern对其进行声明,现在统一改为直接include该文件 ## 关联的Issue [#1618](https://gitcode.com/cann/ops-transformer/issues/1618) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!32581 个月前
移动opapi目录 Co-authored-by: linengyao<linengyao@huawei.com> # message auto-generated for no-merge-commit merge: !3313 merge opapi_change_dir into master 移动opapi目录 Created-by: linengyao Commit-by: linengyao Merged-by: cann-robot Description: ## 描述 修改opapi目录至op_host同级 修改fallback文件至op_graph目录下 ## 关联的Issue [#1522](https://gitcode.com/cann/ops-transformer/issues/1522) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!33132 个月前
not use socVersion in arch38 Co-authored-by: wangzhe123456789<wangzhe92@huawei.com> # message auto-generated for no-merge-commit merge: !5300 merge master into master not use socVersion in arch38 Created-by: wangzhe123456789 Commit-by: wangzhe123456789 Merged-by: cann-robot Description: ## 描述 not use socVersion in arch38 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!530015 天前
fix(incre_flash_attention): 显式指定DataCopy模板参数避免KVINT4编译错误 Co-authored-by: leiqingji<leiqingji@h-partners.com> # message auto-generated for no-merge-commit merge: !5831 merge fix/incre-flash-attention-datacopy into master fix(incre_flash_attention): 显式指定DataCopy模板参数避免KVINT4编译错误 Created-by: leiqingji Commit-by: leiqingji Merged-by: cann-robot Description: ## 描述 在KVINT4分支的AntiquantAIterExpand函数中,DataCopy调用时显式指定<int8>模板参数,解决编译时模板参数推导失败的问题。 ## 改动 - 修复 incre_flash_attention_preload.h 中 DataCopy 模板参数 - 修复 incre_flash_attention_preload_dd.h 中 DataCopy 模板参数 - 修复 incre_flash_attention_split_Bbn2s2_Us2.h 中 DataCopy 模板参数 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2179 ## 测试 - 编译测试通过 ## 类型标签 - [x] 🐛 Bug 修复 See merge request: cann/ops-transformer!58313 天前
整改st目录下的atk用例统一目录格式 Co-authored-by: yue-ma<mayue54@huawei.com> # message auto-generated for no-merge-commit merge: !5166 merge master into master 整改st目录下的atk用例统一目录格式 Created-by: yue-ma Commit-by: yue-ma Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 整改st目录下的atk用例统一目录格式 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1538 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!516616 天前
更新license Co-authored-by: PerrySkywalker<wangmingkang1@huawei.com> # message auto-generated for no-merge-commit merge: !568 merge lic into master 更新license Created-by: PerrySkywalker Commit-by: PerrySkywalker Merged-by: cann-robot Description: ## 描述 更新license <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!5685 个月前
[IFA Prolog] readme 资料修复 Co-authored-by: huang-chuhong<huangchuhong1@h-partners.com> # message auto-generated for no-merge-commit merge: !3513 merge master into master [IFA Prolog] readme 资料修复 Created-by: huang-chuhong Commit-by: huang-chuhong Merged-by: cann-robot Description: ## 描述 [IFA Prolog] readme 资料修复 attention/mla_prolog/README.md: 将NT8改为INT8 attention/incre_flash_attention/README.md: 将ttentionOut改为attentionOut ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1518 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!35131 个月前
README.md

IncreFlashAttention

产品支持情况

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

功能说明

  • 算子功能:对于自回归(Auto-regressive)的语言模型,随着新词的生成,推理输入长度不断增大。在原来全量推理的基础上实现增量推理,query的S轴固定为1,key和value是经过kvCache后,将之前推理过的state信息,叠加在一起,每个Batch对应S轴的实际长度可能不一样,输入的数据是经过padding后的固定长度数据。支持量化,位置编码,page attention,kvCache反量化和KV左Padding特性。

    相比全量场景的FlashAttention算子(PromptFlashAttention),增量推理的流程与正常全量推理并不完全等价,不过增量推理的精度并无明显劣化。

    说明:

    kvCache是大模型推理性能优化的一个常用技术。采样时,Transformer模型会以给定的prompt/context作为初始输入进行推理(可以并行处理),随后逐一生成额外的token来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为此需要给当前序列中的每个项目(无论是prompt/context还是生成的token)提取键值(KV)向量。这些向量存储在一个矩阵中,通常被称为kv缓存(kvCache)。

  • 计算公式:

    self-attention(自注意力)利用输入样本自身的关系构建了一种注意力模型。其原理是假设有一个长度为nn的输入样本序列xxxx的每个元素都是一个dd维向量,可以将每个dd维向量看作一个token embedding,将这样一条序列经过3个权重矩阵变换得到3个维度为n∗dn*d的矩阵。

    self-attention的计算公式一般定义如下,其中QQKKVV为输入样本的重要属性元素,是输入样本经过空间变换得到,且可以统一到一个特征空间中。

    Attention(Q,K,V)=Score(Q,K)V Attention(Q,K,V)=Score(Q,K)V

    本算子中Score函数采用Softmax函数,self-attention计算公式为:

    Attention(Q,K,V)=Softmax(QKTd)V Attention(Q,K,V)=Softmax(\frac{QK^T}{\sqrt{d}})V

    其中QQKTK^T的乘积代表输入xx的注意力,为避免该值变得过大,通常除以dd的开根号进行缩放,并对每行进行softmax归一化,与VV相乘后得到一个n∗dn*d的矩阵。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
query 输入 公式中的输入Q。 FLOAT、FLOAT16 ND
key 输入 公式中的输入K。 FLOAT、INT8、FLOAT16 ND
value 输入 公式中的输入V。 FLOAT、INT8、FLOAT16 ND
scaleValue 属性 公式中的d开根号的倒数。 DOUBLE -
attentionOut 输出 公式中的输出。 FLOAT、INT8、FLOAT16 ND

约束说明

  • 参数query和attentionOut的shape需要完全一致,参数key、value 中对应tensor的shape需要完全一致。

  • 非连续场景下,参数key、value的tensorlist中tensor的个数等于query的B(由于tensorlist限制, 非连续场景下B需要小于等于256)。shape除S外需要完全一致,且batch只能为1。

  • 参数query中的N和numHeads值相等,key、value的N和numKeyValueHeads值相等,并且numHeads是numKeyValueHeads的倍数关系。

  • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Ascend 950PR/Ascend 950DT:

    • 支持B轴小于等于65536,N轴小于等于256,D轴小于等于512。
  • Atlas 推理系列加速卡产品:

    • 支持B轴小于等于256,N轴小于等于256,D轴小于等于512,key、value的S轴小于等于65536。
    • query、key、value和attentionOut数据类型仅支持FLOAT16。
    • 在数据排布格式为BNSD时,需要满足numHeads与numKeyValueHeads的比值不大于8,其他情况仅支持取值0;
  • INT8量化相关入参数量与输入、输出数据格式的综合限制:

    • query、key、value输入为FLOAT16,输出为INT8的场景:入参quantScale2必填,quantOffset2可选,不能传入dequantScale1、quantScale1、dequantScale2(即为nullptr)参数。
  • pseShift数据类型需与query数据类型保持一致。

  • antiquantScale和antiquantOffset参数约束:

    • per-channel模式:两个参数的shape可支持(2, N, 1, D),(2, N, D),(2, H),N为numKeyValueHeads。参数数据类型和query数据类型相同。
    • per-tensor模式:两个参数的shape均为(2),数据类型和query数据类型相同。
  • 入参 quantScale2 和 quantOffset2 支持 per-tensor/per-channel 两种格式和 FLOAT32/BFLOAT16 两种数据类型。若传入 quantOffset2 ,需保证其类型和shape信息与 quantScale2 一致。当输入为BFLOAT16时,同时支持FLOAT32和BFLOAT16,否则仅支持FLOAT32 。per-channel 格式,当输出layout为BSH时,要求 quantScale2 所有维度的乘积等于H;其他layout要求乘积等于N*D。(建议输出layout为BSH时,quantScale2 shape传入[1,1,H]或[H];输出为BNSD时,建议传入[1,N,1,D]或[N,D];输出为BSND时,建议传入[1,1,N,D]或[N,D])。

  • page attention场景:

    • page attention的使能必要条件是blockTable存在且有效,同时key、value是按照blockTable中的索引在一片连续内存中排布,支持key、value dtype为FLOAT16/BFLOAT16/INT8,在该场景下key、value的inputLayout参数无效。
    • blockSize是用户自定义的参数,该参数的取值会影响page attention的性能,在使能page attention场景下,blockSize需要传入非0值, 且blocksize最大不超过512。key、value输入类型为FLOAT16/BFLOAT16时需要16对齐,key、value 输入类型为INT8时需要32对齐,推荐使用128。通常情况下,page attention可以提高吞吐量,但会带来性能上的下降。
    • page attention场景下,当query的inputLayout为BNSD时,kvCache排布支持(blocknum, blocksize, H)和(blocknum, KV_N, blocksize, D)两种格式,当query的inputLayout为BSH、BSND时,kvCache排布只支持(blocknum, blocksize, H)一种格式。blocknum不能小于根据actualSeqLengthsKv和blockSize计算的每个batch的block数量之和。且key和value的shape需保证一致。
    • page attention场景下,kvCache排布为(blocknum, KV_N, blocksize, D)时性能通常优于kvCache排布为(blocknum, blocksize, H)时的性能,建议优先选择(blocknum, KV_N, blocksize, D)格式。
    • page attention使能场景下,当输入kvCache排布格式为(blocknum, blocksize, H),且 numKvHeads * headDim 超过64k时,受硬件指令约束,会被拦截报错。可通过使能GQA(减小 numKvHeads)或调整kvCache排布格式为(blocknum, numKvHeads, blocksize, D)解决。
    • page attention场景下,必须传入输入actualSeqLengths。
    • page attention场景下,blockTable必须为二维,第一维长度需等于B,第二维长度不能小于maxBlockNumPerSeq(maxBlockNumPerSeq为每个batch中最大actualSeqLengthsKv对应的block数量)。
    • page attention使能场景下,以下场景输入S需要大于等于maxBlockNumPerSeq * blockSize。
    • 使能 Attention Mask,例如 mask shape为 (B, 1, 1, S)。
    • 使能 pseShift,例如 pseShift shape为(B, N, 1, S)。
  • kv左padding场景:

    • kvCache的搬运起点计算公式为:Smax - kvPaddingSize - actualSeqLengths;kvCache的搬运终点计算公式为:Smax - kvPaddingSize。其中kvCache的搬运起点或终点小于0时,返回数据结果为全0。
    • kvPaddingSize小于0时将被置为0。
    • 需要与actualSeqLengths参数一起使能,否则默认为kv右padding场景。
    • 与Attention Mask参数一起使能时,需要保证Attention Mask含义正确,即能够正确的对无效数据进行隐藏。否则将引入精度问题。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_IncreFlashAttentionV4 通过aclnnIncreFlashAttentionV4调用IncreFlashAttentionV4算子。