文件最后提交记录最后更新时间
资料 断链问题修复 Co-authored-by: huang-chuhong<huangchuhong1@h-partners.com> # message auto-generated for no-merge-commit merge: !3979 merge master into master 资料 断链问题修复 Created-by: huang-chuhong Commit-by: huang-chuhong Merged-by: cann-robot Description: ## 描述 资料 断链问题修复 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1790 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!39791 个月前
FIA/PFA/IFA/MLA_PROLOG算子迁移 Co-authored-by: s00957487<songyingzhen@huawei.com> # message auto-generated for no-merge-commit merge: !606 merge master into master FIA/PFA/IFA/MLA_PROLOG算子迁移 Created-by: weixin_51171348 Commit-by: weixin_51171348;s00957487 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!6064 个月前
修改版权头 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 个月前
移动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 个月前
移动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 个月前
generalize PFA IFA arch38 Co-authored-by: inspirations<wangke201@huawei.com> # message auto-generated for no-merge-commit merge: !5125 merge master into master generalize PFA IFA arch38 Created-by: inspirations Commit-by: inspirations Merged-by: cann-robot Description: ## 描述 新增IFA和PFA在的泛化场景支持 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!512517 天前
attention 重复安装头文件修改 Co-authored-by: chenglongyu<chenglongyu@huawei.com> # message auto-generated for no-merge-commit merge: !6020 merge repeat_clean_ins into master attention 重复安装头文件修改 Created-by: chenglongyu Commit-by: chenglongyu Merged-by: cann-robot Description: ## 描述 各算子的目录下各自维护的头文件存在命名重复的问题。各头文件加上算子名前缀做区分。 | 原头文件名称 | 新头文件名称 | 文件路径 | |-----------|-----------|---------| | common_header.h | sparse_flash_mla_grad_common_header.h | attention/sparse_flash_mla_grad/op_kernel/arch22/basic_modules/sparse_flash_mla_grad_common_header.h | | common_header.h | sparse_flash_attention_grad_common_header.h | attention/sparse_flash_attention_grad/basic_modules/sparse_flash_attention_grad_common_header.h | | common_header.h | nsa_selected_attention_grad_common_header.h | attention/nsa_selected_attention_grad/basic_modules/nsa_selected_attention_grad_common_header.h | | common_header.h | flash_attention_score_grad_common_header.h | attention/flash_attention_score_grad/op_kernel/arch22/basic_modules/flash_attention_score_grad_common_header.h | | common_utils.h | attention_worker_combine_common_utils.h | attention/attention_worker_combine/op_kernel/attention_worker_combine_common_utils.h | | **gm_to_l1_iterator.h** | **mla_preprocess_gm_to_l1_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_gm_to_l1_iterator.h | | **gm_to_ub_iterator.h** | **mla_preprocess_gm_to_ub_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_gm_to_ub_iterator.h | | kernel_common.hpp | rain_fusion_attention_kernel_common.hpp | attention/rain_fusion_attention/op_kernel/rain_fusion_attention_kernel_common.hpp | | kernel_common.hpp | fia_kernel_common.hpp | attention/fused_infer_attention_score/op_kernel/fia_kernel_common.hpp | | kernel_common.hpp | block_sparse_attention_kernel_common.hpp | attention/block_sparse_attention/op_kernel/block_sparse_attention_kernel_common.hpp | | **l0c_to_gm_iterator.h** | **mla_preprocess_l0c_to_gm_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l0c_to_gm_iterator.h | | **l0c_to_l1_iterator.h** | **mla_preprocess_l0c_to_l1_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l0c_to_l1_iterator.h | | **l0c_to_ub_iterator.h** | **mla_preprocess_l0c_to_ub_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l0c_to_ub_iterator.h | | **l1_to_bt_iterator.h** | **mla_preprocess_l1_to_bt_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l1_to_bt_iterator.h | | **l1_to_fb_iterator.h** | **mla_preprocess_l1_to_fb_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l1_to_fb_iterator.h | | **l1_to_l0_iterator.h** | **mla_preprocess_l1_to_l0_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l1_to_l0_iterator.h | | **l1_to_ub_iterator.h** | **mla_preprocess_l1_to_ub_iterator.h** | attention/mla_preprocess/op_kernel/mla_preprocess_l1_to_ub_iterator.h | | mla_common.h | prompt_flash_attention_mla_common.h | attention/prompt_flash_attention/op_kernel/arch22/prompt_flash_attention_mla_common.h | | mla_common.h | mla_preprocess_mla_common.h | attention/mla_preprocess/op_kernel/mla_preprocess_mla_common.h | | cube_op.h | sparse_flash_mla_grad_cube_op.h | attention/sparse_flash_mla_grad/op_kernel/arch22/basic_modules/sparse_flash_mla_grad_cube_op.h | | matmul.h | sparse_flash_mla_grad_matmul.h | attention/sparse_flash_mla_grad/op_kernel/arch22/basic_modules/sparse_flash_mla_grad_matmul.h | | vec_op.h | sparse_flash_mla_grad_vec_op.h | attention/sparse_flash_mla_grad/op_kernel/arch22/basic_modules/sparse_flash_mla_grad_vec_op.h | | cube_op.h | sparse_flash_attention_grad_cube_op.h | attention/sparse_flash_attention_grad/basic_modules/sparse_flash_attention_grad_cube_op.h | | matmul.h | sparse_flash_attention_grad_matmul.h | attention/sparse_flash_attention_grad/basic_modules/sparse_flash_attention_grad_matmul.h | | vec_op.h | sparse_flash_attention_grad_vec_op.h | attention/sparse_flash_attention_grad/basic_modules/sparse_flash_attention_grad_vec_op.h | ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2680 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60201 天前
整改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 个月前
[310p]PFA support actualSeqLenKV Co-authored-by: 秦杨<qinyang24@hisilicon.com> # message auto-generated for no-merge-commit merge: !1525 merge master into master [310p]PFA support actualSeqLenKV Created-by: qwqinyang Commit-by: qwqinyang;秦杨 Merged-by: cann-robot Description: ## 描述 310P上PFA支持actualSeqLenKV输入,且在inputLayOut为BSH情况下query,key,value的B维度放大到300 ## 关联的Issue ## 测试 测试网络shape,泛化shape,保证精度性能标准 ## 文档更新 修改prompt_flash_attention下的README.md 修改prompt_flash_attention下的aclnn资料 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!15252 个月前
README.md

