调用流程
ATC工具运行前需要准备环境和模型,本节给出ATC工具的运行流程以及和各组件的交互流程。
运行流程
运行流程如图1所示。
模型转换交互流程
下面以开源框架网络模型转换为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算子模型转换交互流程
- 调用框架Parser功能,将主流框架的模型格式转换成CANN模型格式。
- 图准备阶段:该阶段会完成原图优化以及Infershape推导(设置算子输出的shape和dtype)等功能。
- 图拆分阶段:GE(Graph Engine,图引擎)根据引擎拆分多个子图。
- 图优化阶段:GE将拆分后的子图进行优化,优化时按照当前子图流程对AI Core算子进行预编译和UB(Unified Buffer)融合,然后根据算子信息库中算子信息找到算子实现将其编译成算子kernel(算子的*.o与*.json),最后将优化后子图返回给GE。
优化后的子图合并为整图,再进行整图优化。
- 图编译阶段:GE进行图编译,包含内存分配、流资源分配等,图编译完成之后生成适配昇腾AI处理器的离线模型文件(*.om)。
- AI CPU算子模型转换交互流程
图3 AI CPU算子模型转换交互流程
- 调用框架Parser功能,将主流框架的模型格式转换成CANN模型格式。
- 图准备阶段:该阶段会完成算子基本参数校验以及Infershape推导(设置算子输出的shape和dtype)等功能。
另外,GE将整图下发给AI CPU Engine,AI CPU Engine读取算子信息库,匹配算子支持的format,并将format返回给GE。
- 图拆分阶段:GE根据引擎拆分多个子图。
- 图优化阶段:GE将拆分后的子图下发给AI CPU Engine,AI CPU Engine进行子图优化,并将优化后子图返回给GE。
- 图编译阶段:GE进行图编译,包含内存分配、流资源分配等,并向AI CPU Engine发送genTask请求,AI CPU Engine返回算子的taskinfo信息给GE,图编译完成之后生成适配昇腾AI处理器的离线模型文件(*.om)。
父主题: ATC简介