更新时间: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即使配置了该参数也无影响。
分享:

    相关文档

    相关产品