news 2026/9/10 2:07:12

CANN/ge编译Graph为离线模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/ge编译Graph为离线模型

编译Graph为离线模型

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

本节给出将Graph编译为om离线模型涉及的主要接口以及调用示例。

功能介绍

将Graph编译为离线模型涉及的主要接口为:

  1. Graph定义完成后,调用aclgrphBuildInitialize进行系统初始化,申请系统资源。
  2. 调用aclgrphBuildModel将Graph编译为适配AI处理器的离线模型,编译过程中会加载内置算子库和自定义算子库。此时模型保存在内存缓冲区中。
  3. (可选)如果希望将内存缓冲区中的模型保存为离线模型文件*.om,可以调用aclgrphSaveModel,序列化保存离线模型到文件中。
  4. 调用aclgrphBuildFinalize结束进程,释放系统资源。

当前支持在一个进程中连续调用模型编译和模型文件保存接口,用于编译和保存多个离线模型。

开发示例

  1. 包含的头文件。

    #include "ge_ir_build.h" #include "ge_api_types.h"
  2. 申请资源。

    创建完Graph以后,通过aclgrphBuildInitialize接口进行系统初始化,并申请资源。示例代码如下:

    std::map<AscendString, AscendString> global_options = { {ge::ir_option::SOC_VERSION, "${soc_version}"}, }; auto status = aclgrphBuildInitialize(global_options);

    可以通过传入global_options参数配置离线模型编译初始化信息,当前支持的配置参数请参见aclgrphBuildInitialize支持的配置参数。

    若当前环境中不存在AI处理器时,SOC_VERSION为必选配置,用于指定目标芯片版本,值${soc_version}需要根据实际情况替换。其他参数请用户根据实际需要可选配置。

  3. 通过aclgrphBuildModel接口将Graph编译为离线模型。示例代码如下:

    ModelBufferData model; std::map<AscendString, AscendString> options; PrepareOptions(options); ge::Graph graph; status = aclgrphBuildModel(graph, options, model); if(status == GRAPH_SUCCESS) { cout << "Build Model SUCCESS!" << endl; } else { cout << "Build Model Failed!" << endl; }

    可以通过传入options参数配置离线模型编译配置信息,当前支持的配置参数请参见aclgrphBuildModel支持的配置参数。配置举例:

    void PrepareOptions(std::map<AscendString, AscendString>& options) { options.insert({ {ge::ir_option::EXEC_DISABLE_REUSED_MEMORY, "1"} // close reuse memory }); }

    [!NOTE]说明

    使用aclgrphBuildModel接口传入options参数时,多张图场景下,如果传入的参数为ge::ir_option::PRECISION_MODE或者ge::ir_option::PRECISION_MODE_V2,多张图设置的参数值需要相同。

  4. (可选)也可以通过aclgrphSaveModel将内存缓冲区中的模型保存为离线模型文件。示例代码如下:

    status = aclgrphSaveModel("ir_build_sample", model); if(status == GRAPH_SUCCESS) { cout << "Save Offline Model SUCCESS!" << endl; } else { cout << "Save Offline Model Failed!" << endl; }
  5. 构图进程结束时,通过aclgrphBuildFinalize接口释放资源。示例代码如下:

    aclgrphBuildFinalize();

后续步骤

  • 如果上述编译生成的是om离线模型:

    后续进行推理业务,需要使用从文件中加载模型的接口,例如aclmdlLoadFromFile,然后使用aclmdlExecute接口执行推理。

  • 如果上述编译生成的离线模型保存在内存缓冲区:

    后续进行推理业务时,需要使用从内存中加载模型的接口,例如aclmdlLoadFromMem,然后使用aclmdlExecute接口执行推理。

接口详细介绍请参见《应用开发 (C&C++)》中的“模型推理”章节。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 2:04:29

数据积木:从标准化到可复用的数据体系建设方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 2:02:42

KMP算法详解:从暴力匹配到高效字符串匹配的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 2:01:53

PHP Telegram Bot测试驱动开发:编写高质量机器人代码的完整流程

PHP Telegram Bot测试驱动开发&#xff1a;编写高质量机器人代码的完整流程 想要构建稳定可靠的Telegram机器人吗&#xff1f;测试驱动开发&#xff08;TDD&#xff09;是确保PHP Telegram Bot代码质量的关键方法。通过先写测试再写实现&#xff0c;你可以创建出更健壮、更易维…

作者头像 李华
网站建设 2026/9/10 2:00:39

CANN/ge图编译缓存功能

图编译缓存 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端…

作者头像 李华