BlockSparseAttentionGrad【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer产品支持情况产品是否支持Ascend 950PR/Ascend 950DT×Atlas A3 训练系列产品√Atlas A3 推理系列产品×Atlas A2 训练系列产品√Atlas A2 推理系列产品×Atlas 200I/500 A2 推理产品×Atlas 推理系列产品×Atlas 训练系列产品×功能说明​算子功能​aclnnBlockSparseAttention稀疏注意力反向计算支持灵活的块级稀疏模式通过BlockSparseMask指定每个Q块选择的KV块实现高效的稀疏注意力计算。​计算公式​稀疏块大小$blockShapeX×blockShapeY$BlockSparseMask指定稀疏模式。已知正向计算公式为$$ attentionOutSoftmax(Mask(scale⋅query⋅key_{sparse}^{T}, atten_mask))⋅value_{sparse} $$为方便表达以变量$S$和$P$表示计算公式$$ S Mask(scale⋅query⋅key_{sparse}^{T},atten_mask) $$$$ P SoftMax(S) $$$$ V value_{sparse} $$$$ Out PV $$则反向计算公式为$$ softmax_grad softmaxGrad(dOut, attentionOut) $$$$ dPdOut * V^T $$$$ dS P * (dP-softmax_grad) $$$$ dVP^T * dOut $$$$ dQ(dS*K)*scale $$$$ dK(dS^T*Q)*scale $$BlockSparseAttentionGrad输入dout、query、key、value, attentionOut的数据排布格式支持从多种维度排布解读可通过qInputLayout和kvInputLayout传入。为了方便理解后续支持的具体排布格式如 BNSD、TND 等此处先对排布格式中各缩写字母所代表的维度含义进行统一说明B表示输入样本批量大小BatchTB和S合轴紧密排列的长度Total tokensS表示输入样本序列长度Seq-LengthH表示隐藏层的大小Head-SizeN表示多头数Head-NumD表示隐藏层最小的单元尺寸需满足DH/NHead-Dim当前支持的布局qInputLayout: TND BNSDkvInputLayout: TND BNSD参数说明参数名输入/输出描述使用说明数据类型数据格式维度(shape)非连续TensordoutaclTensor*输入反向输出梯度代表最终输出对当前算子的梯度信息。不支持空Tensor。支持的shape为TND: [totalQTokens, headNum, headDim]。BNSD: [batch, headNum, maxQSeqLength, headDim]。FLOAT16、BFLOAT16ND3-4×queryaclTensor*输入注意力计算中的查询向量即公式中的query。不支持空Tensor。支持的shape为TND: [totalQTokens, headNum, headDim]。BNSD: [batch, headNum, maxQSeqLength, headDim]。FLOAT16、BFLOAT16ND3-4×keyaclTensor*输入注意力计算中的键向量即公式中的key。不支持空Tensor。支持的shape为TND: [totalKTokens, numKeyValueHeads, headDim]。BNSD: [batch, numKeyValueHeads, maxKvSeqLength, headDim]。FLOAT16、BFLOAT16ND3-4×valueaclTensor*输入注意力计算中的值向量即公式中的value。不支持空Tensor。支持的shape为TND: [totalVTokens, numKeyValueHeads, headDim]。BNSD: [batch, numKeyValueHeads, maxKvSeqLength, headDim]。FLOAT16、BFLOAT16ND3-4×attentionOutaclTensor*输入正向 BlockSparseAttention 计算的输出结果即公式中的attentionOut。不支持空Tensor。支持的shape为TND: [totalQTokens, headNum, headDim]。BNSD: [batch, headNum, maxQSeqLength, headDim]。FLOAT16、BFLOAT16ND3-4×softmaxLseaclTensor*输入Softmax计算的log-sum-exp中间结果。用于反向计算梯度的对数和指数逆推。不支持空Tensor。支持的shape为TND: [totalQTokens, headNum, 1]。BNSD: [batch, headNum, maxQSeqLength, 1]。FLOATND3-4×blockSparseMaskOptionalaclTensor*输入块状稀疏掩码表示实际的稀疏pattern。决定哪些block实际参与注意力计算。不支持空Tensor。可选输入当前版本为必选shape为[batch, headNum, ceilDiv(maxQSeqLength, blockShapeX), ceilDiv(maxKvSeqLength, blockShapeY)]。表示按block划分后哪些block需要参与计算为1哪些block不参与计算为0。如传入nullptr则视为不开启块稀疏计算即所有token之间的注意力分数都会被计算。BOOLND4×attenMaskOptionalaclTensor*输入注意力掩码即公式中的atten_mask。用于屏蔽不应参与计算的特定token。支持空Tensor。当前不支持应传入nullptr。BOOLND2×blockShapeOptionalaclIntArray*输入稀疏块形状数组。指定每个稀疏块的二维尺寸行数和列数。当配置了blockSparseMaskOptional时如配置此输入算子会从中获取稀疏块尺寸如不配置此输入算子将默认稀疏块尺寸为[128,128]。INT64-1-当未配置blockSparseMaskOptional时无论此项如何配置算子均将忽略。当配置此输入时的元素要求必须包含至少两个元素 [blockShapeX, blockShapeY]。blockShapeX: Q方向块大小值必须大于0。blockShapeY: KV方向块大小值必须大于0。actualSeqLengthsOptionalaclIntArray*输入query的实际序列长度数组。用于描述变长序列场景下即含有 Padding 填充数据的场景每个 Batch 中实际有效的 query token 数量。变长序列场景当 qInputLayout 为 TND 时该项输入必须配置。因为 TND 格式为一维连续排布算子需要依赖该数组来准确切分界定各个序列的真实边界。INT64-1-定长/变长场景当 qInputLayout 为 BNSD 时如配置该项算子会按指定的有效长度处理忽略 Padding 部分的数据提升性能如不配置传 nullptr算子将默认把 query shape 中的 S 维度作为有效长度进行全量处理。actualSeqLengthsKvOptionalaclIntArray*输入key/value的实际序列长度数组。用于描述变长序列场景下即含有 Padding 填充数据的场景每个 Batch 中实际有效的 key/value token 数量。变长序列场景当 kvInputLayout 为 TND 时该项输入必须配置。因为 TND 格式为一维连续排布算子需要依赖该数组来准确切分界定各个序列的真实边界。INT64-1-定长/变长场景当 kvInputLayout 为 BNSD 时如配置该项算子会按指定的有效长度处理忽略 Padding 部分的数据提升性能如不配置传 nullptr算子将默认把 key/value shape 中的 S 维度作为有效长度进行全量处理。qInputLayoutchar*输入query的数据排布格式。指示输入张量在内存中的具体排布如连续或合轴排列。当前仅支持TND、BNSDqInputLayout与kvInputLayout需要保持一致。----kvInputLayoutchar*输入key和value的数据排布格式。指示输入张量在内存中的具体排布。当前仅支持TND、BNSDqInputLayout与kvInputLayout需要保持一致。----numKeyValueHeadsint64_t输入key/value的注意力头数。用于支持GQA分组查询注意力机制下的头数比例映射。-----maskTypeint64_t输入注意力计算中的掩码类型。指定采用何种预设规则的掩码逻辑。当前只支持传 0代表不加mask场景。----scaleValuedouble输入缩放系数即公式中的scale。用于注意力分数的归一化处理。一般设置为D^-0.5。----preTokensint64_t输入滑窗向前包含的token数量。限制当前token只能与前方的多少个历史token计算注意力。用于滑窗attention场景当前不支持滑窗attention只支持传入2147483647。----nextTokensint64_t输入滑窗向后包含的token数量。限制当前token只能与后方的多少个未来token计算注意力。用于滑窗attention场景当前不支持滑窗attention只支持传入2147483647。----dqaclTensor*输出query的梯度输出结果即公式中的dq。不支持空Tensor。数据类型和shape与输入query保持一致。FLOAT16、BFLOAT16ND3-4√dkaclTensor*输出key的梯度输出结果即公式中的dk。不支持空Tensor。数据类型和shape与输入key保持一致。FLOAT16、BFLOAT16ND3-4√dvaclTensor*输出value的梯度输出结果即公式中的dv。不支持空Tensor。数据类型和shape与输入value保持一致。FLOAT16、BFLOAT16ND3-4√workspaceSizeuint64_t*输出返回需要在Device侧申请的workspace大小。-----executoraclOpExecutor**输出返回op执行器包含了算子计算流程。------ Atlas A2 训练产品 、 Atlas A3 训练产品 : 不支持FLOAT8_E5M2、FLOAT8_E4M3FN。约束说明该接口与PyTorch配合使用时需要保证CANN相关包与PyTorch相关包的版本匹配。actualSeqLengthsOptional在qInputLayout为“TND”时必选actualSeqLengthsKvOptional在kvInputLayout为“TND”时必选。根据算子支持的输入 Layoutquery 张量 Shape 中对应的 head 维度大小记为 N1key 和 value 张量 Shape 中对应的 head 维度大小记为 N2。必须满足 N1 N2 且 N1 % N2 0。(例如在 BNSD 布局下N1 对应 query 的第 2 维N2 对应 key/value 的第 2 维)headdim128。当前只支持 BNSD 和 MHA(N1N2)。调用说明调用方式调用样例说明aclnn调用test_aclnn_block_sparse_attention_grad非TNDTND代表Total sequence length, Num heads, Head dimension通常用于表示变长序列场景下的连续内存排布格式场景通过aclnnBlockSparseAttentionGrad接口方式调用BlockSparseAttentionGrad算子。【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考