文件最后提交记录最后更新时间
修改整仓产品名问题 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !4646 merge master into master 修改整仓产品名问题 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: 修改整仓产品名问题及格式问题 See merge request: cann/ops-transformer!46461 个月前
【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 个月前
common目录整改 Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !4870 merge feature/common_dir_fix_v2 into master common目录整改 Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 本次修改对 common/ 目录进行整理,分为两个阶段: - **Phase 1**: 将 common/include/kernel/ 重命名为 common/include/op_kernel/ - **Phase 2**: 将 common/include/tiling_base/common/src/tiling_base/ 合并到 common/include/op_host/common/src/op_host/ 相应的 CMake 配置和所有 #include 路径引用已同步更新。 影响范围: - 351 个文件修改(include 路径更新) - 8 个文件重命名(tiling_base → op_host) - 2 个 CMakeLists.txt 修改 + 多个 tests 目录 CMakeLists.txt 更新 ## 关联的Issue Closes #2246 ## 测试 - 编译验证通过:bash build.sh --pkg --soc=ascend910b --ops=all_gather_matmul_v2 -j16 - 编译产物成功生成 .run 包 ## 文档更新 无 ## 类型标签 - [x] ♻️ 重构 - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!487022 天前
attn_infra 重复安装头文件修改 Co-authored-by: chenglongyu<chenglongyu@huawei.com> # message auto-generated for no-merge-commit merge: !5682 merge refactor_attn_infra_prefix_front into master attn_infra 重复安装头文件修改 Created-by: chenglongyu Commit-by: chenglongyu Merged-by: cann-robot Description: ## 描述 block_sparse_attention、block_sparse_attention_grad、rain_fusion_attention、fused_infer_attention_score算子的op_kernel目录下各自维护的attn_infra目录存在头文件命名重复的问题。各头文件加上算子名前缀做区分。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2680 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56823 天前
【Feature】Introduce bsa on 950 Co-authored-by: chenyizhou<chenyizhou6@huawei.com> # message auto-generated for no-merge-commit merge: !3323 merge bsa_950_poc into master 【Feature】Introduce bsa on 950 Created-by: chenyizhou Commit-by: chenyizhou Merged-by: cann-robot Description: ## 描述 新增aclnnBlockSparseAttention的Ascend950DT/Ascend950PR实现 - 新增了aclnnBlockSparseAttention依赖的attn_infra组件与kernel文件 - 完善了tiling文件以同时支持A2/A3/Ascend950DT/Ascend950PR系列产品 - 修改了文档中的芯片支持描述、入参配置在不同代际硬件下的支持情况 ## 关联的Issue 关联Issue [#1628](https://gitcode.com/cann/ops-transformer/issues/1628) ## 测试 在当前的入参允许范围内进行了2000条用例的泛化测试,精度正常 ## 文档更新 更新了aclnnBlockSparseAttention算子说明文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!33231 个月前
support block sparse attention operator Co-authored-by: clee11<chenlong238@huawei.com> Co-authored-by: h00808442<hanxiaobin3@huawei.com> # message auto-generated for no-merge-commit merge: !2235 merge master into master support block sparse attention operator Created-by: clee11 Commit-by: clee11;h00808442 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Transformer增加稀疏Attention算子 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#1045](https://gitcode.com/cann/ops-transformer/issues/1045) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!22352 个月前
整仓大模型低错问题修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !3576 merge master into master 整仓大模型低错问题修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: 整仓大模型地错问题修改 See merge request: cann/ops-transformer!35761 个月前
README.md

BlockSparseAttention算子

概述

BlockSparseAttention是一个基于CATLASS模板库实现的高性能稀疏注意力算子,支持灵活的块级稀疏模式。

功能特性

  • 灵活的稀疏块模式: 支持自定义的x*y块级稀疏模式,通过blockShape参数指定
  • 多种KV Cache布局: 支持TND [T, N, D]和BNSD [B, N, S, D]的的KV cache布局
  • 多种Q输入布局: 支持TND [T, N, D]和BNSD [B, N, S, D]两种Query输入布局
  • 高性能计算: 基于CATLASS模板库,充分利用昇腾A2硬件特性
  • 多精度支持: 支持FP16和BF16两种精度
  • 非对齐序列: 支持序列长度不能被块大小整除的场景,自动处理边界情况

接口定义

aclnnBlockSparseAttentionGetWorkspaceSize

aclnnStatus aclnnBlockSparseAttentionGetWorkspaceSize(
    const aclTensor *query,                         // Query输入
    const aclTensor *key,                           // Key输入
    const aclTensor *value,                         // Value输入
    const aclTensor   *blockSparseMaskOptional,     // 稀疏Mask
    const aclTensor   *attenMaskOptional,           // Attention mask (当前不支持)
    const aclIntArray *blockShapeOptional,          // 稀疏块形状数组
    const aclIntArray *actualSeqLengthsOptional,    // 实际Q序列长度 (TND格式时必选)
    const aclIntArray *actualSeqLengthsKvOptional,  // 实际KV序列长度 (TND格式时必选)
    const aclTensor   *blockTableOptional,          // Block表 (用于PagedAttention,当前不支持)
    char *qInputLayout,                             // Query的数据排布格式 (TND/BNSD)
    char *kvInputLayout,                            // Key/Value的数据排布格式 (TND/BNSD)
    int64_t numKeyValueHeads,                       // KV头数
    int64_t maskType,                               // Mask类型
    double scaleValue,                              // 缩放因子
    int64_t innerPrecise,                           // Softmax计算采取的精度级别
    int64_t blockSize,                              // Block大小 (用于PagedAttention,当前不支持)
    int64_t preTokens,                              // 滑窗参数 (当前不支持)
    int64_t nextTokens,                             // 滑窗参数 (当前不支持)
    int64_t softmaxLseFlag,                         // 是否输出LSE
    aclTensor *attentionOut,                        // 输出tensor
    aclTensor *softmaxLseOptional,                  // Softmax LSE输出 (可选)
    uint64_t *workspaceSize,                        // 返回workspace大小
    aclOpExecutor **executor);                      // 返回executor

