metadef

🔥Latest News

  • [2025/12/26] metadef项目首次上线。

🚀概述

metadef,即昇腾元数据定义,用于定义相关数据结构以及对外接口。

在 CANN 架构中的位置

metadef 是 CANN(Compute Architecture for Neural Networks)平台的基础组件仓,为ge(Graph Engine)和算子仓库(ops-nnops-mathops-transformerops-cv)等上层组件提供共享的基础数据结构和接口。

flowchart TD
    App[Application Layer<br/>MindSpore, PyTorch, TensorFlow]
    subgraph Ops[Operator Repositories]
        OpsNN[ops-nn<br/>ops-math<br/>ops-transformer<br/>ops-cv]
    end
    GE[ge]
    Other[other components]
    MetaDef[metadef<br/>Base Library<br/>共享的基础数据结构和接口]

    App --> Ops
    App --> GE
    App --> Other
    Ops --> MetaDef
    GE --> MetaDef
    Other --> MetaDef

metadef 提供的核心功能

功能 说明 使用场景
基础数据类型 定义 Tensor、Shape、DataType、Format 等基础数据结构 图编译、算子开发、运行时执行
算子注册接口 提供算子类型、属性、Tiling函数等注册机制 开发自定义算子
执行上下文 提供算子执行时的上下文构建接口 算子基础设施开发
属性/类型定义 定义算子属性、类型工具等通用工具 算子类型推导、格式转换

什么时候需要修改 metadef?

通常情况下,开发者不需要直接修改 metadef 仓,因为:

  1. ge 和 ops 已有成熟的上层接口:多数场景下,开发者通过 ge 或 ops 的接口即可完成开发
  2. ABI 兼容性要求:metadef 的接口变更需要保持 ABI 兼容,随意修改可能导致其他组件无法正常工作

需要修改 metadef 的典型场景

  • 新增公共基础类型:当 ge 和 ops 都需要某种新的基础数据类型时
  • 扩展算子注册能力:需要支持新的算子注册特性时
  • 修复公共接口问题:发现基础数据类型或接口有缺陷时
  • 跨仓协作需求:多个组件需要统一的接口实现

注意:修改 metadef 前,请务必:

  1. 在 ge 或 ops 仓验证需求确实存在
  2. 评估对其他组件的影响
  3. 保持 ABI 兼容性
  4. 充分测试相关依赖组件

⚡️快速开始

若您希望快速构建本项目,请访问源码构建,了解如何编译、安装本项目,并进行基础测试验证。

📖 学习教程

开发者指南

如果您需要修改或扩展 metadef,请遵循以下步骤:

开发流程

graph LR
    A[需求分析 来自ge/ops公共需求] --> B[设计接口 保持ABI兼容]
    B --> C[实现代码 inc/头文件]
    C --> D[编写单元测试 tests目录]  
    D --> E[本地构建验证 bash build.sh]
    E --> F[提交PR 关联ge/ops验证]

代码修改检查清单

在提交 metadef 修改前,请确保:

  • 修改源自 ge 或 ops 的真实需求(而非个人偏好)
  • 保持对外接口的 ABI 兼容性
  • 新增了相应的单元测试
  • 所有测试通过(bash tests/run_test.sh -u
  • 更新了相关文档(docs/api/README.md)
  • Commit message 遵循 Conventional Commits 规范

详细 API 参考

若您希望更详细地了解本仓的所有接口,请访问API参考

📝相关信息