昇腾社区首页
中文
注册

aclnnApplyAdamWV2

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品 [object Object] ×
[object Object]Atlas 训练系列产品[object Object] ×

功能说明

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

  • 计算公式:

    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} 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}

函数原型

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

  • aclnnStatus aclnnApplyAdamWV2GetWorkspaceSize(aclTensor *varRef, aclTensor *mRef, aclTensor *vRef, aclTensor *maxGradNormOptionalRef, const aclTensor *grad, const aclTensor *step, float lr, float beta1, float beta2, float weightDecay, float eps, bool amsgrad, bool maximize, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnApplyAdamWV2(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnApplyAdamWV2GetWorkspaceSize

  • 参数说明:

    • varRef(aclTensor*, 计算输入/计算输出):待计算的权重输入同时也是输出,公式中的theta,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32。支持undefinedundefined支持ND。
    • mRef(aclTensor*, 计算输入/计算输出):adamw优化器中m参数,公式中的m,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致。支持undefinedundefined支持ND。
    • vRef(aclTensor*, 计算输入/计算输出):adamw优化器中v参数,公式中的v,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape、dtype要求与“varRef”参数一致,支持undefinedundefined支持ND。
    • maxGradNormOptionalRef(aclTensor*, 计算输入/计算输出):保存v参数的最大值,公式中的v,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求与“varRef”参数一致,此参数在amsgrad参数为true时必选,在amsgrad参数为false时可选。支持undefinedundefined支持ND。
    • grad(aclTensor*, 计算输入):梯度数据,公式中的gt,Device侧的aclTensor,数据类型支持FLOAT16、BFLOAT16、FLOAT32,shape要求与“varRef”参数一致。支持undefinedundefined支持ND。
    • step(aclTensor*, 计算输入):迭代次数,公式中的t,Device侧的aclTensor,数据类型支持INT64、FLOAT32,元素个数为1,支持undefinedundefined支持ND。
    • lr(float*, 计算输入):学习率,公式中的eta,数据类型支持FLOAT。
    • beta1(float*, 计算输入):beta1参数,数据类型支持FLOAT。
    • beta2(float*, 计算输入):beta2参数,数据类型支持FLOAT。
    • weightDecay(float*, 计算输入):权重衰减系数,数据类型支持FLOAT。
    • eps(float*, 计算输入):防止除数为0,数据类型支持FLOAT。
    • amsgrad(bool, 计算输入):是否使用算法的AMSGrad变量,数据类型为BOOL。
    • maximize(bool, 计算输入):是否最大化参数,数据类型为BOOL。
    • workspaceSize(uint64_t*, 出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**, 出参):内存地址。
  • 返回值:

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

    [object Object]

aclnnApplyAdamWV2

  • 参数说明:

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

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

约束说明

  • 输入张量中varRef、mRef、vRef的数据类型一致时,数据类型支持FLOAT16、BFLOAT16、FLOAT32。

调用示例

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

[object Object]