aclnnBlockSparseAttention

aclnnStatus aclnnBlockSparseAttention(
    void *workspace,                           // workspace地址
    uint64_t workspaceSize,                    // workspace大小
    aclOpExecutor *executor,                   // executor
    aclrtStream stream);                       // ACL stream

参数说明

输入参数

  • query: Query tensor,支持以下布局

    • TND: [total_tokens, num_heads, head_dim]
    • BNSD: [batch, num_heads, seqlen, head_dim]
  • key: Key tensor,支持以下布局

    • TND: [total_kv_tokens, num_kv_heads, head_dim]
    • BNSD: [batch, num_kv_heads, kv_seqlen, head_dim]
  • value: Value tensor,支持以下布局

    • TND: [total_kv_tokens, num_kv_heads, head_dim]
    • BNSD: [batch, num_kv_heads, kv_seqlen, head_dim]
  • blockSparseMaskOptional:

    • 稀疏Mask: [batch, headNum, ceilDiv(maxQSeqLength, blockShapeX), ceilDiv(maxKvSeqLength, blockShapeY)]
  • blockShapeOptional:

    • blockShapeX: Q方向块大小
    • blockShapeY: KV方向块大小

输出参数

  • attentionOut: 注意力输出,shape与query相同
  • softmaxLse: Softmax log-sum-exp输出 (可选)

使用示例

// 1. 准备输入数据
int64_t batch = 1;
int64_t qSeqlen = 256;
int64_t kvSeqlen = 512;
int64_t numHeads = 8;
int64_t numKvHeads = 8;
int64_t headDim = 128;
int64_t blockShapeX = 128;
int64_t blockShapeY = 128;

// 2. 创建tensor (略)

// 3. 设置blockShape
int64_t blockShapeData[2] = {blockShapeX, blockShapeY};
aclIntArray *blockShape = aclCreateIntArray(blockShapeData, 2);

// 4. 调用算子
uint64_t workspaceSize = 0;
aclOpExecutor *executor = nullptr;

aclnnStatus ret = aclnnBlockSparseAttentionGetWorkspaceSize(
    query, key, value, blockSparseMask, nullptr, blockShape, nullptr,
    nullptr, nullptr, "BNSD", "BNSD", numKvHeads, 0, scaleValue, 0, 128,
    2147483647, 2147483647, 0, attentionOut, nullptr, &workspaceSize, &executor);

if (ret == ACLNN_SUCCESS) {
    void *workspace = nullptr;
    aclrtMalloc(&workspace, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);
    
    ret = aclnnBlockSparseAttention(workspace, workspaceSize, executor, stream);
    
    aclrtFree(workspace);
}

稀疏模式说明

BlockSparseMask稀疏pattern

BlockSparseAttention使用blockSparseMask稀疏pattern,不需要selectIdx索引格式和传统的sBlockIdx计算:

  • blockSparseMask: 形状为[batch, numHeads, qBlockNum, kvBlockNum]的稀疏Mask
  • blockShapeX: Q方向基本块大小
  • blockShapeY: KV方向基本块大小

示例

对于qSeqlen=512, kvSeqlen=1024, blockShapeX=128, blockShapeY=128:

Q方向: ceil(512/128)=4块 [0, 1, 2, 3]
KV方向: ceil(1024/128)=8块 [0, 1, 2, 3, 4, 5, 6, 7]

每个Q块可以选择任意KV块组合:
- Q块0选择的KV块: [0, 2, 5]
- Q块1选择的KV块: [1, 3, 6]
- Q块2选择的KV块: [0, 4, 7]
- Q块3选择的KV块: [2, 5, 6]

性能特点

  • 内存效率: 相比密集注意力,显著减少内存使用
  • 计算效率: 只计算指定的稀疏块,减少计算量
  • 灵活配置: 支持任意blockShape的稀疏块配置
  • 硬件优化: 充分利用昇腾A2的AI Core和Vector Core

注意事项

  1. qInputLayout当前仅支持"TND"和"BNSD"。
  2. kvInputLayout当前仅支持"TND"和"BNSD"。
  3. blockShapeOptional如果传入,则必须包含至少两个元素[blockShapeX, blockShapeY],且值必须大于0,blockShapeY必须为128的倍数。
  4. qSeqlen和kvSeqlen不需要被blockShape整除,支持非对齐场景,实际分块数通过向上取整计算。
  5. blockSparseMaskOptional当前必须传入,且shape必须为[batch, headNum, ceilDiv(maxQS, blockShapeX), ceilDiv(maxKVS, blockShapeY)]。
  6. attentionMaskOptional当前只支持传入nullptr。
  7. maskType当前只支持输入0,表示不加mask。
  8. actualSeqLengthsOptional在qInputLayout为“TND”时必选;actualSeqLengthsKvOptional在kvInputLayout为“TND”时必选。
  9. 当前不支持PagedAttention,blockTableOptional当前只支持传入nullptr。
  10. query输入为BFLOAT16时,innerPrecise只能配置为0。

编译说明

算子编译集成在ops-transformer的统一编译流程中:

bash build.sh

版本历史

  • v1.0.0: 初始版本