decorate

paddle.amp. decorate ( models, optimizers=None, level='O1', master_weight=None, save_dtype=None ) [源代码]

装饰神经网络参数,来支持动态图模式下执行的算子的自动混合精度策略(AMP)。 在``O1``模式下,该函数不做任何处理,直接返回输入的models和optimizers。在``O2``模式下,将对输入的网络参数数据类型由float32转为float16,(除BatchNorm和LayerNorm)。 通过该函数可为支持master weight策略的优化器开启master weight策略,以保证训练精度。通过 save_dtype 可指定 paddle.savepaddle.jit.save 存储的网络参数数据类型。

参数:

  • models (Layer|list of Layer) - 网络模型。在``O2``模式下,输入的模型参数将由float32转为float16。

  • optimizers (Optimizer|list of Optimizer) - 优化器,在``O2``模式下,将同步更新网络更改后的flaot16参数。

  • level (str, 可选) - 混合精度训练模式,默认``O1``模式。

  • master_weight (bool|None, 可选) - 是否使用master weight策略。支持maser weight策略的优化器包括``adam``、adamWmomentum,默认值为None,在``O2``模式下使用master weight策略。

  • save_dtype (str|None, 可选) - 网络存储类型,可为float16、float32、float64。通过 save_dtype 可指定通过 paddle.savepaddle.jit.save 存储的网络参数数据类型。默认为None,采用现有网络参数类型进行存储。

代码示例:

# required: gpu
# Demo1: single model and optimizer:
import paddle

model = paddle.nn.Conv2D(3, 2, 3, bias_attr=False)
optimzier = paddle.optimizer.SGD(parameters=model.parameters())

model, optimizer = paddle.amp.decorate(models=model, optimizers=optimzier, level='O2')

data = paddle.rand([10, 3, 32, 32])

with paddle.amp.auto_cast(enable=True, custom_white_list=None, custom_black_list=None, level='O2'):
    output = model(data)
    print(output.dtype) # FP16

# required: gpu
# Demo2: multi models and optimizers:
model2 = paddle.nn.Conv2D(3, 2, 3, bias_attr=False)
optimizer2 = paddle.optimizer.Adam(parameters=model2.parameters())

models, optimizers = paddle.amp.decorate(models=[model, model2], optimizers=[optimzier, optimizer2], level='O2')

data = paddle.rand([10, 3, 32, 32])

with paddle.amp.auto_cast(enable=True, custom_white_list=None, custom_black_list=None, level='O2'):
    output = models[0](data)
    output2 = models[1](data)
    print(output.dtype) # FP16
    print(output2.dtype) # FP16

使用本API的教程文档