CANN 组织链接: https://atomgit.com/cann
metadef 仓库链接: https://gitcode.com/cann/metadef
1. metadef 在异构图执行体系中的协议标准作用
在 CANN 异构计算软件栈中,所有的计算逻辑最终都会转化为图执行任务。metadef(元数据定义) 模块不仅定义了静态的算子属性,更承载了计算图在图编译器(Graph Engine, GE)和底层执行器(Runtime)之间传递的核心协议。它是昇腾 AI 处理器能够理解并执行复杂计算图的数据结构基础。
metadef 的设计逻辑在于实现逻辑图描述与物理执行策略的彻底解耦。它为开发者提供了一套标准化的中间表示层(Intermediate Representation),使得模型在经历算子融合、多流并行、内存复用等优化过程中,始终保持元数据定义的完备性和一致性。
2. 动态形状(Dynamic Shape)的元数据管理机制
随着大语言模型和变长序列处理任务的增加,动态形状支持成为计算架构的核心需求。metadef 在此场景下提供了精细化的元数据描述手段。
2.1 动态维度(Dynamic Dimensions)的逻辑定义
在 metadef 的张量定义中,形状(Shape)不再局限于固定数值。
- 未知维度标识: metadef 允许将张量的特定维度标记为特定的标识符(如 -1),代表该维度在图编译阶段是未知的,其具体数值将在运行时通过执行流获取。
- 形状约束描述: 对于某些算子,不同张量间的维度可能存在约束关系(如矩阵乘法的 K K K 轴对齐)。metadef 通过属性系统支持存储这些约束元数据,使得图引擎可以在编译阶段提前规划出适配多种形状的内存池。
2.2 运行时推导接口与元数据更新
当动态图在设备侧执行时,每个算子的输出形状必须根据实际输入动态更新。metadef 定义了标准化的运行时形状推导接口。
- 依赖传递逻辑: 图引擎根据 metadef 中定义的算子原型,自动建立节点间的形状依赖链。当输入张量的实际形状发生变化时,这一元数据会沿着图中定义的边进行传播。
- Tiling 参数的动态刷新: metadef 定义的元数据结构允许将运行时的形状数据实时注入算子的 Tiling 计算函数,从而在设备侧生成最贴合当前数据规模的计算分块策略。
3. 图编译器(GE)与 metadef 的接口规范
图编译器 GE 是利用计算图优化模型执行效率的关键组件。GE 对计算图的所有操作都严格遵循 metadef 定义的接口规范。
3.1 算子融合(Op Fusion)中的元数据整合
在进行算子融合(如卷积与激活函数融合)时,GE 会利用 metadef 的 IR 定义创建一个新的融合节点。
- 属性合并: metadef 提供的属性操作接口允许 GE 将原始两个算子的属性(如卷积核大小和激活函数类型)提取并整合到融合节点的属性列表中。
- 输入输出重映射: 融合操作会消除中间张量的描述。GE 调用 metadef 的连接接口,将第一个算子的输入和第二个算子的输出重新绑定到融合节点上,确保逻辑语义的完整性。
3.2 内存复用(Memory Reuse)的静态推导依据
GE 的内存规划引擎依赖 metadef 提供的张量生命周期元数据。
- 张量大小推导: 基于 metadef 定义的数据类型位宽和形状信息,GE 计算出每个节点的内存需求。
- 偏置地址分配: metadef 定义的执行描述符中包含了偏移量(Offset)字段。GE 根据全图优化结果填充这些字段,确保在模型下沉执行时,硬件可以直接根据这些偏移量在预分配的内存池中定位数据。
4. 离线模型(OM)的序列化执行机制
CANN 架构的一大特点是支持离线执行。metadef 的序列化机制是离线模型(OM 文件)生成的底层支撑。
4.1 二进制序列化协议(Buffer Serialization)
为了实现在 Host 侧编译、在 Device 侧独立执行,metadef 开发了一套高效的二进制序列化协议。
- IR 图的持久化: 计算图的拓扑结构被转换为紧凑的二进制流。metadef 确保了所有的算子原型、节点属性和子图关系都以硬件中立的方式存储。
- 权重与参数对齐: metadef 在序列化过程中考虑了硬件的访存限制,对权重数据和常量张量进行内存对齐处理,确保离线模型加载后即可实现零拷贝(Zero-copy)执行。
4.2 反序列化与模型下沉(Model Sinking)
在加载离线模型时,设备侧的执行器利用 metadef 提供的反序列化接口重建逻辑执行图。
- 任务序列(Task Sequence)生成: 执行器读取元数据定义,将逻辑算子映射为具体的硬件任务任务。
- 全图下沉执行: 归功于 metadef 定义的完备性,Host 侧不再需要参与模型执行过程中的控制流判断。NPU 侧的硬件调度器可以直接根据元数据描述的依赖关系,在设备本地完成数千个 Step 的循环迭代。
5. 异构系统下的算子互操作与转换
metadef 充当了异构软件环境之间的"通用语",支持模型从框架层到硬件层的平滑转换。
5.1 框架适配层(Framework Adapter)的转换机制
当 PyTorch 或 TensorFlow 的模型输入 CANN 系统时,Adapter 会调用 metadef 的 API 构建逻辑图。
- 算子映射表: Adapter 通过 metadef 提供的原型查询接口,将框架原生的算子映射为 NPU 对应的 IR 算子。
- 属性转换逻辑: 不同框架对同一属性(如 Padding)的定义可能不同。metadef 的属性系统支持中间转换逻辑,确保数学语义在转换到 NPU 侧后依然保持一致。
5.2 跨设备通信描述符
在分布式训练场景中,集合通信算子(如 AllReduce)的参数也通过 metadef 进行定义。
- 拓扑感知定义: metadef 扩展了对分布式通信域和 Rank ID 的元数据描述能力。这使得图引擎在编译阶段可以将计算图切割为多个子图,并为每个设备生成特定的、带有通信元数据定义的执行描述符。
6. 总结
metadef 作为 CANN 架构的元数据核心,通过动态形状描述、图优化接口和高效的序列化协议,为昇腾 AI 处理器的图编译器和执行引擎提供了坚实的逻辑基础。它不仅规范了数据排布和算子行为,更在内存复用、模型下沉和多设备协同等高级特性中发挥着不可替代的协议载体作用。对于算子开发者和系统集成商而言,metadef 是理解异构计算软硬件协同工作流的关键入口。
CANN 组织链接: https://atomgit.com/cann
metadef 仓库链接: https://gitcode.com/cann/metadef