---
title: record记录文件
description: "record文件，为基于protobuf协议的序列化数据结构文件，记录量化场景量化因子scale/offset等，通过该文件、压缩配置文件以及原始网络模型文件，生成压缩后的模型文件。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0335.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0335.html
indexId: c8cace9a2a807ed8776be576f8f2ba7abb55af7dd983ffdeaf657bfe423059da65
---
# record记录文件

record文件，为基于protobuf协议的序列化数据结构文件，记录量化场景量化因子scale/offset等，通过该文件、压缩配置文件以及原始网络模型文件，生成压缩后的模型文件。

#### 量化场景record原型定义

训练后量化场景record文件对应的protobuf原型定义为（或查看AMCT安装目录/amct_tensorflow/proto/inner_scale_offset_record.proto文件）：
```
syntax = "proto2";
import "amct_tensorflow/proto/basic_info.proto";
package AMCTTensorflow;
// this proto is designed for amct tools
message InnerSingleLayerRecord {
optional float scale_d = 1;
optional int32 offset_d = 2;
repeated float scale_w = 3;
repeated int32 offset_w = 4;
repeated uint32 shift_bit = 5;
// the cluster of nuq, only nuq layer has this field;
repeated int32 cluster = 6;
optional bool skip_fusion = 9 [default = false];
optional string dst_type = 10 [default = 'INT8'];
repeated string prune_producer = 11;
repeated string prune_consumer = 12;
repeated float tensor_balance_factor = 13;
optional string act_type = 14 [default = 'INT8'];
optional string wts_type = 15 [default = 'INT8'];
}
message InnerMapFiledEntry {
optional string key = 1;
optional InnerSingleLayerRecord value = 2;
}
message InnerScaleOffsetRecord {
repeated InnerMapFiledEntry record = 1;
repeated PruneRecord prune_record = 2;
}
message PruneRecord {
repeated PruneNode producer = 1;
repeated PruneNode consumer = 2;
optional PruneNode selective_prune = 3;
}
message PruneNode {
required string name = 1;
repeated AMCTProto.AttrProto attr = 2;
}
```


该场景下对应参数说明如下：

| 消息 | 是否必填 | 类型 | 字段 | 说明 |
| --- | --- | --- | --- | --- |
| InnerSingleLayerRecord | \- | \- | \- | 包含了量化层所需要的所有量化因子记录信息。 |
| InnerSingleLayerRecord | optional | float | scale\_d | 数据量化scale因子，仅支持对数据进行统一量化。 |
| InnerSingleLayerRecord | optional | int32 | offset\_d | 数据量化offset因子，仅支持对数据进行统一量化。 |
| InnerSingleLayerRecord | repeated | float | scale\_w | 权重量化scale因子，支持标量（对当前层的权重进行统一量化），向量（对当前层的权重按channel\_wise方式进行量化）两种模式，仅支持卷积层(Conv2D)、Depthwise卷积层（DepthwiseConv2dNative）、反卷积层（Conv2DBackpropInput）类型进行channel\_wise量化模式。 |
| InnerSingleLayerRecord | repeated | int32 | offset\_w | 权重量化offset因子，同scale\_w一样支持标量和向量两种模式，且需要同scale\_w维度一致，当前不支持权重带offset量化模式，offset\_w仅支持0。 |
| InnerSingleLayerRecord | repeated | uint32 | shift\_bit | 移位因子。预留字段，当前不支持，不需要配置。 |
| InnerSingleLayerRecord | repeated | int32 | cluster | 聚类中心。只有非均匀量化场景下需要使能该字段，该版本不支持该字段。 |
| InnerSingleLayerRecord | optional | bool | skip\_fusion | 配置当前层是否要跳过Conv+BN融合、Depthwise\_Conv+BN融合、Group\_conv+BN融合、BatchNorm融合，默认为false，即当前层要做上述融合。 |
| InnerSingleLayerRecord | optional | string | dst\_type | 量化数据类型，包括INT8和INT4两种类型。该版本暂不支持该字段。 |
| InnerScaleOffsetRecord | \- | \- | \- | map结构，为保证兼容性，采用离散的map结构。 |
| InnerScaleOffsetRecord | repeated | InnerMapFiledEntry | record | 每个record对应一个量化层的量化因子记录；record包括两个成员： key为所记录量化层的layer name。 value对应SingleLayerRecord定义的具体量化因子。 |
| InnerMapFiledEntry | optional | string | key | 层名。 |
| InnerMapFiledEntry | optional | InnerSingleLayerRecord | value | 量化因子配置。 |
| PruneRecord | \- | \- | \- | 稀疏信息的记录。不支持该特性。 |
| PruneRecord | repeated | PruneNode | producer | 稀疏的producer，可稀疏结点间级联关系的根节点。 例如conv1>bn>relu>conv2都可以稀疏，且bn、relu、conv2都会受到conv1稀疏的影响，则bn、relu、conv2是conv1的consumer；conv1是bn、relu、conv2的producer。 |
| PruneRecord | repeated | PruneNode | consumer | 稀疏的consumer，可稀疏结点间级联关系的下游节点。 例如conv1>bn>relu>conv2都可以稀疏，且bn、relu、conv2都会受到conv1稀疏的影响，则bn、relu、conv2是conv1的consumer；conv1是bn、relu、conv2的producer。 |
| PruneRecord | optional | PruneNode | selective\_prune | 4选2结构化稀疏节点。 由于硬件约束， Atlas 推理系列产品 、 Atlas 训练系列产品 、Atlas 350 加速卡不支持4选2结构化稀疏特性。 |
| PruneNode | \- | \- | \- | 稀疏的节点。不支持该特性。 |
| PruneNode | required | string | name | 节点名称。 |
| PruneNode | repeated | AMCTProto.AttrProto | attr | 节点属性。 |


对于optional字段，由于protobuf协议未对重复出现的值报错，而是采用覆盖处理，因此出现重复配置的optional字段内容时会默认保留最后一次配置的值，需要用户自己保证文件的正确性。


#### record记录文件

最终生成的record文件格式为record.txt。

对于一般量化层配置需要包含scale_d、offset_d、scale_w、offset_w参数，对于AvgPool因为没有权重，因此不能配置scale_w、offset_w参数。量化因子record文件内容示例如下（如下示例以inner_scale_offset_record.proto原型文件对应的量化因子为例进行说明）：

```
record {
key: "
fc4/Tensordot/MatMul
"
value {
scale_d: 0.0798481479
offset_d: 1
scale_w: 0.00297622895
offset_w: 0
}
}
record {
key: "
depthwise
"
value {
scale_d: 0.00962011795
offset_d: 1
scale_w: 0.00787108205
scale_w: 0.00787108205
scale_w: 0.00787108205
offset_w: 0
offset_w: 0
offset_w: 0
skip_fusion: true
}
}
record {
key: "
conv2d/Conv2D
"
value {
scale_d: 0.00392156886
offset_d: -128
scale_w: 0.00106807391
scale_w: 0.00104224426
scale_w: 0.0010603976
offset_w: 0
offset_w: 0
offset_w: 0
}
}
```
