CANN评测平台ApplyAdamW算子API描述
ApplyAdamW 算子 API 描述【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench1. 算子简介AdamW 优化器实现解耦权重衰减。主要应用场景深度学习模型参数优化尤其是 Transformer 类模型的训练解耦权重衰减正则化避免 L2 正则化与自适应学习率的耦合问题大规模预训练模型如 GPT、BERT的优化器实现算子特征难度等级L2FusedComposite四输入var、grad、m、v单输出y逐元素运算输出 shape 与输入一致支持 1-8 维张量2. 算子定义数学公式$$ m_t \beta_1 \cdot m_{t-1} (1 - \beta_1) \cdot grad $$$$ v_t \beta_2 \cdot v_{t-1} (1 - \beta_2) \cdot grad^2 $$$$ \hat{m} \frac{m_t}{1 - \beta_1^t} $$$$ \hat{v} \frac{v_t}{1 - \beta_2^t} $$$$ var_t var_{t-1} - lr \cdot \left( \frac{\hat{m}}{\sqrt{\hat{v}} \epsilon} weight_decay \cdot var_{t-1} \right) $$其中$m_t$ 为一阶矩估计动量$v_t$ 为二阶矩估计$\hat{m}$、$\hat{v}$ 为偏差修正后的矩估计权重衰减weight_decay以解耦方式直接作用于参数3. 接口规范算子原型cann_bench.apply_adam_w(Tensor var, Tensor grad, Tensor m, Tensor v, float lr, float beta1, float beta2, float weight_decay, float epsilon1e-8, bool maximizefalse) - Tensor y输入参数说明参数类型默认值描述varTensor必选变量张量需要优化的参数gradTensor必选梯度张量mTensor必选一阶矩张量动量vTensor必选二阶矩张量lrfloat必选学习率beta1float必选一阶矩估计的指数衰减率 (默认 0.9)beta2float必选二阶矩估计的指数衰减率 (默认 0.999)weight_decayfloat必选权重衰减系数解耦epsilonfloat1e-8数值稳定常数maximizeboolfalse是否最大化目标函数默认最小化输出参数Shapedtype描述y与输入 var 相同与输入 var 相同更新后的变量数据类型输入 dtype输出 dtypefloat32float32float16float16bfloat16bfloat16规则与约束var、grad、m、v 四个张量的 shape 和 dtype 必须完全一致支持 1-8 维张量输出 shape 与输入 var 的 shape 完全一致输出 dtype 与输入一致beta1、beta2取值范围通常为 [0, 1)epsilon用于防止除零通常取极小正数当maximizetrue时更新方向取反用于最大化目标函数4. 精度要求采用生态算子精度标准进行验证。误差指标平均相对误差MERE采样点中相对误差平均值$$ \text{MERE} \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$最大相对误差MARE采样点中相对误差最大值$$ \text{MARE} \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$通过标准数据类型FLOAT16BFLOAT16FLOAT32HiFLOAT32FLOAT8 E4M3FLOAT8 E5M2通过阈值(Threshold)2^-102^-72^-132^-112^-32^-2当平均相对误差 MERE Threshold最大相对误差 MARE 10 * Threshold 时判定为通过。5. 标准 Golden 代码import torch ApplyAdamW 算子 Torch Golden 参考实现 AdamW 优化器实现解耦权重衰减 公式: m_t beta1 * m_{t-1} (1 - beta1) * grad v_t beta2 * v_{t-1} (1 - beta2) * grad^2 m_hat m_t / (1 - beta1^t) v_hat v_t / (1 - beta2^t) var_t var_{t-1} - lr * (m_hat / (sqrt(v_hat) eps) weight_decay * var_{t-1}) def apply_adam_w( var: torch.Tensor, grad: torch.Tensor, m: torch.Tensor, v: torch.Tensor, lr: float, beta1: float, beta2: float, weight_decay: float, epsilon: float 1e-8, maximize: bool False ) - torch.Tensor: AdamW 优化器实现解耦权重衰减 Args: var: 变量张量需要优化的参数 grad: 梯度张量 m: 一阶矩张量动量 v: 二阶矩张量 lr: 学习率 beta1: 一阶矩估计的指数衰减率 beta2: 二阶矩估计的指数衰减率 weight_decay: 权重衰减系数解耦 epsilon: 数值稳定常数 maximize: 是否最大化目标函数 Returns: 更新后的变量 # 更新一阶矩动量 m.mul_(beta1).add_(grad, alpha1 - beta1) # 更新二阶矩 v.mul_(beta2).addcmul_(grad, grad, value1 - beta2) # 计算偏差修正的一阶矩和二阶矩 # 注意实际使用时需要传入 timestep t这里简化处理 bias_correction1 1 - beta1 bias_correction2 1 - beta2 m_hat m / bias_correction1 v_hat v / bias_correction2 # 计算更新量 update m_hat / (v_hat.sqrt() epsilon) # 解耦的权重衰减 if weight_decay ! 0: update.add_(var, alphaweight_decay) # 应用更新 if maximize: y var lr * update else: y var - lr * update return y6. 额外信息算子调用示例import torch import cann_bench var torch.randn(1024, 1024, dtypetorch.float32, devicenpu) grad torch.randn(1024, 1024, dtypetorch.float32, devicenpu) m torch.zeros(1024, 1024, dtypetorch.float32, devicenpu) v torch.zeros(1024, 1024, dtypetorch.float32, devicenpu) y cann_bench.apply_adam_w(var, grad, m, v, lr0.001, beta10.9, beta20.999, weight_decay0.01) y cann_bench.apply_adam_w(var, grad, m, v, lr0.001, beta10.9, beta20.999, weight_decay0.0, epsilon1e-8, maximizeTrue)【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考