IpuCompiledProgram

class paddle.static. IpuCompiledProgram ( program, scope=None, ipu_strategy=None ) [源代码]

IpuCompiledProgram 将输入的 Program 转换和优化成 IPU 所需要的形式,例如:前向图提取、计算图转化、无用的 scale 算子删除等。

参数

  • program (Program,可选):该参数为被执行的 Program。默认值为 None,表示将使用默认的 program,即 paddle.static.default_main_program()。

  • scope (Scope,可选):该参数表示执行当前 program 所使用的作用域。默认值为 None,将使用全局 scope,即 paddle.static.global_scope()。

  • ipu_strategy (IpuStrategy,可选):根据传入的 ipu_strategy 实例,对 Program 进行转换和优化,例如:计算图的 float16 模式、是否是训练模式、计算图需要用几个 IPU 等。默认为 None,表示将使用默认的 ipu_strategy 转换 Program。

返回

IpuCompiledProgram,初始化后的 IpuCompiledProgram 对象。

代码示例

# required: ipu

import paddle
import paddle.static as static

paddle.enable_static()

a = static.data(name='data', shape=[None, 1], dtype='int32')
b = a + 1
main_prog = static.default_main_program()

ipu_strategy = static.IpuStrategy()
ipu_strategy.set_graph_config(num_ipus=1, is_training=True, micro_batch_size=1)
ipu_strategy.set_pipelining_config(enable_pipelining=False, batches_per_step=1, enable_gradient_accumulation=False, accumulation_factor=1)
ipu_strategy.set_precision_config(enable_fp16=False)

ipu_compiled_program = static.IpuCompiledProgram(
    main_prog,
    ipu_strategy=ipu_strategy)

方法

compile(self, feed_list, fetch_list)

将 Program 进行编译,以便在 ipu 上运行。用户可以通过 feed_listfetch_list 传入计算图输入和输出的名字。

参数

  • feed_list (list):该参数为模型的输入变量的名字。

  • fetch_list (list):模型运行之后需要返回的变量的名字。

返回

Program,编译之后的 Program 对象。

代码示例

# required: ipu

import paddle
import paddle.static as static

paddle.enable_static()

a = static.data(name='data', shape=[None, 1], dtype='int32')
b = a + 1
main_prog = static.default_main_program()

ipu_strategy = static.IpuStrategy()
ipu_strategy.set_graph_config(num_ipus=1, is_training=True, micro_batch_size=1)
ipu_strategy.set_pipelining_config(enable_pipelining=False, batches_per_step=1, enable_gradient_accumulation=False, accumulation_factor=1)
ipu_strategy.set_precision_config(enable_fp16=False)

program = static.IpuCompiledProgram(
    main_prog,
    ipu_strategy=ipu_strategy).compile([a.name], [b.name])