未验证 提交 7f211856 编写于 作者: F flame 提交者: GitHub

build strategy doc (#1201)

* build strategy api doc
上级 0e77e3bf
......@@ -3,22 +3,39 @@
BuildStrategy
-------------------------------
.. py:class:: paddle.fluid.BuildStrategy
.. py:class:: paddle.fluid.BuildStrategy
``BuildStrategy`` 使用户更精准地控制 ``ParallelExecutor`` 中SSA图的建造方法。可通过设置 ``ParallelExecutor`` 中的 ``BuildStrategy`` 成员来实现此功能。
``BuildStrategy`` 使用户更方便地控制[ ``ParallelExecutor`` ](../fluid_cn.html\#parallelexecutor)中计算图的建造方法,可通过设置 ``ParallelExecutor`` 中的 ``BuildStrategy`` 成员来实现此功能。
**代码示例**
.. code-block:: python
import os
import numpy as np
import paddle.fluid as fluid
os.environ["CPU_NUM"] = '2'
places = fluid.cpu_places()
data = fluid.layers.data(name="x", shape=[1], dtype="float32")
hidden = fluid.layers.fc(input=data, size=10)
loss = fluid.layers.mean(hidden)
fluid.optimizer.SGD(learning_rate=0.01).minimize(loss)
build_strategy = fluid.BuildStrategy()
build_strategy.enable_inplace = True
build_strategy.memory_optimize = True
build_strategy.reduce_strategy = fluid.BuildStrategy.ReduceStrategy.Reduce
program = fluid.compiler.CompiledProgram(fluid.default_main_program())
program = program.with_data_parallel(loss_name=loss.name,
build_strategy=build_strategy,
places=places)
.. py:attribute:: debug_graphviz_path
str类型。它表明了以graphviz格式向文件中写入SSA图的路径,有利于调试。 默认值为""
str类型。表示以graphviz格式向文件中写入计算图的路径,有利于调试。默认值为空字符串
**代码示例**
......@@ -31,7 +48,7 @@ str类型。它表明了以graphviz格式向文件中写入SSA图的路径,有
.. py:attribute:: enable_sequential_execution
类型是BOOL。 如果设置为True,则ops的执行顺序将与program中的执行顺序相同。 默认为False。
bool类型。如果设置为True,则算子的执行顺序将与算子定义的执行顺序相同。默认为False。
**代码示例**
......@@ -44,11 +61,19 @@ str类型。它表明了以graphviz格式向文件中写入SSA图的路径,有
.. py:attribute:: fuse_broadcast_ops
bool类型。它表明了是否融合(fuse)broadcast ops。值得注意的是,在Reduce模式中,融合broadcast ops可以使程序运行更快,因为这个过程等同于延迟执行所有的broadcast ops。在这种情况下,所有的nccl streams仅用于一段时间内的NCCLReduce操作。默认为False。
bool类型。表明是否融合(fuse) broadcast ops。该选项指在Reduce模式下有效,使程序运行更快。默认为False。
**代码示例**
.. code-block:: python
import paddle.fluid as fluid
build_strategy = fluid.BuildStrategy()
build_strategy.fuse_broadcast_ops = True
.. py:attribute:: fuse_elewise_add_act_ops
bool类型。它表明了是否融合(fuse)elementwise_add_op和activation_op。这会使整体执行过程更快一些。默认为False。
bool类型。表明是否融合(fuse) elementwise_add_op和activation_op。这会使整体执行过程更快。默认为False。
**代码示例**
......@@ -61,7 +86,7 @@ bool类型。它表明了是否融合(fuse)elementwise_add_op和activation_o
.. py:attribute:: fuse_relu_depthwise_conv
BOOL类型,fuse_relu_depthwise_conv指示是否融合relu和depthwise_conv2d,它会节省GPU内存并可能加速执行过程。 此选项仅适用于GPU设备。 默认为False。
bool类型。表明是否融合(fuse) relu和depthwise_conv2d,节省GPU内存并可能加速执行过程。此选项仅适用于GPU设备。默认为False。
**代码示例**
......@@ -73,15 +98,15 @@ BOOL类型,fuse_relu_depthwise_conv指示是否融合relu和depthwise_conv2d
.. py:attribute:: gradient_scale_strategy
``fluid.BuildStrategy.GradientScaleStrategy`` 类型。在 ``ParallelExecutor`` 中,存在三种定义 *loss@grad* 的方式,分别为 ``CoeffNumDevice``, ``One`` 与 ``Customized``。默认情况下, ``ParallelExecutor`` 根据设备数目来设置 *loss@grad* 。如果你想自定义 *loss@grad* ,你可以选择 ``Customized`` 方法。默认为 ``CoeffNumDevice`` 。
``fluid.BuildStrategy.GradientScaleStrategy`` 类型。在 ``ParallelExecutor`` 中,存在三种定义loss对应梯度( *loss@grad* )的方式,分别为 ``CoeffNumDevice``, ``One`` 与 ``Customized``。默认情况下, ``ParallelExecutor`` 根据设备数目来设置 *loss@grad* 。如果用户需要自定义 *loss@grad* ,可以选择 ``Customized`` 方法。默认为 ``CoeffNumDevice`` 。
**代码示例**
.. code-block:: python
import paddle.fluid.compiler as compiler
import numpy
import os
import numpy as np
import paddle.fluid.compiler as compiler
use_cuda = True
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
......@@ -114,8 +139,8 @@ BOOL类型,fuse_relu_depthwise_conv指示是否融合relu和depthwise_conv2d
places = places)
dev_count = len(places)
x = numpy.random.random(size=(10, 1)).astype('float32')
loss_grad = numpy.ones((dev_count)).astype("float32") * 0.01
x = np.random.random(size=(10, 1)).astype('float32')
loss_grad = np.ones((dev_count)).astype("float32") * 0.01
loss_grad_name = loss.name+"@GRAD"
loss_data = exe.run(compiled_prog,
feed={"X": x, loss_grad_name : loss_grad},
......@@ -123,13 +148,11 @@ BOOL类型,fuse_relu_depthwise_conv指示是否融合relu和depthwise_conv2d
.. py:attribute:: memory_optimize
bool类型或者None。设为True时可用于减少总内存消耗。
默认为None。None表示框架会自动选择使用或者不使用优化策略。当前,None意味着当GC不能使用时,优化策略将被使用。
True表示可使用,False表示不可使用。默认为None。
bool类型或None。设为True时可用于减少总内存消耗,False表示不使用,None表示框架会自动选择使用或者不使用优化策略。当前,None意味着当GC不能使用时,优化策略将被使用。默认为None。
.. py:attribute:: reduce_strategy
``fluid.BuildStrategy.ReduceStrategy`` 类型。在 ``ParallelExecutor`` 中,存在两种减少策略(reduce strategy),即 ``AllReduce`` 和 ``Reduce`` 。如果你需要在所有执行设备上独立地进行参数优化,可以使用 ``AllReduce`` 。反之,如果使用 ``Reduce`` 策略,所有参数的优化将均匀地分配给不同的执行设备,随之将优化后的参数广播给其他执行设备。
``fluid.BuildStrategy.ReduceStrategy`` 类型。在 ``ParallelExecutor`` 中,存在两种参数梯度聚合策略,即 ``AllReduce`` 和 ``Reduce`` 。如果用户需要在所有执行设备上独立地进行参数更新,可以使用 ``AllReduce`` 。如果使用 ``Reduce`` 策略,所有参数的优化将均匀地分配给不同的执行设备,随之将优化后的参数广播给其他执行设备。
默认值为 ``AllReduce`` 。
**代码示例**
......@@ -142,7 +165,7 @@ True表示可使用,False表示不可使用。默认为None。
.. py:attribute:: remove_unnecessary_lock
BOOL类型。如果设置为True, GPU操作中的一些锁将被释放, ``ParallelExecutor`` 将运行得更快,默认为 True。
bool类型。设置True会去除GPU操作中的一些锁操作, ``ParallelExecutor`` 将运行得更快,默认为True。
**代码示例**
......@@ -155,11 +178,7 @@ BOOL类型。如果设置为True, GPU操作中的一些锁将被释放, ``Para
.. py:attribute:: sync_batch_norm
类型为bool, ``sync_batch_norm`` 表示是否使用同步的批正则化,即在训练阶段通过多个设备同步均值和方差。
当前的实现不支持FP16训练和CPU。仅在一台机器上进行同步式批正则,不适用于多台机器。
默认为 False。
bool类型。表示是否使用同步的批正则化,即在训练阶段通过多个设备同步均值和方差。当前的实现不支持FP16训练和CPU。并且目前**仅支持**仅在一台机器上进行同步式批正则。默认为 False。
**代码示例**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册