CANN 组织链接: https://atomgit.com/cann
metadef 仓库链接: https://gitcode.com/cann/metadef
1. metadef 在 CANN 架构中的基础定义角色
在昇腾 CANN(Compute Architecture for Neural Networks)异构计算架构中,metadef(元数据定义) 模块处于计算图层级与硬件抽象层级之间的核心衔接位置。该仓库定义了 CANN 系统中所有计算图节点、算子原型、张量属性以及执行描述符的基础数据结构。
metadef 的核心职能是提供一套统一的"元语言",使得上层深度学习框架(如 PyTorch、TensorFlow、MindSpore)生成的逻辑计算图能够被准确地转换为昇腾硬件可识别的中间表示(IR)。它确保了不同组件(如 Graph Engine, Compiler, Runtime)之间在传递模型结构和数据描述时,具备强一致性的语义理解。
2. 计算图与算子原型的中间表示(IR)
metadef 定义了计算图(Graph)和算子(Operator)的抽象类及其操作接口。这是实现全图优化和自动化编译的基础。
2.1 算子描述符(OpDef)与抽象模型
算子是计算图的最小执行单元。metadef 通过算子原型定义了算子的输入、输出以及属性(Attributes):
- 输入输出定义: 规定了算子所期望的张量数量、名称以及可选性。这种静态定义允许图编译器在编译阶段进行算子连接的正确性校验。
- 属性系统: 算子往往具有影响其行为的参数(如卷积的 Stride、Padding)。metadef 提供的属性系统支持多种数据类型(整型、浮点型、列表、字符串等)的存储与序列化,确保算子配置信息在图变换过程中不丢失。
2.2 计算图拓扑结构的建模
计算图被建模为有向无环图(DAG)。metadef 提供了节点(Node)和边(Edge)的元数据抽象:
- 节点连接: 定义了算子节点之间的输入输出关联。
- 子图处理: 支持嵌套图(Subgraph)的定义,这对于处理 Transformer 模型中的控制流(如 Conditional, Loop)至关重要。
3. 张量元数据(Tensor Metadata)与数据排布
张量是数据的载体,metadef 对张量的描述符进行了多维度的建模,以适配异构硬件对内存布局的特殊要求。
3.1 形状(Shape)与数据类型
- 动态维度支持: metadef 的 Shape 定义支持固定维度和动态维度。在动态形状算子开发中,metadef 提供的 Shape 接口允许描述未知的维度信息,为后期的运行时推导提供元数据支撑。
- 精度表示: 定义了完善的数据类型系统,涵盖 FP32, FP16, BF16, INT8, INT4, Complex 等,确保数据在不同算子间传递时的精度一致性。
3.2 内存布局格式(Format)
异构硬件对访存效率高度敏感。metadef 定义了丰富的内存排布格式:
- 基础格式: 如 NCHW, NHWC,适配前端框架。
- 硬件私有格式: 如 NC1HWC0。这种格式是昇腾 NPU 实现高性能卷积计算的关键,通过将通道维度进行分块(C0 维度通常为 16),使得数据能够以符合 Cube Unit 计算模式的方式进入片上缓冲区。metadef 定义了这些格式的转换逻辑标识,指导图引擎插入转换算子(TransData)。
4. 算子注册机制与 Tiling 数据定义
为了实现算子的可扩展性,metadef 提供了一套标准的注册接口和执行信息载体。
4.1 算子原型注册(OpRegister)
开发者通过 metadef 提供的注册宏,将自定义算子的原型信息注入系统。注册过程不仅告知系统算子的存在,还绑定了算子的形状推导(InferShape)函数。这使得图编译器可以在不加载实际算子实现的情况下,提前计算出全图的内存需求和张量流转路径。
4.2 Tiling 数据的结构化承载
在高性能算子开发(如 Ascend C 开发)中,Tiling 策略决定了计算任务的分块方案。metadef 定义了 Tiling 数据的标准结构,用于在图编译器(生成 Tiling 参数)和运行时核函数(解析 Tiling 参数)之间传递决策信息。这种定义确保了计算逻辑与调度策略的解耦。
5. 异构系统互操作机制
metadef 的设计考虑了跨进程、跨设备的互操作需求。
5.1 序列化与反序列化
为了支持离线模型(OM 文件)的存储与加载,metadef 集成了基于特定协议的序列化机制。计算图的拓扑结构、算子权重以及所有的元数据描述都可以被转换为二进制流。这保证了模型在 Host 侧编译后,可以被 Device 侧的加载引擎准确复原。
5.2 版本兼容性控制
在软件栈演进过程中,元数据结构的变更不可避免。metadef 通过版本标记和兼容性处理逻辑,确保旧版本的模型定义可以在新版本的 CANN 软件栈上运行,或提供明确的升级指引,保证了生产环境的稳定性。
6. 总结
metadef 仓库通过对计算图、算子、张量及 Tiling 信息的标准化定义,为 CANN 平台构建了稳固的元数据基石。它不仅是图引擎进行逻辑优化的依据,也是开发者构建自定义算子的协议标准。深入理解 metadef 的数据结构与接口,有助于开发者掌握 CANN 架构中数据流与控制流的底层交互机制,从而实现更高效的模型编译与算子开发。
CANN 组织链接: https://atomgit.com/cann
metadef 仓库链接: https://gitcode.com/cann/metadef