更新时间:2021-03-18 GMT+08:00
Protobuffer数据类型
关于Protobuffer的使用,请参见https://developers.google.com/protocol-buffers/docs/reference/proto3-spec。
Matrix用到的数据类型Protobuffer格式:
ai_types.proto
syntax = "proto3";IAITensor package hiai; // Tensor参数描述 message AITensorParaDescription { string name = 1; // 参数名称 string type = 2; // 参数类型 string value = 3; // 参数值 string desc = 4; // 参数描述 repeated AITensorParaDescription sub_paras = 5; // 子参数列表 }; // Tensor描述 message AITensorDescription { string name = 1; // Tensor名称 string type = 2; // Tensor类型 repeated string compatible_type = 3; // 指定可以兼容的所有父类类型 repeated AITensorParaDescription paras = 4; // 参数列表 }; // Tensor描述列表 message AITensorDescriptionList { repeated AITensorDescription tensor_descs = 1; // tensor列表 } // 通用配置项 // 如果存在sub_items,则当前节点为父节点,value值无效 message AIConfigItem { string name = 1; // 配置项名称 string value = 2; // 配置项值,此处配置模型文件所在的路径时,包含文件名(名称中只允许有数字、字母、下划线和点号),可以将参数值配置为单个模型文件的路径(如:./test_data/model/resnet18.om);也可以将模型文件打包成tar包后,将参数值配置为tar包所在的路径(如:./test_data/model/resnet18.tar)。若存在多个AIConfigItem,在配置tar包路径时,不允许在同一个目录下同时存在名称相同但格式不同的文件,例如./test_data/model/test、./test_data/model/test.tar。创建Graph接口包含Graph::CreateGraph或HIAI_CreateGraph。 repeated AIConfigItem sub_items = 3; // 配置子项 }; // nnnode/api运行时配置参数 message AIConfig { repeated AIConfigItem items = 1; // 配置项列表 }; // 模型描述 message AIModelDescription { string name = 1; // 模型名称 int32 type = 2; // 模型类型,当前仅支持DAVINCI_OFFLINE_MODEL类型,值为0 string version = 3; // 模型版本 int32 size = 4; // 模型大小 string path = 5; // 模型路径 string key = 8; // 模型秘钥 bytes data = 100; // 模型数据 repeated AITensorDescription inputs = 6; // 输入Tensor描述 repeated AITensorDescription outputs = 7; // 输出Tensor描述 }; // NNNode描述 message AINNNodeDescription { string name = 1; // NNNode名称 string desc = 2; // NNNode描述 bool isPreAllocateOutputMem = 3; // 是否预分配输出内存 AIConfig config = 4; // 配置参数 repeated AIModelDescription model_list = 5; // NNNode需要的模型列表 repeated AITensorDescription inputs = 6; // 输入Tensor描述 repeated AITensorDescription outputs = 7; // 输出Tensor描述 bool need_verify = 8; // 串联时是否需要校验Tensor匹配 repeated string ignored_check_aitensor = 9; // 指定在串联时不与Inputs的Tensor做匹配校验的Tensor列表 }; // NNNode描述列表 message AINNNodeDescriptionList { repeated AINNNodeDescription nnnode_descs = 1; // NNNode列表 } // API描述 message AIAPIDescription { string name = 1; // API名称 string desc = 2; // API描述 bool isPreAllocateOutputMem = 3; // 是否预分配输出内存 AIConfig config = 4; // 配置参数 repeated AITensorDescription inputs = 5; // 输入Tensor描述 repeated AITensorDescription outputs = 6; // 输出Tensor描述 bool need_verify = 7; // 串联时是否需要校验Tensor匹配 repeated string ignored_check_aitensor = 8; // 指定在串联时不与Inputs的Tensor做匹配校验的Tensor列表 }; // API描述列表 message AIAPIDescriptionList { repeated AIAPIDescription api_descs = 1; // API列表 } // AI Operation 描述 message AIOPDescription { enum OP_Type { AI_API = 0; AI_NNNODE = 1; } OP_Type type = 1; AINNNodeDescription nnnode_desc = 2; AIAPIDescription api_desc = 3; }; // AI Operation 描述列表 message AIOPDescriptionList { repeated AIOPDescription op_descs = 1; // AI Operation列表 } // IDE传给Matrix的接口 message NodeDesc { string name=1; // IAINNNode或ALG_API 名字 AIConfig config=2; //IAINNNode或ALG_API 需要的初始化参数 repeated AIModelDescription mode_desc=3; //IAINNNode 需要的初始化参数 } message EngineDesc { enum RunSide { DEVICE=0; HOST=1; } enum EngineType { NORMAL=0; SOURCE=1; DEST=2; } uint32 id =1; //Engine ID (节点) EngineType type=2; // string name =3; //Engine 节点名字 repeated string so_name=4; //需要拷贝的所有动态库so文件名列表,会先按照用户配置的顺序先进行加载,加载失败再按照其他的加载顺序进行尝试加载 RunSide side=5; //部署在host侧还是Device侧 int32 priority=6; //节点优先级 uint32 instance_cnt=7; //实例个数(相当于线程个数) repeated uint32 next_node_id=8; //下一个节点列表 bool user_input_cb=9; //IDE 可以忽略 bool user_output_cb=10; //IDE 可以忽略 repeated NodeDesc oper=11; //Matrix Node 列表 } message GraphInitDesc { int32 priority=1; //Graph 整个进程的优先级 //Runside side = 2; //当前假定Graph 配置在host侧,不可配置 } message GeneralFileBuffer { bytes raw_data = 1; string file_name = 2; }
graph_config.proto
syntax = "proto3"; import "ai_types.proto"; package hiai; message DumpDef { bytes model_name = 1; //模型名称 bytes is_dump_all = 2; //是否打开Dump开关,用于Dump模型中每层算子的信息 repeated bytes layer = 3; //需要Dump模型中哪些层的算子信息 } message OAMConfigDef { repeated DumpDef dump_list = 1; bytes dump_path = 2; //dump文件存放的路径 } message EngineConfig { enum RunSide { DEVICE=0; //运行在DEVICE侧 HOST=1; //运行在host侧 } uint32 id =1; //Engine ID (节点) string engine_name =2; //Engine 节点名字 repeated string so_name=3; //需要拷贝的所有动态库so文件名列表,会先按照用户配置的顺序先进行加载,加载失败再按照其他的加载顺序进行尝试加载 RunSide side=4; //部署在host侧还是Device侧 uint32 thread_num = 5;//线程数量。多路解码时,则该参数值推荐设置为1,如果thread_num值大于1,则线程之间的解码无法保证顺序。 uint32 thread_priority = 6;//线程优先级 uint32 queue_size = 7;//队列大小 AIConfig ai_config = 8; //Aiconfig配置文件 repeated AIModelDescription ai_model = 9; //AIModelDescription repeated string internal_so_name=10; //不需要拷贝的所有动态库so文件名列表 uint32 wait_inputdata_max_time = 12; //当前已经收到数据后等待下一个数据的最大超时时间,单位为毫秒 uint32 holdModelFileFlag = 13; //是否保留本engine的模型文件,0不保留(默认为0),非0保留 OAMConfigDef oam_config = 14; // OAM Config配置 bool is_repeat_timeout_flag = 15; //engine未收到数据是否重复做超时处理,0不重复,1重复。例如多路数据分析时,数据量较大的情况下,建议将该参数值设置为1,做重复超时处理。与wait_inputdata_max_time参数配合使用,如果is_repeat_timeout_flag设置为0,则通过wait_inputdata_max_time参数设置单次超时时长;如果is_repeat_timeout_flag设置为1,则通过wait_inputdata_max_time参数设置周期超时时长。 } message ConnectConfig { uint32 src_engine_id=1; //发送端的EngineID uint32 src_port_id = 2; //发送端的PortID uint32 target_graph_id=3; //接收端的GraphID uint32 target_engine_id=4; //接收端的PortID uint32 target_port_id=5; //接收端的PortID bool receive_memory_without_dvpp=6; //参数默认值为0,表示Deivce上运行的目标Engine的接收内存需要满足DVPP的内存要求;若将参数值配置为1,表示Device上运行的目标Engine的接收内存无限制。参数的生效场景及使用场景请参见“关于receive_memory_without_dvpp参数的说明”。 } message GraphConfig { uint32 graph_id = 1; //GraphID int32 priority = 2; //优先级 string device_id = 3;//设备id配置,例如"0" repeated EngineConfig engines = 3; //所有的engine。多路解码时推荐配置多个Engine,一个Engine对应一个线程,如果一个Engine对应多个线程,解码时无法保证顺序。 repeated ConnectConfig connects = 4; //连接方式 } message GraphConfigList { repeated GraphConfig graphs = 1; //单个Graph的配置参数 } message ProfileConfig { string matrix_profiling = 1; //Matrix的性能统计开关,“on”为开 string ome_profiling = 2; //OME的性能统计开关,“on”为开 string cce_profiling =3; //CCE的性能统计开关,“on”为开 string runtime_profiling = 4; //RUNTIME的性能统计开关,“on”为开 string PROFILER_TARGET = 5; //透传Profiling的参数 string PROFILER_JOBCTX = 6; string src_path = 7; string dest_path = 8; string runtime_config = 9; string RTS_PATH = 10; string profiler_jobctx_path = 11; string profiler_target_path = 12; } message GraphUpdateConfig { GraphConfig updataGraphConfig = 1; repeated uint32 del_engine_ids = 2; repeated ConnectConfig del_connects = 3; }
关于receive_memory_without_dvpp参数的说明:
- 生效场景:使用HIAI_DMalloc接口申请内存,同时使用HIAI_REGISTER_SERIALIZE_FUNC宏对自定义数据类型进行序列化/反序列化时,配置文件中的该参数才生效。
- 使用场景:
当前,在DVPP中:
- 对VPC、JPEGE、JPEGD、PNGD功能的输入内存有限制,保持receive_memory_without_dvpp参数的默认值(默认值为0),不用配置,内存满足DVPP的要求;
- 对VDEC、VENC功能的输入内存无限制,可将receive_memory_without_dvpp参数配置为1,使用普通内存,提高系统普通内存的使用率,减少“满足DVPP要求的内存”的占用;也可以不配置receive_memory_without_dvpp参数(默认值为0)。
- 配置方法有两种:
- 在Graph配置文件中,在connects属性下,将所有在Device上运行的目标Engine的receive_memory_without_dvpp参数配置为1。
- 在Graph配置文件中,将所有connects属性下的receive_memory_without_dvpp参数都配置为1,因为在Host上运行的目标Engine即使配置了该参数也无影响。
父主题: Matrix数据类型