昇腾社区首页
中文
注册
开发者
下载

GE的工作原理

图构建

GE提供了两种构图方式:

  • onnx/pb等模型图模式执行:用户通过ATC命令行工具或者C++语言的Parser接口,通过前端框架算子逐一映射成CANN算子,从而将框架模型文件(如*.onnx和*.pb等格式)解析成Ascend IR表示的计算图。
    图1 Parser解析计算图

    ATC命令行工具详细说明请参见ATC离线模型编译工具用户指南

    使用C++语言的Parser接口图模式执行请参见使用Parser接口将原始模型解析为Graph

  • 使用图开发接口全新构建Graph:用户通过构图接口,将计算函数(算子)进行组合,构建成Ascend IR表示的计算图。下图展示了图构建的基本过程,详细过程可参考使用图开发接口全新构建Graph
    图2 全新构建计算图

图编译与图优化

对于Ascend IR表示的计算图,GE适配底层硬件运行要求进行一系列的编译优化、编译生成om格式的离线模型,主要过程包括:

  • 图准备:根据算子的输入张量信息、算子逻辑及算子属性等信息,提前推理出算子的输出张量描述,包括张量的形状、数据类型及数据排布格式等信息,算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销,此过程通常称之为inferShapeAndType、inferFormat。同时进行与硬件无关的、算法层级的优化,包括但不限于常量折叠、冗余分支消除等。
  • 图拆分:根据执行引擎(AI Core/AI CPU等)对算子分类,拆分形成不同的子图,方便后续在不同的硬件上进行针对性优化。
  • 图优化:通过算子融合等图优化手段提升图的执行性能。可以进行和硬件无关的优化,比如将多个算子融合成1个或几个算子,节省计算时间;或者进行与硬件相关的优化,比如通过UB融合缩短数据在硬件内存上的搬运时间,从而提升执行效率。
  • 图编译:根据计算图分配运行资源,包括内存分配、stream资源分配等,并编译生成.om离线模型。

图加载与图执行

加载编译生成的离线模型文件,完成真实运行资源分配,并将stream/task下发到Device上执行,主要过程包括:

  • 图加载:解析离线模型,分配真实的内存、创建stream运行资源。
  • 图执行:拷贝输入数据;将stream/task下发到Device,由AI Core/AI CPU等执行对应的算子;Device计算完成后,返回给Host用户程序。