CANN/ge C++ ES API兼容性设计
RFC-001: C ES API 兼容性设计【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge概述和目标背景在 ES (Eager Style) 构图中为了保证 C ES API 的向后 API 兼容性生成工具需要掌握不同商发版本的 IR 原型演进情况。历史原型库负责沉淀并提供这些历史原型数据供gen_esb在生成阶段对比差异、生成重载接口。目标建立历史原型库协议实现跨版本算子 IR 原型信息的归档和查询设计 C ES API 的重载生成机制确保向后兼容性解决重载接口的二义性问题提供清晰的用户调用语义建立完整的生成、发布、消费流程详细设计历史原型库协议设计详细设计参考历史原型库协议文档关键设计要点定位与职责历史原型库是一套长期维护的协议与数据产物用于跨版本归档算子 IR 原型信息目录结构按算子分包组织包含版本索引、元信息和算子原型数据数据格式采用 JSON 格式包含最小字段集确保向后兼容生成与发布由gen_esb --extract-history生成随 Ops run 包发布消费方式通过文件系统接口读取服务于ES或者其他场景C API 兼容性设计详细设计参考C API 兼容性设计文档关键设计要点模块架构与职责划分历史原型库模块负责存储和管理历史原型数据Ops组件gen_esb 工具模块负责数据生成、读取、业务逻辑和代码生成GE组件重载生成与二义性处理核心问题C 默认参数必须在参数列表末尾的限制EsTensorLike支持标量类型隐式转换导致的二义性数据流与构建流程商发版本构建同时生成 C 重载接口和历史原型库数据非商发构建仅生成 C 重载接口工程-算子-GE 三方配合通过编译宏传递信息统一打包发布实现计划阶段一接口对齐与基础模块开发1周M0阶段0.5天数据结构定义与接口对齐第1周基础模块开发包括公共提取器、历史数据读写器阶段二核心功能开发1周第2周重载规划器、二义性检测器、C生成器对接阶段三集成联调1周第3周端到端测试、边界场景验证总预计耗时3~4周影响分析技术影响正向影响提供稳定的 C API 兼容性保障提升用户体验风险重载二义性处理复杂度较高需要严格的测试验证架构影响模块依赖增加历史原型库模块但职责边界清晰构建流程商发版本构建流程需要调整增加历史数据生成步骤兼容性影响向后兼容通过重载机制支持确保现有 API 调用不受影响维护成本协议维护需要长期维护历史原型库协议工具维护gen_esb工具需要持续维护重载生成逻辑替代方案方案B版本命名空间将不同版本 API 放到不同命名空间如ge::es与ge::es::v2优点完全避免重载二义性缺点用户调用习惯改变Runnable Dump 成本较高注Runnable Dump指的是将内存中的图对象 dump为构图的代码因此需要知道具体要写成什么样的构图代码方案对比维度方案A推荐方案B二义性风险低通过防呆机制无用户习惯稳定需要显式选择命名空间维护成本中等较高Dump 成本低高推荐方案A在保证兼容性的前提下最大程度保持用户调用习惯稳定。【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考