文件最后提交记录最后更新时间
Modify the aclnn and readme issue Co-authored-by: zhouwenfang<zhouwenfang3@h-partners.com> # message auto-generated for no-merge-commit merge: !4472 merge master into master Modify the aclnn and readme issue Created-by: zhouwenfang Commit-by: zhouwenfang Merged-by: cann-robot Description: ## 描述 Modify the aclnn and readme issue ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 已对齐 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!44721 个月前
[bugfix] 修复TND问题&修复资料问题 Co-authored-by: qiansunchi<qiansunchi@huawei.com> # message auto-generated for no-merge-commit merge: !2053 merge master into master [bugfix] 修复TND问题&修复资料问题 Created-by: qiansunchi159 Commit-by: qiansunchi Merged-by: cann-robot Description: ## 描述 修改TND场景一个workspace的分配问题,和一些文档问题 ## 关联的Issue Issue [#855](https://gitcode.com/cann/ops-transformer/issues/855) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!20533 个月前
fix multi batch tnd tiling mistake Co-authored-by: guijianwei<guijianwei@huawei.com> # message auto-generated for no-merge-commit merge: !5579 merge master into master fix multi batch tnd tiling mistake Created-by: guijianwei Commit-by: guijianwei Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> [确定性计算]修复DenseLightningIndexerGradKLLoss算子部分shape下卡死问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> Issue #2536 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!557914 天前
[feature] dsa train support qkv T > actual seq len Co-authored-by: qiansunchi<qiansunchi@huawei.com> # message auto-generated for no-merge-commit merge: !4400 merge master into master [feature] dsa train support qkv T > actual seq len Created-by: qiansunchi159 Commit-by: qiansunchi Merged-by: cann-robot Description: ## 描述 DenseTrainLightningIndexerGradKLLoss算子TND场景下支持输入的T大于实际的seq_len_list,并把无效的数据清0 ## 关联的Issue 关联Issue [#1955](https://gitcode.com/cann/ops-transformer/issues/1955) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!44001 个月前
[feature] dsa train support qkv T > actual seq len Co-authored-by: qiansunchi<qiansunchi@huawei.com> # message auto-generated for no-merge-commit merge: !4400 merge master into master [feature] dsa train support qkv T > actual seq len Created-by: qiansunchi159 Commit-by: qiansunchi Merged-by: cann-robot Description: ## 描述 DenseTrainLightningIndexerGradKLLoss算子TND场景下支持输入的T大于实际的seq_len_list,并把无效的数据清0 ## 关联的Issue 关联Issue [#1955](https://gitcode.com/cann/ops-transformer/issues/1955) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!44001 个月前
[feature] 新增denseLightningIndexerGradKLLoss算子 Co-authored-by: qiansunchi<qiansunchi@huawei.com> # message auto-generated for no-merge-commit merge: !934 merge master into master [feature] 新增denseLightningIndexerGradKLLoss算子 Created-by: qiansunchi159 Commit-by: qiansunchi Merged-by: cann-robot Description: ## 描述 [feature] 新增denseLightningIndexerGradKLLoss算子, 在DSA,dense训练阶段使用 ## 关联的Issue 关联issue [#543](https://gitcode.com/cann/ops-transformer/issues/543) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!9344 个月前
Modify the dense ligtning indexer grad kl loss readme Co-authored-by: zhouwenfang<zhouwenfang3@h-partners.com> # message auto-generated for no-merge-commit merge: !3774 merge master into master Modify the dense ligtning indexer grad kl loss readme Created-by: zhouwenfang Commit-by: zhouwenfang Merged-by: cann-robot Description: ## 描述 Modify the dense ligtning indexer grad kl loss readme ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 已对齐 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!37741 个月前
README.md

