BuildStrategy
- class paddle.static. BuildStrategy
BuildStrategy 使用户更方便地控制 ParallelExecutor 中计算图的建造方法,可通过设置 ParallelExecutor 中的 BuildStrategy 成员来实现此功能。
返回
BuildStrategy,一个 BuildStrategy 的实例。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> data = static.data(name="x", shape=[None, 1], dtype="float32")
>>> hidden = static.nn.fc(data, size=10)
>>> loss = paddle.mean(hidden)
>>> paddle.optimizer.SGD(learning_rate=0.01).minimize(loss)
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.enable_inplace = True
>>> build_strategy.memory_optimize = True
>>> build_strategy.reduce_strategy = static.BuildStrategy.ReduceStrategy.Reduce
>>> program = static.CompiledProgram(static.default_main_program(), build_strategy=build_strategy)
属性
build_cinn_pass
str 类型。表示是否将计算图中的一些算子降级(lowering)为 CINN 算子来执行,这可以加速执行过程。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.build_cinn_pass = True
debug_graphviz_path
str 类型。表示以 graphviz 格式向文件中写入计算图的路径,有利于调试。默认值为空字符串。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.debug_graphviz_path = "./graph"
enable_auto_fusion
bool 类型。是否将子图(subgraph)融合成一个融合组(fusion_group)。目前我们仅支持融合由逐元素类(elementwise-like)算子组成的子图,例如无广播(broadcast)机制的 elementwise_add/mul 以及激活函数(activations)。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.enable_auto_fusion = True
fuse_adamw
bool 类型。表示是否将所有的 adamw 优化器与 multi_tensor_adam 进行融合,该操作可能会提升执行速度。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_adamw = True
fuse_bn_act_ops
bool 类型。表示是否融合批量归一化(batch_norm)和激活算子(activation_op),该操作可提升执行速度。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_bn_act_ops = True
fuse_bn_add_act_ops
bool 类型。表示是否融合批量归一化(batch_norm)、逐元素加法(elementwise_add)和激活算子(activation_op),该操作可提升执行速度。默认值为 True。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_bn_add_act_ops = True
fuse_broadcast_ops
bool 类型。表明是否融合(fuse) broadcast ops。该选项指在 Reduce 模式下有效,使程序运行更快。默认为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_broadcast_ops = True
fuse_dot_product_attention
bool 类型。表示是否融合点积注意力(dot product attention),该操作可以提升执行速度。默认值为 False。
代码示例
import paddle
import paddle.static as static
paddle.enable_static()
build_strategy = static.BuildStrategy()
build_strategy.fuse_dot_product_attention = True
fuse_elewise_add_act_ops
bool 类型。表明是否融合(fuse) elementwise_add_op 和 activation_op。这会使整体执行过程更快。默认为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_elewise_add_act_ops = True
fuse_gemm_epilogue
bool 类型。表示是否融合矩阵乘法算子(matmul_op)、逐元素加法算子(elementwise_add_op)和激活算子(activation_op),该操作可提升执行速度。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_gemm_epilogue = True
fuse_relu_depthwise_conv
bool 类型。表明是否融合(fuse) relu 和 depthwise_conv2d,节省 GPU 内存并可能加速执行过程。此选项仅适用于 GPU 设备。默认为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fuse_relu_depthwise_conv = True
fuse_resunit
bool 类型。默认为 False。
代码示例
import paddle
import paddle.static as static
paddle.enable_static()
build_strategy = static.BuildStrategy()
build_strategy.fuse_resunit = True
fused_attention
bool 类型。表示是否将整个多头注意力(multi-head attention)部分融合成一个算子(op),该操作可提升执行速度。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fused_attention = True
fused_feedforward
bool 类型。表示是否将整个前馈网络(feed_forward)部分融合成一个算子(op),该操作可提升执行速度。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.fused_feedforward = True
memory_optimize
bool 类型或 None。设为 True 时可用于减少总内存消耗,False 表示不使用,None 表示框架会自动选择使用或者不使用优化策略。当前,None 意味着当 GC 不能使用时,优化策略将被使用。默认为 None。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.memory_optimize = True
reduce_strategy
static.BuildStrategy.ReduceStrategy 类型。在 ParallelExecutor 中,存在两种参数梯度聚合策略,即 AllReduce 和 Reduce。如果用户需要在所有执行设备上独立地进行参数更新,可以使用 AllReduce。如果使用 Reduce 策略,所有参数的优化将均匀地分配给不同的执行设备,随之将优化后的参数广播给其他执行设备。 默认值为 AllReduce 。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.reduce_strategy = static.BuildStrategy.ReduceStrategy.Reduce
sequential_run
bool 类型。该参数用于控制 StandaloneExecutor 是否按照 ProgramDesc 中定义的顺序来执行算子(ops)。默认值为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.sequential_run = True
sync_batch_norm
bool 类型。表示是否使用同步的批正则化,即在训练阶段通过多个设备同步均值和方差。当前的实现不支持 FP16 训练和 CPU。并且目前 仅支持 仅在一台机器上进行同步式批正则。默认为 False。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> paddle.enable_static()
>>> build_strategy = static.BuildStrategy()
>>> build_strategy.sync_batch_norm = True