已关闭
[Requirement|需求建议]: HingeLoss算子AscendC实现贡献 #4289
石向阳创建于 7月23日关闭于 7月28日
7月23日 修改标题为 “[Requirement|需求建议]: HingeLoss算子AscendC实现贡献”,原标题为“[Requirement|需求建议]: HingeLoss反向传播算子AscendC实现贡献”
7月23日 修改标题为 “[Requirement|需求建议]: HingeLoss算子AscendC实现贡献”,原标题为“[Requirement|需求建议]: HingeLoss反向传播算子AscendC实现贡献”
7月24日 将 yolic 设为负责人
yuning_chen
7月24日 评论:
7月24日 评论:
收到需求建议,欢迎您参加 ops-nn sig 例会评审并申报相关议题,最近的例会议题申报及会议时间可见:https://etherpad-cann.meeting.osinfra.cn/p/sig-ops-nn


7月24日 关联了pull request:feat: add experimental HingeLoss operator
7月28日 关闭了 issue
7月28日 添加了label:resolved
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
Backgroud(背景信息)
使用 AscendC 对
HingeLoss算子进行实现,该算子是 Hinge Loss 分类损失的正向算子。在神经网络训练中,Hinge Loss 常用于 SVM 等二分类任务;其前向公式为out = max(0, 1 - target * predict),其中predict为模型预测值,target通常取值为 1 或 -1。当前
ops-nn已有experimental/loss/hinge_loss_grad,用于计算上述损失对预测值的反向梯度;但缺少对应的HingeLoss正向算子。实现适配 Atlas A2 系列硬件(Ascend910B),满足 Ascend 平台训练场景中 Hinge Loss 前向计算与既有反向传播配套的底层算子需求。Origin(信息来源)
哈工大算子团队
Benefit / Necessity (价值/作用)
HingeLoss 是支持向量机和间隔分类训练的基础损失函数。补齐正向算子后,可与已有
HingeLossGrad形成完整训练闭环,避免框架将乘法、减法、ReLU/Max 等基础算子拆分组合,从而减少算子启动次数、中间 Tensor 和调度开销,并提升训练图的可维护性。Design(设计方案)
接口与语义
predict、target;两者 shape 相同,target 通常为 1 或 -1。loss,第一版输出与输入同 shape,即逐元素 loss;该设计与现有HingeLossGrad的逐元素gradOutput输入保持一致。loss = max(0, 1 - target * predict)。HingeLossGrad保持一致。host 侧设计
aclnnHingeLossGetWorkspaceSize/aclnnHingeLoss两段式 ACLNN 接口;无跨核归约时不需要额外 workspace。kernel 侧设计
算子分为
Init和Process两个阶段。Init阶段:Process阶段:对每个 tile 执行以下步骤:CopyIn:将 predict、target 从 Global Memory 搬入 UB;Compute:执行 Mul 得到target * predict,执行 Sub 得到1 - target * predict,随后通过 Max 将负值截断为 0;CopyOut:将逐元素 loss 从 UB 写回 Global Memory。