昇腾社区首页
中文
注册
开发者
下载

aclnnApplyAdamW

产品支持情况

[object Object]undefined

功能说明

  • 算子功能: 实现adamW优化器功能。

  • 计算公式:

    gt={gt if maxmize=truegt if maxmize=falseg_t=\begin{cases}-g_t & \text{ if } maxmize= true\\ g_t & \text{ if } maxmize=false \end{cases} mt=β1mt1+(1β1)gtm_{t}=\beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t} \\ vt=β2vt1+(1β2)gt2v_{t}=\beta_{2} v_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} β1t=β1t1×β1\beta_{1}^{t}=\beta_{1}^{t-1}\times\beta_{1} β2t=β2t1×β2\beta_{2}^{t}=\beta_{2}^{t-1}\times\beta_{2} vt={max(maxGradNorm,vt) if amsgrad=truevt if amsgrad=falsev_t=\begin{cases}\max(maxGradNorm, v_t) & \text{ if } amsgrad = true\\ v_t & \text{ if } amsgrad = false \end{cases} m^t=mt1β1t\hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ v^t=vt1β2t\hat{v}_{t}=\frac{v_{t}}{1-\beta_{2}^{t}} \\ θt+1=θtηv^t+ϵm^tηλθt1\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{\hat{v}_{t}}+\epsilon} \hat{m}_{t}-\eta \cdot \lambda \cdot \theta_{t-1}

函数原型

每个算子分为,必须先调用“aclnnApplyAdamWGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnApplyAdamW”接口执行计算。

  • [object Object]
  • [object Object]

aclnnApplyAdamWGetWorkspaceSize

  • 参数说明:

    • varRef(aclTensor*, 计算输入/计算输出):待计算的权重输入同时也是输出,公式中的theta,Device侧的aclTensor,shape支持1-8维度,数据类型支持FLOAT16、BFLOAT16、FLOAT32。支持支持ND。
    • mRef(aclTensor*, 计算输入/计算输出):adamw优化器中m参数,公式中的m,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致。支持支持ND。
    • vRef(aclTensor*, 计算输入/计算输出):adamw优化器中v参数,公式中的v,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致,支持支持ND。
    • beta1Power(aclTensor*, 计算输入):beta1^(t-1)参数,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • beta2Power(aclTensor*, 计算输入):beta2^(t-1)参数,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • lr(aclTensor*, 计算输入):学习率,公式中的eta,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • weightDecay(aclTensor*, 计算输入):权重衰减系数,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • beta1(aclTensor*, 计算输入):beta1参数,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • beta2(aclTensor*, 计算输入):beta2参数,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • eps(aclTensor*, 计算输入):防止除数为0,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求为[1],dtype要求与“varRef”参数一致。支持支持ND。
    • grad(aclTensor*, 计算输入):梯度数据,公式中的g_t,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致。支持支持ND。
    • maxGradNormOptional(aclTensor*, 计算输入):保存v参数的最大值,公式中的v,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致,此参数在amsgrad参数为true时必选,在amsgrad参数为false时可选。支持支持ND。
    • amsgrad(bool, 计算输入):是否使用maxGradNormOptional变量,数据类型为BOOL。
    • maximize(bool, 计算输入):是否对梯度grad取反,应用梯度上升方向优化权重使损失函数最大化,数据类型为BOOL。
    • workspaceSize(uint64_t*, 出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**, 出参):内存地址。
  • 返回值:

    aclnnStatus: 返回状态码,具体参见

    [object Object]

aclnnApplyAdamW

  • 参数说明:

    • workspace(void *, 入参): 在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t, 入参): 在Device侧申请的workspace大小,由第一段接口aclnnApplyAdamWGetWorkspaceSize获取。
    • executor(aclOpExecutor *, 入参): op执行器,包含了算子计算流程。
    • stream(aclrtStream, 入参): 指定执行任务的Stream流。
  • 返回值:

    aclnnStatus: 返回状态码,具体参见

约束说明

  • 输入张量的数据类型应保持一致,数据类型支持FLOAT16、BFLOAT16、FLOAT32。

  • 输入张量beta1Power、beta2Power、lr、weightDecay、beta1、beta2、eps的shape大小应为1。

  • 输入布尔值maximize为true时,maxGradNormOptional参数必选且数据类型和shape应与varRef一致时。

  • 确定性计算:

    • aclnnApplyAdamW默认确定性实现。

调用示例

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

[object Object]