CANN/ops-cv稀疏模式参数说明

CANN/ops-cv稀疏模式参数说明 sparseMode介绍【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv在大模型领域sparseMode稀疏模式通常指模型架构或计算公式中参数或激活的稀疏性设计与稠密模式DenseMode相对。本节将介绍常用的sparseMode和对应的场景说明。sparseMode含义备注0defaultMask模式。-1allMask模式。-2leftUpCausal模式。-3rightDownCausal模式。-4band模式。-5prefix非压缩模式。varlen场景不支持。6prefix压缩模式。-7varlen外切场景rightDownCausal模式。仅varlen场景支持。8varlen外切场景leftUpCausal模式。仅varlen场景支持。attenMask的工作原理为在Mask为True的位置遮蔽query(Q)与key(K)的转置矩阵乘积的值示意如下$QK^T$矩阵在attenMask为True的位置会被遮蔽效果如下sparseMode0sparseMode为0时代表defaultMask模式。不传mask如果attenMask未传入则不做mask操作attenMask取值为None忽略preTokens和nextTokens取值。Masked $QK^T$矩阵示意如下nextTokens取值为0preTokens大于等于Sq表示causal场景sparseattenMask应传入下三角矩阵此时preTokens和nextTokens之间的部分需要计算Masked $QK^T$矩阵示意如下attenMask应传入下三角矩阵示意如下preTokens小于SqnextTokens小于Skv且都大于等于0表示band场景此时preTokens和nextTokens之间的部分需要计算。Masked $QK^T$矩阵示意如下attenMask应传入band形状矩阵示意如下nextTokens为负数以preTokens9nextTokens-3为例preTokens和nextTokens之间的部分需要计算。Masked $QK^T$示意如下说明nextTokens为负数时preTokens取值必须大于等于nextTokens的绝对值且nextTokens的绝对值小于Skv。preTokens为负数以nextTokens7preTokens-3为例preTokens和nextTokens之间的部分需要计算。Masked $QK^T$示意如下说明preTokens为负数时nextTokens取值必须大于等于preTokens的绝对值且preTokens的绝对值小于Sq。sparseMode1sparseMode为1时代表allMask即传入完整的attenMask矩阵。该场景下忽略nextTokens、preTokens取值Masked $QK^T$矩阵示意如下sparseMode2sparseMode为2时代表leftUpCausal模式的mask对应以左上顶点划分的下三角场景参数起点为左上角。该场景下忽略preTokens、nextTokens取值Masked $QK^T$矩阵示意如下传入的attenMask为优化后的压缩下三角矩阵2048*2048压缩下三角矩阵示意下同sparseMode3sparseMode为3时代表rightDownCausal模式的mask对应以右下顶点划分的下三角场景参数起点为右下角。该场景下忽略preTokens、nextTokens取值。attenMask为优化后的压缩下三角矩阵2048*2048Masked $QK^T$矩阵示意如下sparseMode4sparseMode为4时代表band场景即计算preTokens和nextTokens之间的部分参数起点为右下角preTokens和nextTokens之间需要有交集。attenMask为优化后的压缩下三角矩阵2048*2048。Masked $QK^T$矩阵示意如下sparseMode5sparseMode为5时代表prefix非压缩场景即在rightDownCausal的基础上左侧加上一个长为Sq宽为N的矩阵N的值由可选输入prefix获取例如下图中表示batch2场景下prefix传入数组[4,5]每个batch轴的N值可以不一样参数起点为左上角。该场景下忽略preTokens、nextTokens取值attenMask矩阵数据格式须为BNSS或B1SSMasked $QK^T$矩阵示意如下attenMask应传入矩阵示意如下sparseMode6sparseMode为6时代表prefix压缩场景即prefix场景时attenMask为优化后的压缩下三角矩形的矩阵3072*2048其中上半部分[2048, 2048]的下三角矩阵下半部分为[1024, 2048]的矩形矩阵矩形矩阵左半部分全0右半部分全1attenMask应传入矩阵示意如下。该场景下忽略preTokens、nextTokens取值。sparseMode7sparseMode为7时表示varlen且为长序列外切场景即长序列在模型脚本中进行多卡切query的sequence length用户需要确保外切前为使用sparseMode 3的场景当前mode下用户需要设置preTokens和nextTokens起点为右下顶点且需要保证参数正确否则会存在精度问题。Masked $QK^T$矩阵示意如下在第二个batch对query进行切分key和value不切分4x6的mask矩阵被切分成2x6和2x6的mask分别在卡1和卡2上计算卡1的最后一块mask为band类型的mask配置preTokens6保证大于等于最后一个SkvnextTokens-2actual_seq_qlen应传入{3,5}actual_seq_kvlen应传入{3,9}。卡2的mask类型切分后不变sparseMode为3actual_seq_qlen应传入{2,7,11}actual_seq_kvlen应传入{6,11,15}。说明sparseMode7band表示的是最后一个非空tensor的Batch的sparse类型如果只有一个batch用户需按照band模式的要求来配置参数sparseMode7时用户需要输入2048x2048的下三角mask作为该融合算子的输入。基于sparseMode3进行外切产生的band模式的sparse参数应符合以下条件preTokens last_Skv。last_Sq-last_Skv nextTokens 0。当前模式下不支持可选输入pse。非band模式的batch应满足Sq Skv。sparseMode8sparseMode为8时表示varlen且为长序列外切场景用户需要确保外切前为使用sparseMode 2的场景当前mode下用户需要设置preTokens和nextTokens起点为右下顶点且需要保证参数正确否则会存在精度问题。Masked $QK^T$矩阵示意如下在第二个batch对query进行切分key和value不切分5x4的mask矩阵被切分成2x4和3x4的mask分别在卡1和卡2上计算卡1的mask类型切分后不变sparseMode为2actual_seq_qlen应传入{3,5}actual_seq_kvlen应传入{3,7}。卡2的第一块mask为band类型的mask配置preTokens4保证大于等于第一个SkvnextTokens1actual_seq_qlen应传入{3,8,12}actual_seq_kvlen应传入{4,9,13}。说明sparseMode8band表示的是第一个非空tensor的Batch的sparse类型如果只有一个batch用户需按照band模式的要求来配置参数sparseMode8时用户需要输入2048x2048的下三角mask作为该融合算子的输入。基于sparseMode2进行外切产生的band模式的sparse的参数应符合以下条件preTokens first_Skv。nextTokens first_Sq - first_Skv根据实际情况进行配置。当前模式下不支持可选输入pse。【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考