文件最后提交记录最后更新时间
SFA doc Co-authored-by: wangzhaonan<wangzhaonan4@huawei.com> # message auto-generated for no-merge-commit merge: !5538 merge master into master SFA doc Created-by: wangzhaonan Commit-by: wangzhaonan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改SFA资料: 增加rope不为空说明,去掉旧的图模式不支持的旧说明 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!553810 天前
fix SFA example Co-authored-by: wangzhaonan<wangzhaonan4@huawei.com> # message auto-generated for no-merge-commit merge: !5332 merge master into master fix SFA example Created-by: wangzhaonan Commit-by: wangzhaonan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本pr更新了A5 SFA算子的example文件,可以使用文件中的代码正确调用SFA算子,用户也可以根据需要修改参数。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!53323 天前
fix: VF分组补充和cleancode Co-authored-by: j60100428<jingsong5@h-partners.com> # message auto-generated for no-merge-commit merge: !6019 merge master into master fix: VF分组补充和cleancode Created-by: SH_jingsong Commit-by: j60100428 Merged-by: cann-robot Description: ## 描述 VF分组补充和cleancode ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2714 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60192 天前
fix: clean code Co-authored-by: j60100428<jingsong5@h-partners.com> # message auto-generated for no-merge-commit merge: !6033 merge master into master fix: clean code Created-by: SH_jingsong Commit-by: j60100428 Merged-by: cann-robot Description: ## 描述 fix: clean code ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2731 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60331 天前
fix: clean code Co-authored-by: j60100428<jingsong5@h-partners.com> # message auto-generated for no-merge-commit merge: !6033 merge master into master fix: clean code Created-by: SH_jingsong Commit-by: j60100428 Merged-by: cann-robot Description: ## 描述 fix: clean code ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2731 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60331 天前
更新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 个月前
SFA doc Co-authored-by: wangzhaonan<wangzhaonan4@huawei.com> # message auto-generated for no-merge-commit merge: !5538 merge master into master SFA doc Created-by: wangzhaonan Commit-by: wangzhaonan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改SFA资料: 增加rope不为空说明,去掉旧的图模式不支持的旧说明 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!553810 天前
README.md

SparseFlashAttention

产品支持情况

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

功能说明

  • API功能:sparse_flash_attention(SFA)是针对大序列长度推理场景的高效注意力计算模块,该模块通过“只计算关键部分”大幅减少计算量,然而会引入大量的离散访存,造成数据搬运时间增加,进而影响整体性能。

  • 计算公式:

    softmax(Q@K~Tdk)@V~\text{softmax}(\frac{Q@\tilde{K}^T}{\sqrt{d_k}})@\tilde{V}

    其中K~,V~\tilde{K},\tilde{V}为基于某种选择算法(如lightning_indexer)得到的重要性较高的Key和Value,一般具有稀疏或分块稀疏的特征,dkd_kQ,K~Q,\tilde{K}每一个头的维度。 本次公布的sparse_flash_attention是面向Sparse Attention的全新算子,针对离散访存进行了指令缩减及搬运聚合的细致优化。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
