ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CANN/ge - ATC概述

2026/9/10 1:42:14 拓冰建站 浏览量
CANN/ge - ATC概述 ATC概述【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/geATC工具介绍介绍ATC工具的功能架构以及使用ATC工具过程中遇到的一些术语或者缩略语。ATC简介昇腾张量编译器Ascend Tensor Compiler简称ATC是异构计算架构CANN体系下的模型转换工具它可以将开源框架的网络模型以及Ascend IR定义的单算子描述文件JSON格式转换为AI处理器支持的.om格式离线模型。其功能架构如图1所示。模型转换过程中ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作对原始的深度学习模型进行进一步的调优从而满足部署场景下的高性能需求使其能够高效执行在AI处理器上。图 1ATC工具功能架构 ![图示](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/atc_tool_func_architecture.png ATC工具功能架构?utm_sourcegitcode_repo_files)其中开源框架网络模型场景开源框架网络模型经过Parser解析后转换为中间态IR Graph。中间态IR经过图准备、图拆分、图优化、图编译等一系列操作后转成适配AI处理器的离线模型此处图指网络模型拓扑图。转换后的离线模型上传到板端环境通过模型加载接口加载模型文件再调用模型执行接口实现推理过程详细流程请参见《应用开发 (CC)》中的“模型推理”章节。单算子描述文件场景Ascend IR定义的单算子描述文件JSON格式通过ATC工具进行单算子编译后转成适配AI处理器的单算子离线模型然后上传到板端环境通过单算子模型加载接口加载单算子模型文件用于验证单算子功能详细流程请参见单算子模型执行。关于单算子描述文件的详细配置说明请参见单算子模型转换章节。关键概念GEGraph Engine图引擎是计算图编译和运行的控制中心提供图优化、图编译管理以及图执行控制等功能。GE通过统一的图开发接口提供多种AI框架的支持不同AI框架的计算图可以实现到Ascend图的转换。原图优化时GE内部会进行整图优化。YUV420SP有损图像颜色编码格式常用为YUV420SP_UV、YUV420SP_VU两种格式。数据排布格式FormatFormat为数据的物理排布格式定义了解读数据的维度比如1D、2D、3D、4D、5D等。NCHW和NHWC在深度学习框架中多维数据通过多维数组存储比如卷积神经网络的特征图Feature Map通常用四维数组保存即4D4D格式解释如下NBatch数量例如图像的数目。HHeight特征图高度即垂直高度方向的像素个数。WWidth特征图宽度即水平宽度方向的像素个数。CChannels特征图通道例如彩色RGB图像的Channels为3。由于数据只能线性存储因此这四个维度有对应的顺序。不同深度学习框架会按照不同的顺序存储特征图数据比如Caffe排列顺序为[Batch, Channels, Height, Width]即NCHWTensorFlow中排列顺序为[Batch, Height, Width, Channels]即NHWC。如图2所示以一张格式为RGB的图片为例NCHW中C排列在外层每个通道内像素紧挨在一起实际存储的是“RRRRRRGGGGGGBBBBBB”即同一通道的所有像素值顺序存储在一起而NHWC中C排列在最内层每个通道内像素间隔挨在一起实际存储的则是“RGBRGBRGBRGBRGBRGB”即多个通道的同一位置的像素值顺序存储在一起。图 2NCHW和NHWC![](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/nchw_and_nhwc.png NCHW和NHWC?utm_sourcegitcode_repo_files)NC1HWC0AI处理器中为了提高通用矩阵乘法GEMM运算数据块的访问效率所有张量数据统一采用NC1HWC0的五维数据格式。其中C0与微架构强相关是一个矩阵单元处理单边数据量一个矩阵单元处理32B*32B的数据单边是32B例如数据类型为float162字节时C032/216数据类型为float324字节时C032/48。C1(CC0-1)/C0如果结果不整除向下取整。NHWC/NCHW - NC1HWC0的转换过程为将数据在C维度进行分割变成C1份NHWC0/NC0HW再将C1份NHWC0/NC0HW在内存中连续排列成NC1HWC0其格式转换示意图如下图所示。图 3NC1HWC0![](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/nc1hwc0.png NC1HWC0?utm_sourcegitcode_repo_files)NHWC - NC1HWC0的转换公式如下 Tensor.reshape( [N, H, W, C1, C0]).transpose( [0, 3, 1, 2, 4] ) NCHW - NC1HWC0的转换公式如下 Tensor.reshape( [N, C1, C0, H, W]).transpose( [0, 1, 3, 4, 2] ) FRACTAL_ZFRACTAL_Z是用于定义卷积权重的数据格式由FT MatrixFTFilter卷积核变换得到。FRACTAL_Z是送往Cube的最终数据格式采用“C1HW,N1,N0,C0”的4维数据排布。数据有两层Tiling如下图所示第一层与Cube的Size相关数据按照列的方向连续小n第二层与矩阵的Size相关数据按照行的方向连续大Z。例如HWCN (2, 2, 32, 32)将其变成FRACTAL_Z( C1HW, N1, N0, C0 ) (8, 2, 16, 16)。HWCN变换FRACTAL_Z的过程为Tensor.padding([ [0,0], [0,0], [0,(C0–C%C0)%C0], [0,(N0–N%N0)%N0] ]).reshape( [H, W, C1, C0, N1, N0]).transpose( [2, 0, 1, 4, 5, 3] ).reshape( [C1*H*W, N1, N0, C0])NCHW变换FRACTAL_Z的过程为Tensor.padding([ [0,(N0–N%N0)%N0], [0,(C0–C%C0)%C0], [0,0], [0,0] ]).reshape( [N1, N0, C1, C0, H, W,]).transpose( [2, 4, 5, 0, 1, 3] ).reshape( [C1*H*W, N1, N0, C0])FRACTAL_NZFRACTAL_NZ是分形格式如Feature Map的数据存储在cube单元计算时输出矩阵的数据格式为NW1H1H0W0。整个矩阵被分为H1*W1个分形按照column major排布形状如N字形每个分形内部有H0*W0个元素按照row major排布形状如z字形。考虑到数据排布格式将NW1H1H0W0数据格式称为Nz大N小z格式。其中H0,W0表示一个分形的大小示意图如下所示ND – FRACTAL_NZ的变换过程为(..., N, H, W )-pad-(..., N, H1*H0, W1*W0)-reshape-(..., N, H1, H0, W1, W0)-transpose-(..., N, W1, H1, H0, W0)调用流程ATC工具运行前需要准备环境和模型本节给出ATC工具的运行流程以及和各组件的交互流程。运行流程运行流程如图1所示。图 1运行流程 ![](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/runtime_flow.png 运行流程?utm_sourcegitcode_repo_files)使用ATC工具之前请先在开发环境安装CANN软件包获取相关路径下的ATC工具然后设置环境变量详细说明请参见准备环境。准备要进行转换的模型或单算子描述文件并上传到开发环境。单算子描述文件相关配置请参见单算子模型转换。使用ATC工具进行模型转换模型转换过程中使用的参数请参见参数说明。模型转换交互流程下面以开源框架网络模型转换为om离线模型为例详细介绍模型转换过程中与周边模块的交互流程。根据网络模型中算子计算单元的不同分为AI Core算子和AI CPU算子AI Core算子是指在AI处理器的核心计算单元上执行的算子而AI CPU算子则是在AI CPU计算单元上执行的算子。在AI Core算子、AI CPU算子的模型转换交互流程中虽然都涉及图准备、图拆分、图优化、图编译等节点但由于两者的计算单元不同因此涉及交互的内部模块也有所不同请参见下图。关于算子类型、基本概念等详细介绍请参见《Ascend C算子开发指南》或《TBEAI CPU算子开发》选择一种支持的方式即可。如果用户使用的网络模型中有自定义算子也请优先参见上述手册开发部署好自定义算子模型转换时会优先去查找自定义算子库匹配模型文件中的算子若匹配失败则会去查找内置算子库。模型转换过程中若遇到AI CPU算子不支持某种数据类型导致编译失败的场景可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型从而实现网络的快速打通详细流程请参见开启AI CPU Cast算子自动插入特性。AI Core算子模型转换交互流程图 2AI Core算子模型转换交互流程 ![](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/ai_core_op_model_conv_flow.png AI-Core算子模型转换交互流程?utm_sourcegitcode_repo_files)调用框架Parser功能将主流框架的模型格式转换成CANN模型格式。图准备阶段该阶段会完成原图优化以及Infershape推导设置算子输出的shape和dtype等功能。图拆分阶段GEGraph Engine图引擎根据引擎拆分多个子图。图优化阶段GE将拆分后的子图进行优化优化时按照当前子图流程对AI Core算子进行预编译和UBUnified Buffer融合然后根据算子信息库中算子信息找到算子实现将其编译成算子kernel算子的*.o与*.json最后将优化后子图返回给GE。优化后的子图合并为整图再进行整图优化。Ascend 950PR/Ascend 950DT不支持UB融合。图编译阶段GE进行图编译包含内存分配、流资源分配等图编译完成之后生成适配AI处理器的离线模型文件*.om。AI CPU算子模型转换交互流程IPV350不支持AI CPU相关特性。图 3AI CPU算子模型转换交互流程 ![](https://raw.gitcode.com/cann/ge/raw/a67f6ec35ec66842d35cb5db9c8d9a4c34d31086/docs/zh/user_guides/atc_tools/figures/ai_cpu_op_model_conv_flow.png AI-CPU算子模型转换交互流程?utm_sourcegitcode_repo_files)调用框架Parser功能将主流框架的模型格式转换成CANN模型格式。图准备阶段该阶段会完成算子基本参数校验以及Infershape推导设置算子输出的shape和dtype等功能。另外GE将整图下发给AI CPU EngineAI CPU Engine读取算子信息库匹配算子支持的format并将format返回给GE。图拆分阶段GE根据引擎拆分多个子图。图优化阶段GE将拆分后的子图下发给AI CPU EngineAI CPU Engine进行子图优化并将优化后子图返回给GE。优化后的子图合并为整图再进行整图优化。图编译阶段GE进行图编译包含内存分配、流资源分配等并向AI CPU Engine发送genTask请求AI CPU Engine返回算子的taskinfo信息给GE图编译完成之后生成适配AI处理器的离线模型文件*.om。【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考