昇腾社区首页
中文
注册

Hiva::CreateNnEngine

函数功能

创建NN引擎,加载指定的模型文件,对inTopicInfo发布的数据执行推理,并将推理的结果以outTopicInfo的形式发布出来。

函数原型

uint32_t Hiva::CreateNnEngine(const std::string& engineName, const EngineAttr& engineAttr, const NnTopicInfo& inTopicInfo, const NnTopicInfo& outTopicInfo)

参数说明

参数名

输入/输出

说明

engineName

输入

指推理引擎的名字,必须唯一、不能为空,不能超过128字节,不能包含 '\'、'*'。

engineAttr

输入

指推理引擎的属性,包括推理模型的路径、所在分组、模型优先级等。

1
2
3
4
5
typedef struct EngineAttr_ {           // 定义了当前推理模型属性
    std::string modelPath           // 模型在文件系统的路径
    uint32_t groupId;       // 模型所在分组,示例参见,默认范围0-1(范围可改,最大范围0-3)
    uint32_t  pri;          // 模型的优先级,数字越小优先级越高,取值为[0-7]
};

inTopicInfo

输入

模型输入数据的Topic名称(vector结构)及queue size,所有输入数据拥有相同的队列长度,开启队列流控和写覆盖。topicVec中的topic name首字母必须为'/'。

outTopicInfo

输出

模型输出数据的topic名称(vector结构)及queue size,所有输出数据拥有相同的队列长度,关闭队列流控和写覆盖。topicVec中的topic name首字母必须为'/'。

返回值

返回uint32_t类型,成功返回HIVA_SUCCESS,该值为0;其他值为失败

使用说明

通过调用此接口,APP可以将inTopicInfo发布的数据传递给NN进行异步推理,并将推理的结果以outTopicInfo的形式发布出来。

  • 在调用此接口之前,APP需要先进行inTopicInfo注册,避免在调用此接口之前执行inTopicInfo的Publish操作。
  • 在调用此接口之后,APP需要对outTopicInfo执行Subscribe操作。
1
2
3
4
typedef struct NnTopicInfo_{
    const std::vector<std::string> topicVec;    
    const uint32_t queueSize;                    // queueSize的范围1-127
}NnTopicInfo;

注意事项

  • 本接口不可重入,同步接口。
  • 对于同一个inTopicInfo的数据,可通过此接口创建多个不同的NNEngine执行推理,但需要确保使用不同的模型和outTopicInfo。
  • inTopicInfo发布的数据需要采用buffer管理的接口申请共享内存,并采用Publish接口发布。
  • outTopicInfo需要使用Subscriber接口订阅。
  • NN推理完成后,会对inTopicInfo发布的数据执行释放操作;同一个数据多个推理时,会在最后一个推理完成后释放。
  • NN推理完成后,会调用订阅outTopicInfo的回调,回调中传入的是Tensor类型的共享内存指针,此共享内存会在回调完成后由框架释放。
  • 本接口非NodeHandle成员函数。

模型分组

模型分组是通过配置文件(yaml文件)来设置各组的属性,配置文件示例如下。如需修改配置文件,需通过CfgMgr接口操作(可参见配置管理相关接口)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AIGroups: 
    group0: 
        aicore_number: 8 
        aivector_number: 4 
        sdma_number: 255     # 代表使用默认值 
        aicpu_number: 255    # 代表使用默认值  
        active_sq_number: 1  
    group1: 
        aicore_number: 2 
        aivector_number: 4 
        sdma_number: 255     # 代表使用默认值 
        aicpu_number: 255    # 代表使用默认值  
        active_sq_number: 1 		 
    group2: 
        aicore_number: 0     # 该值为0,则其他值无作用 
        aivector_number: 0 
        sdma_number: 255     # 代表使用默认值 
        aicpu_number: 255    # 代表使用默认值  
        active_sq_number: 1  
    group3: 
        aicore_number: 0     # 该值为0,则其他值无作用 
        aivector_number: 0 
        sdma_number: 255     # 代表使用默认值 
        aicpu_number: 255    # 代表使用默认值  
        active_sq_number: 1