简介
本文介绍如何将开源框架的网络模型(如Caffe、TensorFlow等)以及Ascend IR定义的单算子描述文件(json格式),通过ATC(Ascend Tensor Compiler)将其转换成昇腾AI处理器支持的离线模型,模型转换过程中可以实现算子调度的优化、权值数据重排、内存使用优化等,可以脱离设备完成模型的预处理。
工具功能架构
ATC工具功能架构如图2-1所示。从图2-1中可以看出,用户可以将开源框架网络模型或Ascend IR定义的单算子描述文件通过ATC工具转换成适配昇腾AI处理器的离线模型,其中开源框架网络模型转换后的离线模型可用于执行推理业务,单算子描述文件转换后的离线模型可以用于执行单算子功能验证业务。用于也可以将开源框架网络模型转换后的离线模型转成json文件,方便文件查看,也可以直接将开源框架网络模型通过ATC工具转成json文件。
关键概念
- AIPP
AIPP(AI Pre Process)是昇腾AI处理器提供的硬件图像预处理模块,包括色域转换,图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)等功能。
- YUV420SP
有损图像颜色编码格式,常用为YUV420SP_UV、YUV420SP_VU两种格式。
- 知识库
存储auto tune调优后的Schedule,在后续算子编译中直接使用。
- cost model
评估器,auto tune过程中如果没有命中知识库,则通过cost model评估tiling空间中tiling的优劣,选择最优tiling数据。
- 数据排布格式(format)
在深度学习框架中,多维数据通过多维数组存储,比如卷积神经网络的特征图用四维数组保存,四个维度分别为批量大小(Batch,N)、特征图高度(Height,H)、特征图宽度(Width,W)以及特征图通道(Channels,C)。
由于数据只能线性存储,因为这四个维度有对应的顺序。不同深度学习框架会按照不同的顺序存储特征图数据,比如Caffe,排列顺序为[Batch,Channels,Height,Width],即NCHW。Tensorflow中,排列顺序为[Batch,Height,Width,Channels],即NHWC。
如图2-3所示,以一张格式为RGB的图片为例,NCHW实际存储的是“RRRRRRGGGGGGBBBBBB”,同一通道的所有像素值顺序存储在一起,而NHWC实际存储的则是“RGBRGBRGBRGBRGBRGB”,多个通道的同一位置的像素值顺序存储在一起。
昇腾AI软件栈中,为了提高数据访问效率,所有张量数据统一采用NC1HWC0的五维数据格式。其中C0与微架构强相关,等于AI Core中矩阵计算单元的大小,对于FP16类型为16,对于INT8类型则为32,这部分数据需要连续存储;C1=C/C0。如果结果不整除,向上取整。
例如,将NHWC -> NC1HWC0的转换过程为:
- 将NHWC数据在C维度进行分割,变成C1份NHWC0。
- 将C1份NHWC0在内存中连续排列,由此变成NC1HWC0。
NHWC->NC1HWC0的转换场景示例:- 首层RGB图像通过AIPP转换为NC1HWC0格式。
- 中间层Feature Map每层输出为NC1HWC0格式,在搬运过程中需要重排。