CANN/GE权重更新功能指南
2026/9/10 2:00:11 网站建设 项目流程

权重更新

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

对于权重更新的场景,为便于用户一次编译模型后,在模型执行阶段能动态更新权重,可通过本章节提供的接口实现该功能。

功能介绍

将权重可更新的Graph编译为离线模型,涉及的主要接口为:

  1. Graph定义完成后,调用aclgrphBuildInitialize进行系统初始化,申请系统资源。
  2. 调用aclgrphConvertToWeightRefreshableGraphs生成权重可更新的图,包括三部分:权重初始化图,权重更新图,推理图。
  3. 调用aclgrphBundleBuildModel将权重更新的Graph编译为适配AI处理器的离线模型,编译过程中会加载内置算子库和自定义算子库。此时模型保存在内存缓冲区中。
  4. 如果希望将内存缓冲区中的模型保存为离线模型文件xx.om,需要调用aclgrphBundleSaveModel,序列化保存离线模型到文件中。
  5. 调用aclgrphBuildFinalize结束进程,释放系统资源。

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

使用方法

// 包含的头文件: #include "ge_ir_build.h" #include "ge_api_types.h" // 1.生成Graph Graph origin_graph("Irorigin_graph"); GenGraph(origin_graph); // 2.创建完Graph以后,通过aclgrphBuildInitialize接口进行系统初始化,并申请资源 std::map<AscendString, AscendString> global_options; auto status = aclgrphBuildInitialize(global_options); // 3. 生成权重可更新的图,包括三部分:权重初始化图,权重更新图,推理图 // 权重初始化是可选步骤,根据业务场景由用户判断是否需要包含权重初始化图,不包含的情况下,可节省模型加载所需的Device内存 WeightRefreshableGraphs weight_refreshable_graphs; std::vector<AscendString> const_names; const_names.emplace_back(AscendString("const_1")); const_names.emplace_back(AscendString("const_2")); status = aclgrphConvertToWeightRefreshableGraphs(origin_graph, const_names, weight_refreshable_graphs); if (status != GRAPH_SUCCESS) { cout << "aclgrphConvertToWeightRefreshableGraphs failed!" << endl; aclgrphBuildFinalize(); return -1; } // 4.将权重可更新的图,编译成离线模型,并保存在内存缓冲区中 std::map<AscendString, AscendString> options; std::vector<ge::GraphWithOptions> graph_and_options; // 推理图 graph_and_options.push_back(GraphWithOptions{weight_refreshable_graphs.infer_graph, options}); // 权重初始化图 graph_and_options.push_back(GraphWithOptions{weight_refreshable_graphs.var_init_graph, options}); // 权重更新图 graph_and_options.push_back(GraphWithOptions{weight_refreshable_graphs.var_update_graph, options}); ge::ModelBufferData model; status = aclgrphBundleBuildModel(graph_and_options, model); if (status != GRAPH_SUCCESS) { cout << "aclgrphBundleBuildModel failed" << endl; aclgrphBuildFinalize(); return -1; } // 5.将内存缓冲区中的模型保存为离线模型文件 const char *file="./xxx" ; status = aclgrphBundleSaveModel(file, model); if (status != GRAPH_SUCCESS) { cout << "aclgrphBundleSaveModel failed" << endl; aclgrphBuildFinalize(); return -1; } // 6.构图进程结束,释放资源 aclgrphBuildFinalize();

后续步骤

上述权重更新后的图编译生成的离线模型,如果要进行推理业务,则必须通过aclmdlBundleLoadFromFile或aclmdlBundleLoadFromMem接口加载模型,然后使用aclmdlExecute接口执行推理,详细介绍请参见《应用开发 (C&C++)》中的“模型推理 > 权重更新”章节。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询