编译生成物说明
本章节介绍Lyngor编译生成物中主要JSON文件的字段信息,便于理解和比较不同模型的具体信息。
net_params.json
net_params.json
是网络的描述信息。
net_params.json
字段说明如下:
{
"version": "202207141006", // 内部版本号
"target": "apu", // 编译是选择的设备
"is_map": true, // 是否调用map,用户用时一般均为true
"chip_num": 1, // 编译时使用的芯片个数,当前版本仅能为1
"net_num": 1, // 编译产生的网络数量
"parallel_mode": "DP", // 并行模式,DP为数据并行,MP为模型并行
"run_batch": 1, // 运行时batch数量
"cpu_arch": "arm", // cpu架构,用户使用时均为arm
"cc": "aarch64-linux-gnu-g++", // 使用的交叉编译器,当前值为默认值,可更新
"file_name": { // 生成物对应的名字
"cpu_lib": "deploy_lib.so", // cpu库文件名字
"cpu_graph": "deploy_graph.json", // cpu json文件名字
"cpu_params": "deploy_param.params", // cpu参数文件名字
"apu_lib": "apu_lib.bin", // op图名字
"io_config": "top_graph.json" // 图信息文件名字
},
"net:": null, // 网络切分信息,一般为空
"is_dynamic_shape": false, // 是否使用动态shape编译
"build_mode": "abc" // 编译模式,cnn为abc,类脑稀疏模式为hop
}
top_graph.json
top_graph.json
是计算图的描述信息。
top_graph.json
字段说明如下:
{
"main": { // 主网络名字
"inputs": { // 网络总输入
"input_ids": { // 当前网络名为input_ids的输入
"shape": "(1, 128)", // input_ids输入形状
"dtype": "int16", // input_ids输入类型
"batch": 1 // input_ids输入batch数
},
"token_type_ids": {
"shape": "(1, 128)",
"dtype": "int16",
"batch": 1
},
"attention_mask": {
"shape": "(1, 128)",
"dtype": "int16",
"batch": 1
}
}
},
"outputs": { // 网络总输出
"apu_0:0": { // apu_0子网络的第一个输出
"shape": "(1, 128, 128)", // 输出形状
"dtype": "float16" // 输出类型
},
"apu_0:1": {
"shape": "(1, 128)",
"dtype": "float16"
}
},
"apu_0": { // 当前第一个子网络apu_0
"inputs": { // apu_0子网络总输入
"input_ids": {
"shape": "(1, 128)",
"dtype": "int16",
"batch": 1
},
"token_type_ids": {
"shape": "(1, 128)",
"dtype": "int16",
"batch": 1
},
"attention_mask": {
"shape": "(1, 128)",
"dtype": "int16",
"batch": 1
}
},
"outputs": { // apu_0子网络总输入
"apu_0:0": {
"shape": "(1, 128, 128)",
"dtype": "float16"
},
"apu_0:1": {
"shape": "(1, 128)",
"dtype": "float16"
}
},
"is_abc": "true", // 是否为abc模型,目前版本可忽略
"version": "202207141006" // lyngor编译版本
}
}
apu.json
apu.json
是SDK运行模型时使用的配置信息。
apu.json
字段说明如下:
{
"apu_x": {
"batch_size": 1, // 模型编译输入batch数
"cmd_size": 512, // cmd.bin字节大小,256 bytes整数倍
"crmem_load_base_addr": 983008, // ddr load基地址,可动态配置dat.bin写入ddr位置
"image_size": 16128640, // core.bin字节大小,sub_image_size之和
"inputs": { // 模型输入相关参数
"datai0": { // 输入节点
"dtype": "uint8", // 输入数据类型uint8
"name": "data", // 输入节点名称
"shape": "[1, 64, 64, 3]", // 输入节点维度
"shape_ex": [ // 输入节点维度
1,
64,
64,
3
],
"size": 12288 // 输入节点元素个数
}
},
"n_slice": 1, // 模型实际支持bacth数
"outputs": { // 模型输出相关参数
"datao0": { // 输出节点0
"dtype": "float16", // 输出数据类型fp16
"name": "\_\_&@!%output0", // 输出节点名称
"shape": "[1, 1, 1, 1000]", // 输出节点维度
"shape_ex": [ // 输出节点维度
1,
1,
1,
1000
],
"size": 1000 // 输出节点元素个数
}
},
"sub_image_size": "[16128640]", // core.bin字节大小 多chip时,存在多个值
"sub_image_size_ex": 16128640, // core.bin字节大小
}
}
在多分辨率模型场景中,包含分辨率index、noc配置,具体描述如下:
"coremem_res_index_addr": 4092, // core内分辨率index保存地址
"coremem_res_pc_offset": 7, // core内分辨率pc偏移值loadnn前,将index + offset结果写入index保存地址
"resolution_config": { // 多分辨率配置
"res0": { // 分辨率0配置
"core_phy_id": [ // 需要配置分辨率index的core物理id
… // 此处省略core id
],
"noc_config": { // 所有core路由noc配置,每个core配置31条lut
// loadnn之后,startnn之前配置
// 不同分辨率下,模型noc有差异,需要重新配置
"core_noc_0": [
… // 此处省略lut配置
],
… // 此处省略其它core noc配置
"core_noc_29": [
… // 此处省略lut配置
],
"core_noc_reg_addr": 1572864 // noc寄存器起始地址,每个寄存器占8字节,
// 按8字节倍数偏移,写入全部lut配置
},
"shape": [ // 分辨率0 输入节点维度
1,
112,
112,
3
]
},
"res1": { // 分辨率1配置
"core_phy_id": [ // 需要配置分辨率index的core物理id
… // 此处省略core id
],
"noc_config": { // 所有core路由noc配置,每个core配置31条lut
// loadnn之后,startnn之前配置
// 不同分辨率下,模型noc有差异,需要重新配置
"core_noc_0": [
… // 此处省略lut配置
],
… // 此处省略其它core noc配置
"core_noc_9": [
… // 此处省略lut配置
],
"core_noc_reg_addr": 1572864 // noc寄存器起始地址,每个寄存器占8字节,
// 按8字节倍数偏移,写入全部lut配置
},
"shape": [ // 分辨率1 输入节点维度
1,
64,
64,
3
]
}
},
"resolution_num": 2, // 分辨率总数量