CompiledProgram

    CompiledProgram根据 build_strategy 的配置将输入的Program或Graph进行转换和优化,例如:计算图中算子融合、计算图执行过程中开启内存/显存优化等,关于build_strategy更多信息。请参阅 fluid.BuildStrategy

    返回

    CompiledProgram,初始化后的 CompiledProgram 对象

    with_data_parallel ( loss_name=None, build_strategy=None, exec_strategy=None, share_vars_from=None, places=None )

    注解

    如果在构建CompiledProgram和调用with_data_parallel时都指定了build_strategy,在CompiledProgram中的build_strategy会被复写,因此,如果是数据并行训练,建议在调用with_data_parallel接口时设置build_strategy。

    参数

    • loss_name (str) - 该参数为模型最后得到的损失变量的名字,注意:如果是模型训练,必须设置loss_name,否则计算结果可能会有问题。 默认为:None。

    • build_strategy (BuildStrategy): 通过配置build_strategy,对计算图进行转换和优化,例如:计算图中算子融合、计算图执行过程中开启内存/显存优化等。关于build_strategy更多的信息,请参阅 fluid.BuildStrategy 。 默认为:None。

    • exec_strategy (ExecutionStrategy) - 通过exec_strategy指定执行计算图过程可以调整的选项,例如线程池大小等。 关于exec_strategy更多信息,请参阅 fluid.ExecutionStrategy 。 默认为:None。

    • places (list(CUDAPlace)|list(CPUPlace)) - 该参数指定模型运行所在的设备。如果希望在GPU0和GPU1上运行,places为[fluid.CUDAPlace(0), fluid.CUDAPlace(1)];如果希望使用2个CPU运行,places为[fluid.CPUPlace()] * 2。 如果没有设置该参数,即该参数为None,模型执行时,将从环境变量中获取可用的设备:如果使用GPU,模型执行时,从环境变量FLAGS_selected_gpus或CUDA_VISIBLE_DEVICES中获取当前可用的设备ID;如果使用CPU,模型执行时,从环境变量CPU_NUM中获取当前可利用的CPU个数。例如:export CPU_NUM=4,如果没有设置该环境变量,执行器会在环境变量中添加该变量,并将其值设为1。默认为:None。

    CompiledProgram,配置之后的 CompiledProgram 对象

    注解

    1. 如果只是进行多卡测试,不需要设置loss_name以及share_vars_from。

    2. 如果程序中既有模型训练又有模型测试,则构建模型测试所对应的CompiledProgram时必须设置share_vars_from,否则模型测试和模型训练所使用的参数是不一致。

    代码示例

    1. import numpy
    2. import os
    3. import paddle
    4. import paddle.static as static
    5. use_cuda = True
    6. place = paddle.CUDAPlace(0) if use_cuda else paddle.CPUPlace()
    7. parallel_places = [paddle.CUDAPlace(0), paddle.CUDAPlace(1)] if use_cuda else [paddle.CPUPlace()] * 2
    8. # to specify the CPU_NUM, otherwise, paddle will use
    9. # all the number of the logic core as the CPU_NUM,
    10. # in that case, the batch size of the input should be
    11. # greater than CPU_NUM, if not, the process will be
    12. # failed by an exception.
    13. if not use_cuda:
    14. os.environ['CPU_NUM'] = str(2)
    15. exe = static.Executor(place)
    16. data = static.data(name='X', shape=[None, 1], dtype='float32')
    17. hidden = static.nn.fc(x=data, size=10)
    18. loss = paddle.mean(hidden)
    19. paddle.optimizer.SGD(learning_rate=0.01).minimize(loss)
    20. exe.run(static.default_startup_program())
    21. static.default_main_program()).with_data_parallel(
    22. loss_name=loss.name, places=parallel_places)
    23. # NOTE: if not set share_vars_from=compiled_train_prog,
    24. # the parameters used in test process are different with
    25. # the parameters used by train process
    26. compiled_test_prog = static.CompiledProgram(
    27. test_program).with_data_parallel(
    28. share_vars_from=compiled_train_prog,
    29. places=parallel_places)
    30. train_data = numpy.random.random(size=(10, 1)).astype('float32')
    31. loss_data, = exe.run(compiled_train_prog,
    32. feed={"X": train_data},
    33. fetch_list=[loss.name])
    34. test_data = numpy.random.random(size=(10, 1)).astype('float32')
    35. loss_data, = exe.run(compiled_test_prog,
    36. fetch_list=[loss.name])