开发者
下载
[object Object][object Object][object Object]undefined
[object Object]
  • 算子功能:实现fusedSgd算子。将传统 SGD 更新过程中原本分散的多个细粒度操作(如梯度缩放、权重衰减、动量更新、参数赋值等)融合为单个NPU Kernel执行。
  • 计算公式:g~t={gt/ssNonegtotherwiseg^t={g~tmaximizeg~totherwisegˉt=g^t+weightDecayθtvt+1={gˉtfirst stepμvt+(1dampening)gˉtotherwisegtfinal={gˉt+μvt+1nesterovvt+1vtNonegˉtotherwiseθt+1=θtlrgtfinalgt+1=g~t\begin{aligned} &\tilde{g}_t = \begin{cases} g_t / s & s \neq \text{None} \\ g_t & \text{otherwise} \end{cases} \\ &\hat{g}_t = \begin{cases} -\tilde{g}_t & \text{maximize} \\ \tilde{g}_t & \text{otherwise} \end{cases} \\ &\bar{g}_t = \hat{g}_t + weightDecay \cdot \theta_t \\ &v_{t+1} = \begin{cases} \bar{g}_t & \text{first step} \\ \mu v_t + (1-dampening)\bar{g}_t & \text{otherwise} \end{cases} \\ &g_t^{\text{final}} = \begin{cases} \bar{g}_t + \mu v_{t+1} & \text{nesterov} \\ v_{t+1} & v_t \neq \text{None} \\ \bar{g}_t & \text{otherwise} \end{cases} \\ &\theta_{t+1} = \theta_t - lr \cdot g_t^{\text{final}} \\ &g_{t+1} = \tilde{g}_t \end{aligned}
[object Object]

算子执行接口为,必须先调用“aclnnFusedSgdGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnFusedSgd”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明​:
[object Object]
  • 返回值​: 返回aclnnStatus状态码,具体参见
[object Object]
  1. paramsRef、gradsRef、momentumBufferListOptionalRef、grad_scale的数据类型在支持的范围之内。
  2. paramsRef、gradsRef与momentumBufferListOptionalRef及其中各个tensor具有相同的数据类型。
  3. paramsRef、gradsRef与momentumBufferListOptionalRef中tensor的shape维度小于等于8。
  4. paramsRef、gradsRef与momentumBufferListOptionalRef(momentumBufferListOptionalRef不为空时)中相同索引tensor的shape相同。
  5. paramsRef、gradsRef与momentumBufferListOptionalRef(momentumBufferListOptionalRef不为空时)中不能有空指针。
  6. lr、momentum、weightDecay、dampening的值大于等于0。
  7. gradScale不等于0。
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]