DenseLightningIndexerGradKLLoss

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT ×
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:DenseLightningIndexerGradKlLoss算子是LightningIndexer的反向算子,再额外融合了Loss计算功能。LightningIndexer算子将QueryToken和KeyToken之间的最高内在联系的TopK个筛选出来,从而减少长序列场景下Attention的计算量,加速长序列的网络的推理和训练的性能。稠密场景下的LightningIndexerGrad的输入query、key、query_index、key_index不用做稀疏化处理。

  • 计算公式:

    1. Top-k value的计算公式:

    It,:=Wt,:@ReLU(q~t,:@K~:t,:⊤)I_{t,:}=W_{t,:}@ReLU(\tilde{q}_{t,:}@\tilde{K}_{:t,:}^\top)

    • Wt,:W_{t,:}是第tt个token对应的weightsweights
    • q~t,:\tilde{q}_{t,:}q~\tilde{q}矩阵第tt个token对应的GG个query头合轴后的结果;
    • K~:t,:\tilde{K}_{:t,:}ttK~\tilde{K}矩阵。
    1. 正向的Softmax对应公式:

    pt,:=Softmax(qt,:@K:t,:⊤/d)p_{t,:} = \text{Softmax}(q_{t,:} @ K_{:t,:}^\top/\sqrt{d})

    • pt,:p_{t,:}是第tt个token对应的Softmax结果;
    • qt,:q_{t,:}qq矩阵第tt个token对应的GG个query头合轴后的结果;
    • ${K}_{:t,:}$为ttKK矩阵。
    1. npu_lightning_indexer会单独训练,对应的loss function为:

    Loss=∑tDKL(pt,:∣∣Softmax(It,:))Loss{=}\sum_tD_{KL}(p_{t,:}||Softmax(I_{t,:}))

    其中,pt,:p_{t,:}是target distribution,通过对main attention score 进行所有的head的求和,然后把求和结果沿着上下文方向进行L1正则化得到。DKLD_{KL}为KL散度,其表达式为:

    DKL(a∣∣b)=∑iailog(aibi)D_{KL}(a||b){=}\sum_ia_i\mathrm{log}{\left(\frac{a_i}{b_i}\right)}

    1. 通过求导可得Loss的梯度表达式:

    dIt,:=Softmax(It,:)−pt,:dI\mathop{{}}\nolimits_{{t,:}}=Softmax \left( I\mathop{{}}\nolimits_{{t,:}} \left) -p\mathop{{}}\nolimits_{{t,:}}\right. \right.

    利用链式法则可以进行weights,query和key矩阵的梯度计算:

    dWt,:=dIt,:@(ReLU(St,:))⊤dW\mathop{{}}\nolimits_{{t,:}}=dI\mathop{{}}\nolimits_{{t,:}}\text{@} \left( ReLU \left( S\mathop{{}}\nolimits_{{t,:}} \left) \left) \mathop{{}}\nolimits^{\top}\right. \right. \right. \right.

    dq~t,:=dSt,:@K~:t,:d\mathop{{\tilde{q}}}\nolimits_{{t,:}}=dS\mathop{{}}\nolimits_{{t,:}}@\tilde{K}\mathop{{}}\nolimits_{{:t,:}}

    dK~:t,:=(dSt,:)⊤@q~:t,:d\tilde{K}\mathop{{}}\nolimits_{{:t,:}}=\left(dS\mathop{{}}\nolimits_{{t,:}} \left) \mathop{{}}\nolimits^{\top}@\tilde{q}\mathop{{}}\nolimits_{{:t, :}}\right. \right.

    其中,SSq~\tilde{q}KK矩阵乘的结果。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
query 输入 attention结构的输入Q。 FLOAT16、BFLOAT16 ND
key 输入 attention结构的输入K。 FLOAT16、BFLOAT16 ND
queryIndex 输入 lightningIndexer结构的输入queryIndex。 FLOAT16、BFLOAT16 ND
keyIndex 输入 lightningIndexer结构的输入keyIndex。 FLOAT16、BFLOAT16 ND
weights 输入 权重。 FLOAT16、BFLOAT16 ND
softmaxMax 输入 Device侧的aclTensor,注意力正向计算的中间输出。 FLOAT32 ND
softmaxSum 输入 Device侧的aclTensor,注意力正向计算的中间输出。 FLOAT32 ND
softmaxMaxIndex 输入 Device侧的aclTensor,注意力正向计算的中间输出。 FLOAT32 ND
softmaxSumIndex 输入 Device侧的aclTensor,注意力正向计算的中间输出。 FLOAT32 ND
queryRope 输入 MLA rope部分:Query位置编码的输出。 FLOAT16、BFLOAT16 ND
keyRope 输入 MLA rope部分:Key位置编码的输出。 FLOAT16、BFLOAT16 ND
actualSeqLengthsQuery 输入 每个Batch中,Query的有效token数。 INT64 ND
actualSeqLengthsKey 输入 每个Batch中,Key的有效token数。 INT64 ND
scaleValue 输入 缩放系数。 double -
layout 输入 layout格式。 char* -
sparseMode 输入 sparse的模式。 INT64 -
preTokens 输入 用于稀疏计算,表示Attention需要和前几个token计算关联。 INT64 -
nextTokens 输入 用于稀疏计算,表示Attention需要和后几个token计算关联。 INT64 -
dQueryIndex 输出 QueryIndex的梯度。 FLOAT16、BFLOAT16 ND
dKeyIndex 输出 KeyIndex的梯度。 FLOAT16、BFLOAT16 ND
dWeights 输出 Weights的梯度。 FLOAT16、BFLOAT16 ND
loss 输出 损失函数值。 FLOAT32 ND

约束说明

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_dense_lightning_indexer_grad_kl_loss 通过aclnnDenseLightningIndexerGradKLLoss接口方式调用dense_lightning_indexer_grad_kl_loss算子。