昇腾社区首页
中文
注册

动静子图拆分场景性能优化

功能简介

动态图模式下,图中存在部分算子能够聚合成静态子图,如N个算子聚合成一个静态子图后只需要一次下发。静态子图中的算子数量对性能影响在如下特点:

  • 静态子图中算子数量越多,单次图下发、图执行耗时越长。
  • 静态子图中算子数量越多,相较于静态子图中单个算子分别下发,节省的执行时间越多。
  • 静态子图中算子数量越多,算子间融合的可能性越大,获得更高执行性能的可能性越大。

综上特点,静态子图中算子数量并非越多越好,而是下发与执行的耗时相互掩盖才能达到最好的执行性能。因此针对不同的网络,TorchAir提供了动态图模式中允许设置静态子图算子个数的功能,帮助用户在动态图场景下进行算子性能调优。

使用方法。

设置config时使用下列开关进行配置,取值为整型,支持的取值范围为[-1, int64的最大值](不含0和1),若不设置则使用GE的默认值。

import torch_npu
import torchair as tng
config = tng.CompilerConfig()

# 动态图中设置静态子图算子个数的配置
config.experimental_config.static_model_ops_lower_limit= 4
npu_backend = tng.get_npu_backend(compiler_config=config)
...
model = Model()
model = torch.compile(model, backend=npu_backend, dynamic=True)

参数取值说明:

  • 取值为-1时:所有算子走动态执行。
  • 取值为0时:

    静态子图中的算子数小于0, 不存在此场景。

  • 取值为1时:

    静态子图中的算子数小于1, 不存在这个场景。

  • 取值大于1时(例如取值为4):
    • 静态子图中的算子数小于4,静态子图中的算子会在动态图中被动态地下发执行。
    • 静态子图中的算子数大于等于4,静态子图中的算子会被转为静态子图统一下发执行。