文档
注册

NPULossScaleOptimizer构造函数

功能说明

NPULossScaleOptimizer类的构造函数,浮点计算的溢出模式为“饱和模式”的场景下,用于在混合精度训练中使能Loss Scaling。Loss Scaling解决了由于float16表示范围较小导致的下溢出问题。NPULossScaleOptimizer类继承了LossScaleOptimizer类,可以调用基类的原生接口。
  • Atlas 训练系列产品,浮点计算的溢出模式默认为“饱和模式”,且仅支持“饱和模式”。饱和模式为:计算出现溢出时,饱和为浮点数极值(+-MAX)。
  • Atlas A2 训练系列产品,浮点计算的溢出模式默认为“INF/NAN模式”,开发者可手工调用set_device_sat_mode接口修改溢出模式为“饱和模式”,但推荐保持默认的“INF/NAN模式”。

函数原型

def __init__(self, opt, loss_scale_manager, is_distributed=False)

参数说明

参数名

输入/输出

描述

opt

输入

用于梯度计算和更新权重的单机版训练优化器。

loss_scale_manager

输入

用于决定LossScale的更新方式,包括静态更新和动态更新。

  • 用户在创建NPULossScaleOptimizer之前,可以实例化一个FixedLossScaleManager类进行静态LossScale的配置(LossScale值固定,用户需指定LossScale值)。FixedLossScaleManager类的构造函数,请参见FixedLossScaleManager构造函数
  • 用户在创建NPULossScaleOptimizer之前,可以实例化一个ExponentialUpdateLossScaleManager类进行动态LossScale的配置。ExponentialUpdateLossScaleManager类的构造函数,请参见ExponentialUpdateLossScaleManager构造函数

is_distributed

输入

用于支持分布式训练场景的Loss Scaling功能。取值:

  • True:分布式训练时需要配置为True。
  • False。

返回值

返回NPULossScaleOptimizer类对象。

调用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from npu_bridge.npu_init import *

if FLAGS.use_fp16 and (FLAGS.npu_bert_loss_scale not in [None, -1]):
  opt_tmp = opt
  if FLAGS.npu_bert_loss_scale == 0:
    loss_scale_manager = ExponentialUpdateLossScaleManager(init_loss_scale=2**32, incr_every_n_steps=1000, decr_every_n_nan_or_inf=2, decr_ratio=0.5)
  elif FLAGS.npu_bert_loss_scale >= 1:
    loss_scale_manager = FixedLossScaleManager(loss_scale=FLAGS.npu_bert_loss_scale)
  else:
    raise ValueError("Invalid loss scale: %d" % FLAGS.npu_bert_loss_scale)
  if ops_adapter.size() > 1:
    opt = NPULossScaleOptimizer(opt_tmp, loss_scale_manager, is_distributed=True)
  else:
    opt = NPULossScaleOptimizer(opt_tmp, loss_scale_manager)
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词