def __init__(self,
opt,
loss_scale_manager=None,
is_distributed=False,
is_loss_scale=False,
is_tailing_optimization=False,
name=None)
NPUOptimizer类的构造函数,该优化器将NPUDistributedOptimizer和NPULossScaleOptimizer优化器合并。
主要提供如下功能:
参数名 |
输入/输出 |
描述 |
---|---|---|
opt |
输入 |
用于梯度计算和更新权重的单机版训练优化器。 |
loss_scale_manager |
输入 |
仅当is_loss_scale为True,开启Loss Scaling功能时需要配置该参数,用于决定LossScale的更新方式,包括静态更新和动态更新。
|
is_distributed |
输入 |
是否开启分布式训练,取值:
|
is_loss_scale |
输入 |
是否开启Loss Scaling,取值:
|
is_tailing_optimization |
输入 |
是否开启通信拖尾优化,用于提升训练性能,该功能仅在is_distributed为True的情况下配置生效。
必须和NPURunConfig构造函数中的配置值保持一致。 |
name |
输入 |
优化器名称。 |
返回NPUOptimizer类对象。
import tensorflow as tf from npu_bridge.npu_init import * #定义单机优化器 optimizer = LAMBOptimizer( learning_rate=learning_rate, weight_decay_rate=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-6, exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"]) #使能Loss Scaling if tf.flags.FLAGS.npu_bert_loss_scale not in [None, -1]: if tf.flags.FLAGS.npu_bert_loss_scale == 0: loss_scale_manager = ExponentialUpdateLossScaleManager(init_loss_scale=tf.flags.FLAGS.init_loss_scale_value, incr_every_n_steps=1000, decr_every_n_nan_or_inf=2, decr_ratio=0.5) elif tf.flags.FLAGS.npu_bert_loss_scale >= 1: loss_scale_manager = FixedLossScaleManager(loss_scale=tf.flags.FLAGS.npu_bert_loss_scale) else: raise ValueError("Invalid loss scale: %d" % tf.flags.FLAGS.npu_bert_loss_scale) optimizer = NPUOptimizer(optimizer, loss_scale_manager, is_distributed=tf.flags.FLAGS.distributed, is_loss_scale=True, is_tailing_optimization=True) #不使能loss_scale else: optimizer = NPUOptimizer(optimizer, is_distributed=tf.flags.FLAGS.distributed)