dynamo export功能

功能简介

通过dynamo_export可以导出air格式的图,导出的推理模型不再依赖PyTorch框架,可直接由CANN软件栈加载执行,减少了框架调度带来的性能损耗,方便在不同的部署环境上移植。

  • 导出时需要保证被导出部分能构成一张图。
  • 支持单卡和多卡场景下导出图,且支持导出后带allreduce等通信类算子。
  • 受dynamo功能约束,不支持动态控制流if/else。

使用方法

def dynamo_export(*args, model: torch.nn.Module, export_path: str = "export_file", export_name: str = "export", dynamic: bool = False, config=CompilerConfig(), **kwargs)
表1 参数说明表

参数名

说明

是否必选

model

需要导出的model。

export_path

设置导出的文件存放路径,默认值为当前路径下的"export_file"文件夹内。

export_name

设置导出的离线模型名字,默认值为"export"。

dynamic

设置导出静态模型还是动态模型,默认值为False,导出静态模型,为True时导出动态模型。

config

通过config设置功能开关。当前支持功能:

  • 前端切分场景下(即python脚本中包含了集合通信逻辑),自动生成ATC(Ascend Tensor Compiler,昇腾张量编译)的json配置文件样例模板。默认值为false,不生成config文件。
  • 导出图中携带nn_module_stack信息,方便后端切分运用模板。

config参数构造示例如下:

import torch_npu
import torchair as tng
config = tng.CompilerConfig()
# 自动生成ATC的json配置文件样例
config.export.experimental.auto_atc_config_generated = True 
# 携带nn_module_stack信息
config.export.experimental.enable_record_nn_module_stack = True 

*args,**kwargs

导出model时的样例输入,不同的输入可能导致model走入不同的分支,进而导致trace的图不同。应当选取执行推理时的典型值。

  • export_path:由于导出air图时会将权重外置,权重也会被保存到该路径下,该路径同时被标记在air文件中的fileconst节点中。注意此处路径可以配置为相对路径或绝对路径,若选择相对路径,在ATC编译、执行离线模型时也需要在相对路径的父路径中执行;若选择绝对路径,在ATC编译、执行离线模型时无路径限制,但是当编译好的模型拷贝至其他服务器环境时需要保证绝对路径相同,否则会找不到权重文件。
  • 对于导出的权重文件,若权重很小能被保存在export.air文件中,则不会在目录下生成额外的权重文件。若权重文件很大,导致生成的air文件过大则无法存在air文件中,权重将会转为额外的权重文件存储在导出路径中(如场景示例中的p1、p2文件)。通过查看dynamo.txt文件中是否存在FileConstant节点,确定是否生成了额外的权重文件。
  • 携带nn_module_stack信息有如下约束:
    • 前端脚本定义layer时,需要以数组的形式,即类似layer[0] = xxx, layer[1] = xxx。若不以数组形式表现变量名,相同模型结构被重复执行,从栈信息中将无法看出模型的layer结构,后端也无法切分。
    • record_nn_module_stack只有在model结构深度两层及以上才能获取到。

场景示例