aclnnDenseLightningIndexerGradKLLoss
产品支持情况
功能说明
算子功能:DenseLightningIndexerGradKlLoss算子是LightningIndexer的反向算子,再额外融合了Loss计算功能。LightningIndexer算子将QueryToken和KeyToken之间的最高内在联系的TopK个筛选出来,从而减少长序列场景下Attention的计算量,加速长序列的网络的推理和训练的性能。稠密场景下的LightningIndexerGrad的输入query、key、query_index、key_index不用做稀疏化处理。
计算公式:
- Top-k value的计算公式:
- 是第个token对应的;
- 是矩阵第个token对应的个query头合轴后的结果;
- 为行矩阵。
- 正向的Softmax对应公式:
- 是第个token对应的Softmax结果;
- 是矩阵第个token对应的个query头合轴后的结果;
- 为行矩阵。
- npu_lightning_indexer会单独训练,对应的loss function为:
其中,是target distribution,通过对main attention score 进行所有的head的求和,然后把求和结果沿着上下文方向进行L1正则化得到。为KL散度,其表达式为:
- 通过求导可得Loss的梯度表达式:
利用链式法则可以进行weights,query和key矩阵的梯度计算:
其中,为和矩阵乘的结果。
函数原型
算子执行接口为两段式接口,必须先调用“aclnnDenseLightningIndexerGradKLLossGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnDenseLightningIndexerGradKLLoss”接口执行计算。
[object Object]
[object Object]
aclnnDenseLightningIndexerGradKLLoss
aclnnDenseLightningIndexerGradKLLoss
约束说明
公共约束
- 确定性计算: aclnnDenseLightningIndexerGradKLLoss默认非确定性实现,支持通过alcrtCtxSetSysParamOpt开启确定性。
- 入参为空的场景处理:
- query或key或query_index或key_index或weight为空Tensor:当前不支持,会报错。
规格约束
[object Object]典型值
[object Object]
调用示例
[object Object]