AmpScaler¶
- class paddle.fluid.dygraph.amp.loss_scaler. AmpScaler ( enable=True, init_loss_scaling=32768.0, incr_ratio=2.0, decr_ratio=0.5, incr_every_n_steps=1000, decr_every_n_nan_or_inf=1, use_dynamic_loss_scaling=True ) [source]
- 
         - Api_attr
- 
           imperative 
 AmpScaler is used for Auto-Mixed-Precision training/inferring in imperative mode. It controls the scaling of loss, helps avoiding numerical overflow. The object of this class has seventeen methods scale(), unscale_(), minimize() and get/set api of parameters. scale() is used to multiply the loss by a scale ratio. unscale_() is used to unscale the gradients of parameters, multiplies the gradients of parameters by 1/(scale ratio) minimize() is similar as optimizer.minimize(), performs parameters updating, and it will update the loss_scaling. Commonly, it is used together with amp_guard to achieve Auto-Mixed-Precision in imperative mode. - Parameters
- 
           - enable (bool, optional) – Enable loss scaling or not. Default is True. 
- init_loss_scaling (float, optional) – The initial loss scaling factor. Default is 2**15. 
- incr_ratio (float, optional) – The multiplier to use when increasing the loss scaling. Default is 2.0. 
- decr_ratio (float, optional) – The less-than-one-multiplier to use when decreasing the loss scaling. Default is 0.5. 
- incr_every_n_steps (int, optional) – Increases loss scaling every n consecutive steps with finite gradients. Default is 1000. 
- decr_every_n_nan_or_inf (int, optional) – Decreases loss scaling every n accumulated steps with nan or inf gradients. Default is 2. 
- use_dynamic_loss_scaling (bool, optional) – Whether to use dynamic loss scaling. If False, fixed loss_scaling is used. If True, the loss scaling is updated dynamicly. Default is True. 
 
- Returns
- 
           An AmpScaler object. 
 Examples import numpy as np import paddle.fluid as fluid data = np.random.uniform(-1, 1, [10, 3, 32, 32]).astype('float32') with fluid.dygraph.guard(): model = fluid.dygraph.Conv2D(3, 2, 3) optimizer = fluid.optimizer.SGDOptimizer( learning_rate=0.01, parameter_list=model.parameters()) scaler = fluid.dygraph.AmpScaler(init_loss_scaling=1024) data = fluid.dygraph.to_variable(data) with fluid.dygraph.amp_guard(): conv = model(data) loss = fluid.layers.reduce_mean(conv) scaled = scaler.scale(loss) scaled.backward() scaler.minimize(optimizer, scaled) - 
            
           scale
           (
           var
           )
           scale¶
- 
           Multiplies a variable(Tensor) by the scale factor and returns scaled outputs. If this instance of AmpScaleris not enabled, output are returned unmodified.- Parameters
- 
             var (Variable) – The variable to scale. 
- Returns
- 
             The scaled variable or original variable. 
 Examples import numpy as np import paddle.fluid as fluid data = np.random.uniform(-1, 1, [10, 3, 32, 32]).astype('float32') with fluid.dygraph.guard(): model = fluid.dygraph.Conv2D(3, 2, 3) optimizer = fluid.optimizer.SGDOptimizer( learning_rate=0.01, parameter_list=model.parameters()) scaler = fluid.dygraph.AmpScaler(init_loss_scaling=1024) data = fluid.dygraph.to_variable(data) with fluid.dygraph.amp_guard(): conv = model(data) loss = fluid.layers.reduce_mean(conv) scaled = scaler.scale(loss) scaled.backward() scaler.minimize(optimizer, scaled) 
 - 
            
           minimize
           (
           optimizer, 
           *args, 
           **kwargs
           )
           minimize¶
- 
           This function is similar as Optimizer.minimize(), which performs parameters updating. If the scaled gradients of parameters contains NAN or INF, the parameters updating is skipped. Otherwise, if unscale_() has not been called, it first unscales the scaled gradients of parameters, then updates the parameters. Finally, the loss scaling ratio is updated. - Parameters
- 
             - optimizer (Optimizer) – The optimizer used to update parameters. 
- args – Arguments, which will be forward to optimizer.minimize(). 
- kwargs – Keyword arguments, which will be forward to Optimizer.minimize(). 
 
 Examples import numpy as np import paddle.fluid as fluid data = np.random.uniform(-1, 1, [10, 3, 32, 32]).astype('float32') with fluid.dygraph.guard(): model = fluid.dygraph.Conv2D(3, 2, 3) optimizer = fluid.optimizer.SGDOptimizer( learning_rate=0.01, parameter_list=model.parameters()) scaler = fluid.dygraph.AmpScaler(init_loss_scaling=1024) data = fluid.dygraph.to_variable(data) with fluid.dygraph.amp_guard(): conv = model(data) loss = fluid.layers.reduce_mean(conv) scaled = scaler.scale(loss) scaled.backward() scaler.minimize(optimizer, scaled) 
 - 
            
           is_enable
           (
           )
           is_enable¶