PromptFlashAttention

产品支持情况

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

功能说明

  • 算子功能:全量推理场景的FlashAttention算子,支持sparse优化、支持actualSeqLengthsKv优化、支持INT8量化功能,支持高精度或者高性能模式选择。

  • 计算公式:

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

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

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

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

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

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

参数说明

参数名 输入/输出 描述 数据类型 数据格式
query 输入 公式中的输入Q。 FLOAT16、BFLOAT16、INT8 ND
key 输入 公式中的输入K。 FLOAT16、BFLOAT16、INT8 ND
value 输入 公式中的输入V。 FLOAT16、BFLOAT16、INT8 ND
attentionOut 输出 公式中的输出。 FLOAT16、BFLOAT16、INT8 ND
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Ascend 950PR/Ascend 950DT:数据类型支持FLOAT16、BFLOAT16、INT8。
  • Atlas 推理系列加速卡产品:仅支持FLOAT16。

约束说明

  • 该接口与PyTorch配合使用时,需要保证CANN相关包与PyTorch相关包的版本匹配。

  • 入参为空的处理:算子内部需要判断参数query是否为空,如果是空则直接返回。参数query不为空Tensor,参数key、value为空tensor,则attentionOut填充为全零。attentionOut为空Tensor时,AscendCLNN框架会处理。其余在上述参数说明中标注了“可传入nullptr”的入参为空指针时,不进行处理。

  • query,key,value输入,功能使用限制如下:

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

      • 支持B轴小于等于65536(64k),输入类型包含INT8时D轴非32对齐或输入类型为FLOAT16或BFLOAT16时D轴非16对齐时,B轴仅支持到128。

      • 支持N轴小于等于256。

      • S支持小于等于20971520(20M)。部分长序列场景下,如果计算量过大可能会导致pfa算子执行超时(aicore error类型报错,errorStr为:timeout or trap error),此场景下建议做S切分处理,注:这里计算量会受B、S、N、D等的影响,值越大计算量越大。典型的会超时的长序列(即B、S、N、D的乘积较大)场景包括但不限于:

        B Q_N Q_S D KV_N KV_S
        1 20 2097152 256 1 2097152
        1 2 20971520 256 2 20971520
        20 1 2097152 256 1 2097152
        1 10 2097152 512 1 2097152
      • 支持D轴小于等于512。inputLayout为BSH或者BSND时,要求N*D小于65535。

    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:在TND场景下query,key,value输入的综合限制:

      • T小于等于65536。
      • N等于8/16/32/64/128,且Q_N、K_N、V_N相等。
      • Q_D、K_D等于192,V_D等于128/192。
      • 数据类型仅支持BFLOAT16。
      • sparse模式仅支持sparse=0且不传mask,或sparse=3且传入mask。
      • 当sparse=3时,要求每个batch单独的actualSeqLengths < actualSeqLengthsKv。
    • Atlas 推理系列加速卡产品:

      • 在inputLayout为BSH时,支持B轴小于等于300,其余情况B轴小于等于128;支持N轴小于等于256;支持S轴小于等于65535(64k), Q_S或KV_S非128对齐,Q_S和KV_S不等长的场景不支持配置atten_mask;支持D轴小于等于512。
  • 当inputLayout为BNSD_BSND时,输入query的shape是BNSD,输出attentionOut的shape为BSND;其余情况attentionOut的shape需要与入参query的shape保持一致。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_PromptFlashAttentionV3 通过aclnnPromptFlashAttentionV3调用PromptFlashAttentionV3算子