编译Graph生成om离线模型
本节给出将Graph编译为om离线模型涉及的主要接口以及调用示例。
功能介绍
将Graph编译为离线模型涉及的主要接口为:
- Graph定义完成后,调用aclgrphBuildInitialize进行系统初始化,申请系统资源。
- 调用aclgrphBuildModel将Graph编译为适配昇腾AI处理器的离线模型,编译过程中会加载TBE内置算子库和自定义算子库。此时模型保存在内存缓冲区中。
- 如果希望将内存缓冲区中的模型保存为离线模型文件xx.om,可以调用aclgrphSaveModel,序列化保存离线模型到文件中。
- 调用aclgrphBuildFinalize结束进程,释放系统资源。
当前支持在一个进程中连续调用模型编译和模型文件保存接口,用于编译和保存多个离线模型。
开发示例
- 包含的头文件。
1 2
#include "ge_ir_build.h" #include "ge_api_types.h"
- 申请资源。
创建完Graph以后,通过aclgrphBuildInitialize接口进行系统初始化,并申请资源。示例代码如下:
1 2 3 4
std::map<AscendString, AscendString> global_options = { {ge::ir_option::SOC_VERSION, "${soc_version}"}, }; auto status = aclgrphBuildInitialize(global_options);
可以通过传入global_options参数配置离线模型编译初始化信息,当前支持的配置参数请参见aclgrphBuildInitialize支持的配置参数。
其中SOC_VERSION为必选配置,用于指定目标芯片版本,值${soc_version}需要根据实际情况替换。其他参数请用户根据实际需要可选配置。
- 通过aclgrphBuildModel接口将Graph编译为离线模型。示例代码如下:
1 2 3 4 5 6 7 8 9 10 11
ModelBufferData model; std::map<AscendString, AscendString> options; PrepareOptions(options); status = aclgrphBuildModel(graph, options, model); if(status == GRAPH_SUCCESS) { cout << "Build Model SUCCESS!" << endl; } else { cout << "Build Model Failed!" << endl; }
可以通过传入options参数配置离线模型编译配置信息,当前支持的配置参数请参见aclgrphBuildModel支持的配置参数。配置举例:
1 2 3 4 5
void PrepareOptions(std::map<AscendString, AscendString>& options) { options.insert({ {ge::ir_option::EXEC_DISABLE_REUSED_MEMORY, "1"} // close resue memory }); }
- (可选)也可以通过aclgrphSaveModel将内存缓冲区中的模型保存为离线模型文件。示例代码如下:
1 2 3 4 5 6 7
status = aclgrphSaveModel("ir_build_sample", model); if(status == GRAPH_SUCCESS) { cout << "Save Offline Model SUCCESS!" << endl; } else { cout << "Save Offline Model Failed!" << endl; }
- 构图进程结束时,通过aclgrphBuildFinalize接口释放资源。示例代码如下:
1
aclgrphBuildFinalize();
父主题: 编译Graph为离线模型