- 
           Enable loss scaling or not. - Returns
- 
             enable loss scaling return True else return False. 
- Return type
- 
             bool 
 
 - 
            
           is_use_dynamic_loss_scaling
           (
           )
           is_use_dynamic_loss_scaling¶
- 
           Whether to use dynamic loss scaling. - Returns
- 
             if fixed loss_scaling is used return False, if the loss scaling is updated dynamicly return true. 
- Return type
- 
             bool 
 
 - 
            
           get_init_loss_scaling
           (
           )
           get_init_loss_scaling¶
- 
           Return the initial loss scaling factor. - Reurns:
- 
             float: the initial loss scaling factor. 
 
 - 
            
           set_init_loss_scaling
           (
           new_init_loss_scaling
           )
           set_init_loss_scaling¶
- 
           Set the initial loss scaling factor by new_init_loss_scaling. - Parameters
- 
             new_init_loss_scaling (int) – The new_init_loss_scaling used to update initial loss scaling factor.s 
 
 - 
            
           get_incr_ratio
           (
           )
           get_incr_ratio¶
- 
           Return the multiplier to use when increasing the loss scaling. - Reurns:
- 
             float: the multiplier to use when increasing the loss scaling. 
 
 - 
            
           set_incr_ratio
           (
           new_incr_ratio
           )
           set_incr_ratio¶
- 
           Set the multiplier to use when increasing the loss scaling by new_incr_ratio, new_incr_ratio should > 1.0. - Parameters
- 
             new_incr_ratio (float) – The new_incr_ratio used to update the multiplier to use when increasing the loss scaling. 
 
 - 
            
           get_decr_ratio
           (
           )
           get_decr_ratio¶
- 
           Get the less-than-one-multiplier to use when decreasing the loss scaling. - Reurns:
- 
             float: the less-than-one-multiplier to use when decreasing the loss scaling. 
 
 - 
            
           set_decr_ratio
           (
           new_decr_ratio
           )
           set_decr_ratio¶
- 
           Set the less-than-one-multiplier to use when decreasing the loss scaling by new_incr_ratio, new_decr_ratio should < 1.0. - Parameters
- 
             new_decr_ratio (float) – The new_decr_ratio used to update the less-than-one-multiplier to use when decreasing the loss scaling. 
 
 - 
            
           get_incr_every_n_steps
           (
           )
           get_incr_every_n_steps¶
- 
           Return the num n, n represent increases loss scaling every n consecutive steps with finite gradients. - Reurns:
- 
             int: the num n, n represent increases loss scaling every n consecutive steps with finite gradients. 
 
 - 
            
           set_incr_every_n_steps
           (
           new_incr_every_n_steps
           )
           set_incr_every_n_steps¶
- 
           Set the num n by new_incr_every_n_steps, n represent increases loss scaling every n consecutive steps with finite gradients. - Parameters
- 
             new_incr_every_n_steps (int) – The new_incr_every_n_steps used to update the num n, n represent increases loss scaling every n consecutive steps with finite gradients. 
 
 - 
            
           get_decr_every_n_nan_or_inf
           (
           )
           get_decr_every_n_nan_or_inf¶
- 
           Return the num n, n represent decreases loss scaling every n accumulated steps with nan or inf gradients. - Reurns:
- 
             int: the num n, n represent decreases loss scaling every n accumulated steps with nan or inf gradients. 
 
 - 
            
           set_decr_every_n_nan_or_inf
           (
           new_decr_every_n_nan_or_inf
           )
           set_decr_every_n_nan_or_inf¶
- 
           Set the num n by new_decr_every_n_nan_or_inf, n represent decreases loss scaling every n accumulated steps with nan or inf gradients. - Parameters
- 
             new_decr_every_n_nan_or_inf (int) – The new_decr_every_n_nan_or_inf used to update the num n, n represent decreases loss scaling every n accumulated steps with nan or inf gradients. 
 
 - 
            
           state_dict
           (
           )
           state_dict¶
- 
           Returns the state of the scaler as a dict, If this instance is not enabled, returns an empty dict. - Reurns:
- 
             A dict of scaler includes: scale (tensor): The loss scaling factor. incr_ratio(float): The multiplier to use when increasing the loss scaling. decr_ratio(float): The less-than-one-multiplier to use when decreasing the loss scaling. incr_every_n_steps(int): Increases loss scaling every n consecutive steps with finite gradients. decr_every_n_nan_or_inf(int): Decreases loss scaling every n accumulated steps with nan or inf gradients. incr_count(int): The number of recent consecutive unskipped steps. decr_count(int): The number of recent consecutive skipped steps. use_dynamic_loss_scaling(bool): Whether to use dynamic loss scaling. If False, fixed loss_scaling is used. If True, the loss scaling is updated dynamicly. Default is True. 
 
 - 
            
           load_state_dict
           (
           state_dict
           )
           load_state_dict¶
- 
           Loads the scaler state. - Parameters
- 
             state_dict (dict) – scaler state. Should be an object returned from a call to AmpScaler.state_dict(). 
 
 
