Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
在 Atlas 推理系列产品上进行 NLP 模型训练(如 BERT、CLIP 系列微调)时,Embedding 层的反向梯度计算缺少原生算子支持,导致相关训练任务无法在 Atlas 推理系列产品上跑通。同时现有实现无法直接支持 padding_idx 置零、scale_grad_by_freq 按词频缩放等标准 Embedding 语义,需要业务侧自行封装补齐,开发成本高。
使用 AscendC 新增 EmbeddingDenseGrad 算子,将 scatter-add 累加在 AICore 上执行,补齐 Embedding 层反向梯度计算的原生算子支持,开箱即用支持标准 Embedding 语义。
外部贡献(社区任务)
EmbeddingDenseGrad 算子的主要功能是作为 Embedding 前向算子的反向梯度算子,按 scatter-add 语义根据索引 indices 将上游梯度 grad 累加回词表梯度 y。计算公式:out[indices[i]] += grad[i]。 在 NLP 模型训练中,Embedding 层是必备组件,其反向梯度的计算效率直接影响训练吞吐。
out[indices[i]] += grad[i]
EmbeddingDenseGrad 算子通过 AscendC 实现,将 scatter-add 累加在 AICore 上执行,利用 Vector/Core 侧硬件并行计算能力。支持 padding_idx 填充索引置零、scale_grad_by_freq 按索引频次缩放梯度等标准语义,开箱即用。
算子实现 Embedding 反向计算,按 indices 索引将 grad 中对应行累加到输出 tensor 的对应行上:
out[indices[i]][j] += grad[i][j], i ∈ [0, N), j ∈ [0, D)
其中 N 为 indices 元素总数(grad 合轴后首轴大小),D 为 grad 末轴大小。
当 scale_grad_by_freq=True 时,对输出按索引出现频率缩放:
out[k] = (1/count[k]) * Σ grad[i], 对所有 indices[i]=k 的 i 求和
当 padding_idx >= 0 时,out[padding_idx] 行置零。
支持数据类型:
属性:numWeights(int64)、paddingIdx(int64, 默认 -1)、scaleGradByFreq(bool, 默认 false)
Host 侧设计:
支持硬件: Atlas 推理系列产品(Ascend 310P)
算子约束限制:
关联 PR: https://gitcode.com/cann/ops-nn/merge_requests/7760
我们会进行评审
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
在 Atlas 推理系列产品上进行 NLP 模型训练(如 BERT、CLIP 系列微调)时,Embedding 层的反向梯度计算缺少原生算子支持,导致相关训练任务无法在 Atlas 推理系列产品上跑通。同时现有实现无法直接支持 padding_idx 置零、scale_grad_by_freq 按词频缩放等标准 Embedding 语义,需要业务侧自行封装补齐,开发成本高。
使用 AscendC 新增 EmbeddingDenseGrad 算子,将 scatter-add 累加在 AICore 上执行,补齐 Embedding 层反向梯度计算的原生算子支持,开箱即用支持标准 Embedding 语义。
Origin(信息来源)
外部贡献(社区任务)
Benefit / Necessity (价值/作用)
EmbeddingDenseGrad 算子的主要功能是作为 Embedding 前向算子的反向梯度算子,按 scatter-add 语义根据索引 indices 将上游梯度 grad 累加回词表梯度 y。计算公式:
out[indices[i]] += grad[i]。在 NLP 模型训练中,Embedding 层是必备组件,其反向梯度的计算效率直接影响训练吞吐。
EmbeddingDenseGrad 算子通过 AscendC 实现,将 scatter-add 累加在 AICore 上执行,利用 Vector/Core 侧硬件并行计算能力。支持 padding_idx 填充索引置零、scale_grad_by_freq 按索引频次缩放梯度等标准语义,开箱即用。
Design(设计方案)
算子实现 Embedding 反向计算,按 indices 索引将 grad 中对应行累加到输出 tensor 的对应行上:
其中 N 为 indices 元素总数(grad 合轴后首轴大小),D 为 grad 末轴大小。
当 scale_grad_by_freq=True 时,对输出按索引出现频率缩放:
当 padding_idx >= 0 时,out[padding_idx] 行置零。
支持数据类型:
属性:numWeights(int64)、paddingIdx(int64, 默认 -1)、scaleGradByFreq(bool, 默认 false)
Host 侧设计:
支持硬件:
Atlas 推理系列产品(Ascend 310P)
算子约束限制:
关联 PR:
https://gitcode.com/cann/ops-nn/merge_requests/7760