未验证 提交 74be6398 编写于 作者: C Chen Weihang 提交者: GitHub

fix compiled program sample code (#1966)

上级 b76fdfc8
...@@ -22,24 +22,19 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进 ...@@ -22,24 +22,19 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle.fluid as fluid
import paddle.fluid.compiler as compiler
import numpy import numpy
import os
place = fluid.CUDAPlace(0) # fluid.CPUPlace() place = fluid.CUDAPlace(0) # fluid.CPUPlace()
exe = fluid.Executor(place) exe = fluid.Executor(place)
data = fluid.layers.data(name='X', shape=[1], dtype='float32') data = fluid.data(name='X', shape=[None, 1], dtype='float32')
hidden = fluid.layers.fc(input=data, size=10) hidden = fluid.layers.fc(input=data, size=10)
loss = fluid.layers.mean(hidden) loss = fluid.layers.mean(hidden)
fluid.optimizer.SGD(learning_rate=0.01).minimize(loss) fluid.optimizer.SGD(learning_rate=0.01).minimize(loss)
exe.run(fluid.default_startup_program()) exe.run(fluid.default_startup_program())
build_strategy = fluid.BuildStrategy() compiled_prog = fluid.CompiledProgram(
build_strategy.fuse_all_optimizer_ops = True fluid.default_main_program())
compiled_prog = compiler.CompiledProgram(
fluid.default_main_program(),
build_strategy=build_strategy)
x = numpy.random.random(size=(10, 1)).astype('float32') x = numpy.random.random(size=(10, 1)).astype('float32')
loss_data, = exe.run(compiled_prog, loss_data, = exe.run(compiled_prog,
...@@ -49,7 +44,7 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进 ...@@ -49,7 +44,7 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进
.. py:method:: with_data_parallel(loss_name=None, build_strategy=None, exec_strategy=None, share_vars_from=None, places=None) .. py:method:: with_data_parallel(loss_name=None, build_strategy=None, exec_strategy=None, share_vars_from=None, places=None)
该接口用于将输入的Program或Graph进行转换,以便通过数据并行模式运行该模型。用户可以通过 `build_strategy` 和 `exec_strategy` 设置计算图构建和计算图执行过程中可以进行的一些优化,例如:将梯度聚合的AllReduce操作进行融合、指定计算图运行过程中使用的线程池大小等。**注意:如果在构建CompiledProgram和调用with_data_parallel时都指定了build_strategy,在CompiledProgram中的build_strategy会被复写,因此,如果是数据并行训练,建议在调用with_data_parallel接口设置build_strategy**。 该接口用于将输入的Program或Graph进行转换,以便通过数据并行模式运行该模型。用户可以通过 `build_strategy` 和 `exec_strategy` 设置计算图构建和计算图执行过程中可以进行的一些优化,例如:将梯度聚合的AllReduce操作进行融合、指定计算图运行过程中使用的线程池大小等。**注意:如果在构建CompiledProgram和调用with_data_parallel时都指定了build_strategy,在CompiledProgram中的build_strategy会被复写,因此,如果是数据并行训练,建议在调用with_data_parallel接口设置build_strategy**。
参数: 参数:
- **loss_name** (str) - 该参数为模型最后得到的损失变量的名字,**注意:如果是模型训练,必须设置loss_name,否则计算结果可能会有问题。** 默认为:None。 - **loss_name** (str) - 该参数为模型最后得到的损失变量的名字,**注意:如果是模型训练,必须设置loss_name,否则计算结果可能会有问题。** 默认为:None。
...@@ -72,12 +67,13 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进 ...@@ -72,12 +67,13 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle.fluid as fluid
import paddle.fluid.compiler as compiler
import numpy import numpy
import os import os
use_cuda = True use_cuda = True
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace() place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
parallel_places = [fluid.CUDAPlace(0), fluid.CUDAPlace(1)] if use_cuda else [fluid.CPUPlace()] * 2
# 注意:如果你使用CPU运行程序,需要具体设置CPU_NUM, # 注意:如果你使用CPU运行程序,需要具体设置CPU_NUM,
# 否则fluid会把逻辑核的所有数目设为CPU_NUM, # 否则fluid会把逻辑核的所有数目设为CPU_NUM,
# 在这种情况下,输入的batch size应大于CPU_NUM, # 在这种情况下,输入的batch size应大于CPU_NUM,
...@@ -87,22 +83,23 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进 ...@@ -87,22 +83,23 @@ CompiledProgram根据 `build_strategy` 的配置将输入的Program或Graph进
exe = fluid.Executor(place) exe = fluid.Executor(place)
data = fluid.layers.data(name='X', shape=[1], dtype='float32') data = fluid.data(name='X', shape=[None, 1], dtype='float32')
hidden = fluid.layers.fc(input=data, size=10) hidden = fluid.layers.fc(input=data, size=10)
loss = fluid.layers.mean(hidden) loss = fluid.layers.mean(hidden)
test_program = fluid.default_main_program().clone(for_test=True) test_program = fluid.default_main_program().clone(for_test=True)
fluid.optimizer.SGD(learning_rate=0.01).minimize(loss) fluid.optimizer.SGD(learning_rate=0.01).minimize(loss)
exe.run(fluid.default_startup_program()) exe.run(fluid.default_startup_program())
build_strategy = fluid.BuildStrategy() compiled_train_prog = fluid.CompiledProgram(
build_strategy.fuse_all_reduce_ops = True
compiled_train_prog = compiler.CompiledProgram(
fluid.default_main_program()).with_data_parallel( fluid.default_main_program()).with_data_parallel(
loss_name=loss.name, build_strategy=build_strategy) loss_name=loss.name, places=parallel_places)
# 注意:如果此处不设置share_vars_from=compiled_train_prog,测试过程中用的参数与训练使用的参数是不一致 # 注意:如果此处不设置share_vars_from=compiled_train_prog,
compiled_test_prog = compiler.CompiledProgram( # 测试过程中用的参数与训练使用的参数是不一致
compiled_test_prog = fluid.CompiledProgram(
test_program).with_data_parallel( test_program).with_data_parallel(
share_vars_from=compiled_train_prog) share_vars_from=compiled_train_prog,
places=parallel_places)
train_data = numpy.random.random(size=(10, 1)).astype('float32') train_data = numpy.random.random(size=(10, 1)).astype('float32')
loss_data, = exe.run(compiled_train_prog, loss_data, = exe.run(compiled_train_prog,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册