昇腾社区首页
中文
注册

调用流程

ATC工具运行前需要准备环境和模型,本节给出ATC工具的运行流程以及和各组件的交互流程。

运行流程

运行流程如图1所示。

图1 运行流程
  1. 使用ATC工具之前,请先在开发环境安装CANN软件包,获取相关路径下的ATC工具,然后设置环境变量,详细说明请参见准备环境
  2. 准备要进行转换的模型或单算子描述文件,并上传到开发环境。单算子描述文件相关配置请参见单算子模型转换
  3. 使用ATC工具进行模型转换,模型转换过程中使用的参数请参见参数说明

模型转换交互流程

下面以开源框架网络模型转换为om离线模型为例,详细介绍模型转换过程中与周边模块的交互流程。

根据网络模型中算子计算单元的不同,分为AI Core算子和AI CPU算子:AI Core算子是指在昇腾AI处理器的核心计算单元上执行的算子,而AI CPU算子则是在AI CPU计算单元上执行的算子。

在AI Core算子、AI CPU算子的模型转换交互流程中,虽然都涉及图准备、图拆分、图优化、图编译等节点,但由于两者的计算单元不同,因此涉及交互的内部模块也有所不同,请参见下图。

关于算子类型、基本概念等详细介绍请参见Ascend C算子开发指南。如果用户使用的网络模型中有自定义算子,也请优先参见上述手册开发部署好自定义算子,模型转换时会优先去查找自定义算子库匹配模型文件中的算子;若匹配失败,则会去查找内置算子库。

模型转换过程中,若遇到AI CPU算子不支持某种数据类型导致编译失败的场景,可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型,从而实现网络的快速打通,详细流程请参见开启AI CPU Cast算子自动插入特性

  • AI Core算子模型转换交互流程
    图2 AI Core算子模型转换交互流程
    1. 调用框架Parser功能,将主流框架的模型格式转换成CANN模型格式。
    2. 图准备阶段:该阶段会完成原图优化以及Infershape推导(设置算子输出的shape和dtype)等功能。
    3. 图拆分阶段:GE(Graph Engine,图引擎)根据引擎拆分多个子图。
    4. 图优化阶段:GE将拆分后的子图进行优化,优化时按照当前子图流程对AI Core算子进行预编译和UB(Unified Buffer)融合,然后根据算子信息库中算子信息找到算子实现将其编译成算子kernel(算子的*.o与*.json),最后将优化后子图返回给GE。

      优化后的子图合并为整图,再进行整图优化。

    5. 图编译阶段:GE进行图编译,包含内存分配、流资源分配等,图编译完成之后生成适配昇腾AI处理器的离线模型文件(*.om)。
  • AI CPU算子模型转换交互流程
    图3 AI CPU算子模型转换交互流程
    1. 调用框架Parser功能,将主流框架的模型格式转换成CANN模型格式。
    2. 图准备阶段:该阶段会完成算子基本参数校验以及Infershape推导(设置算子输出的shape和dtype)等功能。

      另外,GE将整图下发给AI CPU Engine,AI CPU Engine读取算子信息库,匹配算子支持的format,并将format返回给GE。

    3. 图拆分阶段:GE根据引擎拆分多个子图。
    4. 图优化阶段:GE将拆分后的子图下发给AI CPU Engine,AI CPU Engine进行子图优化,并将优化后子图返回给GE。

      优化后的子图合并为整图,再进行整图优化。

    5. 图编译阶段:GE进行图编译,包含内存分配、流资源分配等,并向AI CPU Engine发送genTask请求,AI CPU Engine返回算子的taskinfo信息给GE,图编译完成之后生成适配昇腾AI处理器的离线模型文件(*.om)。