当前位置: 首页 > news >正文

CANN/ge C++ ES API兼容性设计

RFC-001: C++ ES API 兼容性设计

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

概述和目标

背景

在 ES (Eager Style) 构图中,为了保证 C++ ES API 的向后 API 兼容性,生成工具需要掌握不同商发版本的 IR 原型演进情况。历史原型库负责沉淀并提供这些历史原型数据,供gen_esb在生成阶段对比差异、生成重载接口。

目标

  1. 建立历史原型库协议,实现跨版本算子 IR 原型信息的归档和查询
  2. 设计 C++ ES API 的重载生成机制,确保向后兼容性
  3. 解决重载接口的二义性问题,提供清晰的用户调用语义
  4. 建立完整的生成、发布、消费流程

详细设计

历史原型库协议设计

详细设计参考:历史原型库协议文档

关键设计要点:

  • 定位与职责:历史原型库是一套长期维护的协议与数据产物,用于跨版本归档算子 IR 原型信息
  • 目录结构:按算子分包组织,包含版本索引、元信息和算子原型数据
  • 数据格式:采用 JSON 格式,包含最小字段集确保向后兼容
  • 生成与发布:由gen_esb --extract-history生成,随 Ops run 包发布
  • 消费方式:通过文件系统接口读取,服务于ES或者其他场景

C++ API 兼容性设计

详细设计参考:C++ API 兼容性设计文档

关键设计要点:

模块架构与职责划分
  • 历史原型库模块:负责存储和管理历史原型数据(Ops组件)
  • gen_esb 工具模块:负责数据生成、读取、业务逻辑和代码生成(GE组件)
重载生成与二义性处理

核心问题

  1. C++ 默认参数必须在参数列表末尾的限制
  2. EsTensorLike支持标量类型隐式转换导致的二义性
数据流与构建流程
  • 商发版本构建:同时生成 C++ 重载接口和历史原型库数据
  • 非商发构建:仅生成 C++ 重载接口
  • 工程-算子-GE 三方配合:通过编译宏传递信息,统一打包发布

实现计划

阶段一:接口对齐与基础模块开发(1周)

  • M0阶段(0.5天):数据结构定义与接口对齐
  • 第1周:基础模块开发,包括公共提取器、历史数据读写器

阶段二:核心功能开发(1周)

  • 第2周:重载规划器、二义性检测器、C++生成器对接

阶段三:集成联调(1周)

  • 第3周:端到端测试、边界场景验证

总预计耗时:3~4周

影响分析

技术影响

  • 正向影响:提供稳定的 C++ API 兼容性保障,提升用户体验
  • 风险:重载二义性处理复杂度较高,需要严格的测试验证

架构影响

  • 模块依赖:增加历史原型库模块,但职责边界清晰
  • 构建流程:商发版本构建流程需要调整,增加历史数据生成步骤

兼容性影响

  • 向后兼容:通过重载机制支持确保现有 API 调用不受影响

维护成本

  • 协议维护:需要长期维护历史原型库协议
  • 工具维护gen_esb工具需要持续维护重载生成逻辑

替代方案

方案B:版本命名空间

  • 将不同版本 API 放到不同命名空间(如ge::esge::es::v2
  • 优点:完全避免重载二义性
  • 缺点:用户调用习惯改变,Runnable Dump 成本较高

注:Runnable Dump指的是将内存中的图对象 dump为构图的代码,因此需要知道具体要写成什么样的构图代码

方案对比

维度方案A(推荐)方案B
二义性风险低(通过防呆机制)
用户习惯稳定需要显式选择命名空间
维护成本中等较高
Dump 成本

推荐方案A:在保证兼容性的前提下,最大程度保持用户调用习惯稳定。

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/782887/

相关文章:

  • 可解释AI(XAI)实践指南:从模型透明到业务可信
  • 网盘直链下载助手:九大主流网盘免登录高速下载解决方案
  • 离海数百公里,他们为孩子造了一片“海”
  • 长期使用Taotoken服务在API延迟与稳定性方面的实际感受分享
  • cann/cannbot-skills Kernel定义内存分配
  • CANN/ops-cv NMS掩码算子
  • AI应用上线前必做的5项安全验证:基于SITS2026标准的CI/CD嵌入式检测清单
  • 2026年北京全屋高端定制现代简约风格公司测评与选型指南
  • 泰山派3M-RK3576-系统开发与编译-Buildroot系统-编译内核
  • CANN运行时资源限制内核加载示例
  • Switch游戏文件管理神器:NSC_BUILDER让你告别格式混乱烦恼
  • test000009913
  • 对比多个模型 API 供应商后我为何选择 Taotoken 作为主用平台
  • 模型诊断与知识库调试:从冲突集到高效算法的工程实践
  • 网上祭祀平台哪个更便捷
  • Arm DynamIQ架构性能监控单元(PMU)设计与实战
  • N_m3u8DL-RE终极指南:三步搞定加密流媒体下载,永久保存你喜爱的视频内容
  • CANN/cann-recipes-infer SwigluClipQuant算子
  • CANN/pyasc MDL配置API文档
  • 泰山派3M-RK3576-系统功能-Buildroot-音频功能
  • CANN社区管理仓库
  • 【Vue3 + SVG 饼图组件单一数据类别显示异常问题】
  • CANN/ops-cv光栅化算子文档
  • 泰山派3M-RK3576-镜像烧录-成品镜像烧录
  • 吉林K式板房企业排行:5家合规供应商实测对比 - 奔跑123
  • CANN/pypto反量化函数文档
  • cann/cannbot-skills尾安全约束
  • 11.9k Star!Claude Code PPT 神器:本机一行命令,AI 出真还能编辑!
  • 2026新疆财务凭证纸厂家对比:绿色认证资质如何影响政企采购决策 - 优质企业观察收录
  • 一个人,一台电脑,月入翻倍:她如何用AI重构“旅行路书”?