配置、创建与销毁Graph
Graph主要功能是描述业务包含的Engine及Engine间的数据传输关系,Matrix框架通过Protobuf定义了Graph的数据结构,用户以配置文件的方式来定义Graph配置。
Graph关键字含义请参考Graph关键字,详情请参考《Matrix API参考》。
下文提供了一个简单的graph配置文件,该graph文件会创建一个id为1000的graph业务流,该业务流包含三个Engine,Engine间的数据传输关系如图1所示。
graphs { graph_id: 1000 # 单芯片支持多graph,graph id需大于0,且不能重复 device_id: "0" # graph运行的芯片id priority: 1 # 优先级 # 用户自定义Engine,可实例化多个Engine,以id区分 engines { id: 2001 # 引擎ID engine_name: "ObjectDetectionEngine" # 用户自定义Engine的类名 side: DEVICE # 指定引擎运行在Host/Device侧 so_name: "./libObjectDetectionEngine.so" # 动态链接库名称及在Host侧的路径,由Matrix框架拷贝到Device侧 # 用户可自定义配置参数 ai_config{ items{ name: "model" # 模型名称 value: "./FaceDetection.om" # 模型路径在Host侧的路径,由Matrix框架拷贝到Device侧 } items{ name: "mode" value: "test" } } } engines { id: 1000 engine_name: "DecodeEngine" side: DEVICE so_name: "./libDecodeEngine.so" } engines { id: 2002 engine_name: "PostProcess" side: HOST } # 描述Engine间的端口连接 connects { src_engine_id: 1000 #数据传输源引擎ID src_port_id: 0 #数据传输源端口号 target_engine_id: 2001 #数据传输目的引擎ID target_port_id: 0 #数据传输目的端口号 } connects { src_engine_id: 2001 src_port_id: 0 target_engine_id: 2002 target_port_id: 0 } }
Matrix提供的三个常用Graph接口如表1所示,详细介绍请参考《Matrix API参考》。
接口 |
说明 |
---|---|
HIAI_StatusT HIAI_Init(uint32_t deviceID) |
Ascend 310芯片初始化,请注意此处的芯片ID编号是Ascend 310芯片的绝对编号,在Atlas 500上始终为“0”,npu-smi查询的芯片ID是相对编号。 |
static HIAI_StatusT Graph::CreateGraph(const std::string& configFile) |
读取Graph配置文件,初始化Engine,创建线程和数据传输通道,完成业务流初始化。 |
static HIAI_StatusT Graph::DestroyGraph(uint32_t graphID) |
销毁Graph,运行Engine的析构函数等。 |