query 输入 attention结构的Query输入,不支持空tensor和非连续。layout_query为BSND时,shape为(B,S1,N1,D);layout_query为TND时,shape为(T1,N1,D)。 FLOAT16、BFLOAT16 ND
key 输入 attention结构的Key输入,不支持空tensor和非连续。layout_kv为PA_BSND时,shape为(block_num, block_size, KV_N, D),其中block_num为PageAttention时block总数;layout_kv为BSND时,shape为(B, S2, KV_N, D);layout_kv为TND时,shape为(T2, KV_N, D)。 FLOAT16、BFLOAT16 ND
value 输入 attention结构的Value输入,不支持空tensor和非连续,shape与key的shape一致。 FLOAT16、BFLOAT16 ND
sparseIndices 输入 离散取kvCache的索引,不支持空tensor和非连续。sparse_size为一次离散选取的block数,需要保证每行有效值均在前半部分、无效值均在后半部分,且sparse_size大于0。layout_query为BSND时,shape为(B, Q_S, KV_N, sparse_size);layout_query为TND时,shape为(Q_T, KV_N, sparse_size)。 INT32 ND
blockTable 输入 表示PageAttention中kvCache存储使用的block映射表,不支持空tensor和非连续。第二维长度不小于所有batch中最大的S2对应的block数量,即S2_max / block_size向上取整;shape支持(B,S2/block_size)。 INT32 ND
actualSeqLengthsQuery 输入 表示不同Batch中query的有效token数,不支持空tensor和非连续。可传入None表示与query的S长度相同;支持长度为B的一维tensor,且每个Batch的有效token数不超过query中的维度S大小且不小于0。layout_query为TND时该入参必须传入,且以元素数量作为B值;每个元素表示当前batch与之前所有batch的token数总和。 INT32 ND
actualSeqLengthsKv 输入 表示不同Batch中key和value的有效token数,不支持空tensor和非连续。可传入None表示与key的S长度相同;支持长度为B的一维tensor,且每个Batch的有效token数不超过key/value中的维度S大小且不小于0。layout_kv为TND或PA_BSND时该入参必须传入;其中layout_kv为TND时,每个元素表示当前batch与之前所有batch的token数总和,即前缀和,因此后一个元素的值必须大于等于前一个元素的值。 INT32 ND
queryRope 输入 表示MLA结构中的query的rope信息,不支持空tensor和非连续。layout_query为TND时,shape为(B,S1,N1,Dr);layout_query为BSND时,shape为(T1,N1,Dr)。 FLOAT16、BFLOAT16 ND
keyRope 输入 表示MLA结构中的key的rope信息,不支持空tensor和非连续。layout_kv为TND时,shape为(B,S1,N1,Dr);layout_kv为BSND时,shape为(T1,N1,Dr);layout_kv为PA_BSND时,shape为(block_num,block_size,N2,Dr)。 FLOAT16、BFLOAT16 ND
scaleValue 可选属性 代表缩放系数。 FLOAT16 -
sparseBlockSize 可选属性 代表sparse阶段的block大小。sparse_block_size为1时,为Token-wise稀疏化场景;sparse_block_size大于1且小于等于128时,为Block-wise稀疏化场景,块内token共享相同的稀疏化决策。 INT64 -
layoutQuery 可选属性 标识输入query的数据排布格式,默认值为"BSND",支持传入BSND和TND。 STRING -
layoutKv 可选属性 标识输入key的数据排布格式,默认值为"BSND",支持传入TND、BSND和PA_BSND,其中PA_BSND在使能PageAttention时使用。 STRING -
sparseMode 可选属性 表示sparse的模式。sparse_mode为0时代表全部计算;sparse_mode为3时代表rightDownCausal模式的mask,对应以右下顶点往左上为划分线的下三角场景。 INT64 -
preTokens 可选属性 用于稀疏计算,表示attention需要和前几个Token计算关联,仅支持默认值2^63-1。 INT64 -
nextTokens 可选属性 用于稀疏计算,表示attention需要和后几个Token计算关联,仅支持默认值2^63-1。 INT64 -
attentionMode 可选属性 表示attention的模式,仅支持传入2,表示MLA-absorb模式。 INT64 -
returnSoftmaxLse 可选属性 用于表示是否返回softmax_max和softmax_sum。True表示返回,False表示不返回,默认值为False。该参数仅在训练且layout_kv不为PA_BSND场景支持。 BOOL -
attentionOut 输出 公式中的输出,不支持空tensor和非连续。layout_query为BSND时,shape为(B,S1,N1,D);layout_query为TND时,shape为(T1,N1,D)。 FLOAT16、BFLOAT16 ND
softmaxMaxOut 输出 Attention算法对query乘key的结果取max得到softmax_max,不支持空tensor和非连续。layout_query为BSND时,shape为(B,N2,S1,N1/N2);layout_query为TND时,shape为(N2,T1,N1/N2)。 FLOAT ND
softmaxSumOut 输出 Attention算法query乘key的结果减去softmax_max后取exp并求sum,得到softmax_sum,不支持空tensor和非连续。layout_query为BSND时,shape为(B,N2,S1,N1/N2);layout_query为TND时,shape为(N2,T1,N1/N2)。 FLOAT ND

约束说明

  • 该接口支持推理场景下使用。
  • 该接口支持图模式。
  • N1支持1/2/4/8/16/32/64/128。
  • block_size为一个block的token数,block_size取值为16的倍数,且最大支持1024。
  • 参数query中的D和key、value的D值相等为512,参数query_rope中的Dr和key_rope的Dr值相等为64。
  • 参数query、key、value的数据类型必须保持一致。
  • 当前只支持query_rope和key_rope传入,不支持rope为空。
  • 支持sparse_block_size整除block_size。
    • Ascend 950PR/Ascend 950DT:
      • 只支持sparse_block_size为1。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:
      • 支持[1,128],且要求是2的幂次方,在PageAttention场景下要求sparse_block_size整除block_size

调用示例

调用方式 样例代码 说明
aclnn接口 test_aclnn_sparse_flash_attention 通过 aclnnSparseFlashAttention 接口方式调用算子