昇腾社区首页
中文
注册

编译Graph为离线模型

功能介绍

构建完Graph之后,如果您仅是需要把Graph编译并保存为适配昇腾AI处理器的离线模型,编译生成的离线模型可以通过aclmdlLoadFromFile接口加载,并通过aclmdlExecute接口执行推理模型,可以参考本节内容编译Graph。如果您需要编译并直接运行Graph,可以参考编译并运行Graph

除了aclmdlLoadFromFile和aclmdlExecute接口加载和执行离线模型外,还有其他更丰富的接口适配用户的不同场景,相关接口详细介绍请参考应用软件开发指南 (C&C++)

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

  1. Graph定义完成后,调用aclgrphBuildInitialize进行系统初始化,申请系统资源。
  2. 调用aclgrphBuildModel将Graph编译为适配昇腾AI处理器的离线模型,编译过程中会加载TBE内置算子库和自定义算子库。此时模型保存在内存缓冲区中。
  3. 如果希望将内存缓冲区中的模型保存为离线模型文件xx.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支持的配置参数

    其中SOC_VERSION为必选配置,用于指定目标芯片版本,值${soc_version}需要根据实际情况替换。其他参数请用户根据实际需要可选配置。

  3. 通过aclgrphBuildModel接口将Graph编译为离线模型。示例代码如下:
    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支持的配置参数。配置举例:

    void PrepareOptions(std::map<Ascendstring, Ascendstring>& options) {
        options.insert({
            {ge::ir_option::EXEC_DISABLE_REUSED_MEMORY, "1"} // close resue memory
            });
    }
  4. (可选)也可以通过aclgrphSaveModel将内存缓冲区中的模型保存为离线模型文件,例如ir_build_sample.om。示例代码如下:
    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();