IpuStrategy¶
IpuStrategy
使用户能更精准地控制 IpuCompiledProgram 中计算图的建造方法。
返回¶
IpuStrategy实例。
代码示例¶
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
方法¶
set_graph_config(self, num_ipus, is_training, micro_batch_size, enable_manual_shard)¶
该接口用于向IpuStrategy实例传递IPU构图的Graph配置。
参数
num_ipus (int,可选)- 指定IPU devices的个数,默认值为1,表示仅用一个IPU。
is_training (bool,可选)- 声明是训练还是推理,默认值为True,表示使用训练模式。
micro_batch_size (int,可选)- 当计算图输入的micro_batch_size可变时,指定计算图中输入micro_batch_size,默认值为1,表示如果micro_batch_size可变,将默认置1。
enable_manual_shard (bool,可选)- 是否使能分割计算图到不同IPU进行运算。仅支持当num_ipus > 1时,enable_manual_shard可以置为True。默认值为False,表示不使能该功能。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.set_graph_config(num_ipus=1,
is_training=True,
micro_batch_size=1,
enable_manual_shard=False)
set_pipelining_config(self, enable_pipelining, batches_per_step, enable_gradient_accumulation, accumulation_factor)¶
该接口用于向IpuStrategy实例传递IPU构图的子图数据流水线配置。
参数
enable_pipelining (bool,可选)- 是否使能子图之间的数据流水线。仅支持当enable_manual_shard=True时,enable_pipelining可以置为True。默认值为False,表示不使能该功能。
batches_per_step (int,可选)- 指定数据流水线每次运算多少个batch的数据。默认值为1,表示不使能数据流水线功能。
enable_gradient_accumulation (bool,可选)- 是否使能梯度累积,只用于训练模式。默认值为Flase,表示不使能梯度累积功能。
accumulation_factor (int,可选)- 指定累积运算多少个batch更新一次权重。默认值为1,表示不使能权重累积更新功能。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.set_pipelining_config(enable_pipelining=False,
batches_per_step=1,
enable_gradient_accumulation=False,
accumulation_factor=1)
set_precision_config(self, enable_fp16)¶
该接口用于向IpuStrategy实例传递IPU构图的精度配置。
参数
enable_fp16 (bool)- 是否使能fp16运算模式并将fp32转换为fp16。默认值为False,表示不使能fp16运算模式。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.set_precision_config(enable_fp16=False)
add_custom_op(self, paddle_op, popart_op, domain, version)¶
该接口用于向IpuStrategy实例传递PopART自定义算子的信息。
参数
paddle_op (str)- 待添加的Paddle自定义算子在的名称,根据Paddle自定义算子的定义设置此参数。
popart_op (str,可选)- 待添加的PopART自定义算子的名称,默认值为None,表示和paddle_op相同,根据PopART自定算子的定义设置此参数。
domain (str,可选)- 待添加的PopART自定义算子的domain属性,默认值为"custom.ops",根据PopART自定算子的定义设置此参数。
version (int,可选)- 待添加的PopART自定义算子的version属性,默认值为1,根据PopART自定算子的定义设置此参数。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.add_custom_op('paddle_relu', 'popart_relu')
set_options(self, options)¶
批量向IpuStrategy实例传递参数。
参数
options (dict)- 需要传递的参数字典。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
options = {'num_ipus':1, 'enable_fp16': True}
ipu_strategy.set_options(options)
get_option(self, option)¶
获取IpuStrategy实例的某一参数。
参数
option (str)- 需要获取参数的名称。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
num_ipus = ipu_strategy.get_option('num_ipus')
enable_pattern(self, pattern)¶
启用某一PopART Pattern。
参数
pattern (str)- 需要开启的Pattern名称。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.enable_pattern("ViewSimplifyPattern")
disable_pattern(self, pattern)¶
禁用某一PopART Pattern。
参数
pattern (str)- 需要禁用的Pattern名称。
代码示例
# required: ipu
import paddle
import paddle.static as static
paddle.enable_static()
ipu_strategy = static.IpuStrategy()
ipu_strategy.disable_pattern("ViewSimplifyPattern")