文档
注册

编译Graph生成om离线模型

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

功能介绍

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

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

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

开发示例

  1. 包含的头文件。
    1
    2
    #include "ge_ir_build.h" 
    #include "ge_api_types.h"
    
  2. 申请资源。

    创建完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}需要根据实际情况替换。其他参数请用户根据实际需要可选配置。

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

    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
            });
    }
    
  4. (可选)也可以通过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;
    }
    
  5. 构图进程结束时,通过aclgrphBuildFinalize接口释放资源。示例代码如下:
    aclgrphBuildFinalize();

后续步骤

上述图编译生成的离线模型,如果使用AscendCL接口进行推理业务,可以通过比如aclmdlLoadFromFile接口加载模型,然后使用aclmdlExecute接口执行推理,详细介绍请参见AscendCL应用软件开发指南 (C&C++)>“模型推理”章节。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词