news 2026/5/10 1:19:49

CANN稀疏压缩FlashAttention算子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN稀疏压缩FlashAttention算子

SparseCompressedFlashAttention

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

产品支持情况

产品是否支持
Atlas A2 推理系列产品
Atlas A3 推理系列产品
Ascend 950PR/Ascend 950DT 推理系列产品

功能说明

  • API功能:SparseCompressedFlashAttention算子旨在完成以下公式描述的Attention计算,支持Sparse Compressed Attention。

  • 计算公式:

    $$ O = \text{softmax}(Q@\tilde{K}^T \cdot \text{softmax_scale})@\tilde{V} $$

    其中$\tilde{K}=\tilde{V}$为基于ori_kv、cmp_kv以及cmp_kv等入参控制的实际参与计算的 $KV$。

函数原型

torch.ops.pypto.sparse_compress_flash_attention( query, q_act_seqs, ori_kv, cmp_kv, ori_block_table, cmp_block_table, atten_sink, seqused_kv, cmp_sparse_indices, softmax_scale, win_size, cmp_ratio ) -> (Tensor)

参数说明

  • queryTensor):必选参数,对应公式中的$Q$,不支持非连续,数据格式支持ND,数据类型支持bfloat16。shape为[T1*N1,D],其中,N1仅支持64。
  • q_act_seqsTensor):必选参数,在layout_query为TND时生效。表示不同Batch中q的有效token数,维度为B+1,大小为参数中每个元素的值表示当前batch与之前所有batch的token数总和,即前缀和,因此后一个元素的值必须>=前一个元素的值,数据类型支持int32
  • ori_kvTensor):必选参数,对应公式中的$\tilde{K}和\tilde{V}$的一部分,为原始不经压缩的KV,不支持非连续,数据格式支持ND,数据类型支持bfloat16layout_kv为PA_ND时shape为[block_num1* ori_block_size, KV_N*D],其中block_num1为PageAttention时block总数,ori_block_size为一个block的token数,ori_block_size取值为128,KV_N仅支持1。
  • cmp_kvTensor):必选参数,对应公式中的$\tilde{K}和\tilde{V}$的一部分,为经过压缩的KV,不支持非连续,数据格式支持ND,数据类型支持bfloat16layout_kv为PA_ND时shape为[block_num2* cmp_block_size, KV_N*D],其中block_num2为PageAttention时block总数,cmp_block_size为一个block的token数,cmp_block_size取值为128。
  • ori_block_tableTensor):必选参数,表示PageAttention中oriKvCache存储使用的block映射表。数据格式支持ND,数据类型支持int32,shape为2维,其中第一维长度为B,第二维长度不小于所有batch中最大的S2对应的block数量,即S2_max / block_size向上取整。
  • cmp_block_tableTensor):必选参数,表示PageAttention中cmpKvCache存储使用的block映射表。数据格式支持ND,数据类型支持int32,shape为2维,其中第一维长度为B,第二维长度不小于所有batch中最大的S3对应的block数量,即S3_max / block_size向上取整。
  • atten_sinkTensor):必选参数,注意力下沉tensor,数据格式支持ND,数据类型支持float32,shape为[N1]。
  • seqused_kvTensor):必选参数,表示不同Batch中ori_kv实际参与运算的token数,维度为B,数据格式支持ND,数据类型支持int32,不输入则所有token均参与运算。
  • cmp_sparse_indicesTensor):必选参数,代表离散取cmpKvCache的索引,不支持非连续,数据格式支持ND,数据类型支持int32。当layout_query为TND时,shape需要传入[Q_T * KV_N, K2],其中K2为对cmp_kv一次离散选取的token数,K2仅支持512。
  • softmax_scaledouble):必选参数,代表缩放系数,作为q与ori_kv和cmp_kv矩阵乘后Muls的scalar值,数据类型支持float
  • win_sizeint):必选参数,窗口大小,数据类型支持int32,仅支持128。
  • cmp_ratioint):必选参数,表示对ori_kv的压缩率,数据类型支持int,数据支持4。

返回值说明

  • attention_outTensor):公式中的输出。数据格式支持ND,数据类型支持bfloat16。shape为[T1*N1,D]。

约束说明

  • 该接口支持推理场景下使用。
  • 该接口支持aclgraph模式。
  • 参数q中的D和ori_kv、cmp_kv的D值相等为512。
  • 参数q、ori_kv、cmp_kv的数据类型必须保持一致。
  • 为了提高算子性能,当前q、ori_kv、cmp_kv、attention_out进行了高维合轴处理。
  • 仅支持TND格式。
  • block_size支持128。

调用方法

python3 ops/pypto_python/example/test_sparse_compressed_flash_attention_pypto.py

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 1:18:57

1.6.5 掌握Scala数据结构 - 集合

深入探讨了 Scala 数据结构中的集合体系,核心在于理解不可变与可变集合的本质区别。不可变集合是函数式编程的基石,强调数据的安全性与持久化,任何增删改操作均不改变原集合,而是返回包含更新内容的新集合,天然具备线程…

作者头像 李华
网站建设 2026/5/10 1:18:09

GraphRAG的断臂,被OKH-RAG攻克了,让AI读懂因果链条

如果你用过 ChatGPT 的联网搜索、或者任何基于 RAG(检索增强生成)的 AI 产品,你有没有想过一个问题: AI 在回答你之前,会从数据库里捞出一大堆相关文档。但这些文档的排列顺序,真的重要吗? 过去…

作者头像 李华
网站建设 2026/5/10 1:06:59

LLMCompiler:大语言模型并行函数调用编译器原理与实践

1. 项目概述:一个为LLM设计的“并行函数调用编译器”如果你正在构建基于大语言模型(LLM)的智能体应用,并且被工具调用(Function Calling)的串行延迟和高昂成本所困扰,那么LLMCompiler这个项目值…

作者头像 李华
网站建设 2026/5/10 1:05:11

利用符号链接与iCloud实现Cursor AI上下文跨设备自动同步

1. 项目概述:当Cursor遇上iCloud,一个被忽视的自动化痛点如果你和我一样,是深度使用Cursor这款AI编程工具的开发者,那你一定对它的“项目上下文”功能又爱又恨。爱的是,它能记住你整个项目的代码结构,让AI助…

作者头像 李华