news 2026/5/9 13:26:44

CANN DeepSeek Indexer注意力优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN DeepSeek Indexer注意力优化

custom_pypto.npu_sparse_attention_pto

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

产品支持情况

产品是否支持
Atlas A3 系列产品

功能说明

  • 算子功能:用于 DeepSeek-V3.2-Exp 的 Attention 计算

简介

我们对 DeepSeek-V3.2-Exp 进行了拆解,该模型采用了一种细粒度稀疏注意力机制,将基于 token 级别的细粒度sparse attention与Lightning Indexer相结合,并将其分解为四个模块:MLA Prolog, Indexer Prolog, Lightning Indexer and Sparse Flash Attention。

MLA Prolog

MLA Prolog 模块将hidden状态 $\bold{X}$ 转换为查询投影 $\bold{q}$、键投影 $\bold{k}$ 和值投影 $\bold{v}$,其结构与 DeepSeek V3 的架构一致。在解码阶段,采用了权重吸收技术。

Indexer Prolog

Indexer Prolog 模块将hidden状态 $\bold{X}$ 投影为查询索引 $\bold{q}{index, h}$ 和键索引 $\bold{k}{index}$ 的表示。该变换遵循如下公式:旋转位置嵌入(RoPE)仅应用于 $\bold{q}{index, h}$ 和 $\bold{k}{index}$ 的头维度的后半部分。

$$ \bold{q}{index, h} = \text{RoPE}\left(\left(\text{RMSNorm}(\bold{X} \cdot \bold{W}{qa})\right) \cdot \bold{W}_{qb}\right) $$

$$ \bold{k}_{index} = \text{RoPE}\left(\text{LayerNorm}\left(\bold{X}\cdot \bold{W}_k \right)\right) $$

Lightning Indexer

Lightning Indexer 模块采用一种类MLP的多查询注意力(Multi-Query Attention)机制来计算索引得分:

$$ I_{i, j} = \sum_h w_h^i \cdot \text{ReLU}(\bold{q}{index, h}^i \cdot \bold{k}{index}^j) $$

where $(w_1^i, \dots,w_{N_h}^i)^T = \bold{W}_{bias}\bold{x}_i$ represents query-dependent head-wise weights. In practice, we calculate $w_h^i$ in Indexer Prolog module.

Sparse Flash Attention

对于每个查询 token $\bold{x}i$,索引模块会为每个键值缓存项(表示键值对或 MLA 潜在表示)计算一个相关性得分 $I{i,j}$。然后,通过将注意力机制应用于查询 token $\bold{x}_i$ 以及得分最高的前 $k$ 个缓存项,来计算输出 $\bold{o}_i$:

$$ \bold{o}_i = \text{Attn}(\bold{x}_i, {\bold{c}j | j \in \text{Top-k}(\bold{I}{i, :})}) $$

函数原型

custom_pypto.npu_sparse_attention_pto(x, w_dq, w_uq_qr, w_uk, w_dkv_kr, gamma_cq, gamma_ckv, sin, cos, cache_index, kv_cache, kr_cache, block_table, act_seqs, w_idx_qb, w_idx_k, w_idx_proj, in_gamma_k, in_beta_k,index_k_cache) -> Tensor

参数说明

说明:

  • xTensor):表示hidden状态,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • w_dqTensor):表示计算 query 的下投影权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • w_uq_qrTensor):表示计算 query 的上投影权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • w_ukTensor):表示权重吸收中计算 query 的权重,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • w_dkv_krTensor):表示权重吸收中计算 ckv 的权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • gamma_cq(Tensor): 表示 query 的 rmsnorm 缩放,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • gamma_ckvTensor):表示 ckv 的 rmsnorm 缩放,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • sinTensor):表示用于 RoPE 的 sin,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • cosTensor):表示用于 RoPE 的 cos,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • cache_indexTensor):表示更新 kvCache,krCache 和 idxKCache 的位置,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • kv_cacheTensor):kv cache,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • kr_cacheTensor):kr cache,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • block_tableTensor):表示 PagedAttention 中 KV 存储使用的 block 映射表,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • act_seqsTensor):表示不同 Batch 中keyvalue的有效 seqlen,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • w_idx_qbTensor):表示 Indexer 计算 query 的权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • w_idx_kTensor):表示 Indexer 计算 key 的权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • w_idx_projTensor):表示 Indexer 计算 weights 的权重,必选参数,不支持非连续的 Tensor,数据格式支持 NZ,数据类型支持bfloat16

  • ln_gamma_kTensor):表示 Indexer 计算 key 的 layernorm 缩放,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • ln_beta_kTensor):表示 Indexer 计算 key 的 layernorm 偏移,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

  • index_k_cacheTensor):表示 Indexer 中 key 的缓存,必选参数,不支持非连续的 Tensor,数据格式支持 ND,数据类型支持bfloat16

返回值说明

  • outTensor):公式中的输出,数据格式支持 ND,数据类型支持bfloat16

约束说明

  • 该接口支持推理场景下使用。
  • 该接口支持图模式(PyTorch 2.1版本)。
  • 该接口与PyTorch配合使用时,需要保证CANN相关包与PyTorch相关包的版本匹配。

算子代码执行示例

  • 算子源码执行参考test_deepseek_indexer_attention.py

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

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

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

CANN/pto-isa标量与枚举参数

Scalar Parameters and Enums 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations …

作者头像 李华
网站建设 2026/5/9 13:25:20

公平AI与领域知识融合:构建可解释的酒驾风险预测模型

1. 项目概述:当AI遇见“酒后不开车”的严肃命题“酒后不开车”早已是深入人心的社会共识,但每年因酒驾导致的悲剧依然时有发生。作为一名长期关注数据科学在公共安全领域应用的从业者,我一直在思考,能否利用现有的技术手段&#x…

作者头像 李华
网站建设 2026/5/9 13:24:15

CANN/ops-blas Cswap算子测试

Cswap算子实现 【免费下载链接】ops-blas 本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。 项目地址: https://gitcode.com/cann/ops-blas 概述 BLAS Cswap算子实现。 Cswap(Complex Swap)算子实现了两个复数向量的交换运算,是BLAS基础线…

作者头像 李华
网站建设 2026/5/9 13:21:30

CANNSHMEM SIMT RMA标量传输示例

样例介绍 【免费下载链接】shmem CANN SHMEM 是面向昇腾平台的多机多卡内存通信库,基于OpenSHMEM 标准协议,实现跨设备的高效内存访问与数据同步。 项目地址: https://gitcode.com/cann/shmem 本样例旨在展示 SIMD 与 SIMT 混合编译模式下&#x…

作者头像 李华
网站建设 2026/5/9 13:20:32

CANNBot技能:模型推理预取优化

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: model-infer-prefetch description: 基于 PyTorch 框架的昇腾 N…

作者头像 李华
网站建设 2026/5/9 13:15:31

组态屏工程备份 / 恢复 / 加密 / 密码忘记

在工业自动化现场,组态屏作为人机交互的核心设备,承载着设备监控、参数设置、报警记录等关键功能。而组态工程文件,则是这块屏幕的“灵魂”——一旦工程丢失或损坏,重新编写不仅耗时数日,甚至可能因工艺参数遗忘而导致…

作者头像 李华