此函数用于执行浮点模型训练后量化 (PTQ),包括模型最优化、权重量化和激活训练后量化。
vitis_quantize.VitisQuantizer.quantize_model(
calib_dataset=None,
calib_batch_size=None,
calib_steps=None,
verbose=0,
add_shape_info=False,
**kwargs)
实参
- calib_dataset
-
tf.data.Dataset
、keras.utils.Sequence
或np.numpy
对象。它是用于校准的代表性数据集。您可以将 eval_dataset、train_dataset 或其他数据集整体或其中一部分用作 calib_dataset。 - calib_steps
-
int。表示校准步骤总数。可忽略,默认值为 None。如果 calib_dataset 为
tf.data
数据集、生成器或keras.utils.Sequence
实例且 steps 为 None,校准会运行到数据集耗尽为止。阵列输入不支持此实参。 - calib_batch_size
-
int。表示用于校准的每批次样本数。如果 calib_dataset 为数据集、生成器或
keras.utils.Sequence
实例形式,则批次大小由数据集本身控制。如果 calib_datasetnumpy.array
对象形式,则默认批次大小设为 32。 - verbose
- int。表示日志记录的详细程度。详细程度值越大,生成的 log 日志记录越详细。默认值为 0。
- add_shape_info
- bool。用于指示是否要为定制层添加形状推断信息。对于含有定制层的模型,其值必须设为 True。
- **kwargs
- dict。表示用户定义的量化策略配置。它会覆盖默认内置量化策略。以下列出了详细的用户定义配置。
**kwargs
中的实参
此 API 中的 **kwargs
是用户定义的量化策略配置的词典。它会覆盖默认内置量化策略。例如,设置 bias_bit=16 会使该工具以 16 位量化器来量化所有偏差。以下提供了用户定义的详细配置:
- separate_conv_act
-
bool
对象,表示是否从Conv2D/DepthwiseConv2D/TransposeConv2D/Dense
层分离激活函数。默认值为True
。 - fold_conv_bn
-
bool
对象,表示是否将 batch norm 层折叠到先前的Conv2D/DepthwiseConv2D/TransposeConv2D/Dense
层中。 - convert_bn_to_dwconv
- 在 Vitis AI 2.0 和更低版本中命名为
fold_bn
。 - convert_sigmoid_to_hard_sigmoid
- 在 Vitis AI 2.0 和更低版本中命名为
replace_sigmoid
。 - convert_relu_to_relu6
- 在 Vitis AI 2.0 和更低版本中命名为
replace_relu6
。 - include_cle
-
bool
对象,表示是否在量化前实现跨层均衡。 - cle_steps
-
int
对象,表示用于执行跨层均衡的迭代步骤数。 - cle_to_relu6
- 在 Vitis AI 2.0 和更低版本中命名为
forced_cle
。 - include_fast_ft
-
bool
对象,用于判定是否执行快速微调。快速微调会用校准数据集逐层调整权重,对于某些模型可获得更高的精度。默认关闭快速微调。它需要比正常 PTQ 更长的时间(不过仍然远远短于 QAT 时间,因为 calib_dataset 比训练数据集小得多)。如果遇到精度问题,请将其开启以改善性能。 - fast_ft_epochs
-
int
对象,表示为每层执行快速微调的迭代轮数。 - output_format
- 该字符串对象用于指示量化模型的保存格式。选项包括:'' 表示跳过保存;'h5' 表示保存 .h5 文件;'tf' 表示保存 saved_model 文件;'onnx' 表示保存 .onnx 文件。默认值为 ''。
- onnx_opset_version
- 该 int 对象表示 ONNX opset 版本。仅当 output_format 设为 'onnx' 时才生效。默认值为 11。
- output_dir
- 字符串对象,指示量化模型的保存目录。默认值为“./quantize_results”。
- convert_datatype
- 字符串对象,用于指示浮点模型的目标数据类型。选项包括:'float16'、'bfloat16'、'float32' 和 'float64'。默认值为“float16”。
- input_layers
-
list(string)
对象,表示要量化的 start(起始)层的名称。模型中位于这些层之前的层将不进行最优化或量化。例如,此实参可跳过某些预处理层或停止量化第一层。默认值为[]
。 - output_layers
-
list(string)
对象,表示要量化的 end(结束)层的名称。模型中位于这些层之后的层将不进行最优化或量化。例如,此实参可跳过后处理层或停止量化最后一层。默认值为[]
。 - ignore_layers
-
List(string)
对象,表示量化期间忽略的层的名称。例如,此实参可用于跳过某些敏感层的量化以改善准确性。默认值为[]
。 - input_bit
-
int
对象,所有输入的位宽。默认值为 8。 - input_method
-
int
对象,表示在量化所有输入的过程中,用于计算比例因子的方法。选项包括:0 表示Non_Overflow
,1 表示Min_MSE
,2 表示Min_KL
,3 表示Percentile
。默认值为 0。 - input_symmetry
-
bool
对象,表示针对所有输入,是执行对称量化还是非对称量化。默认值为True
。 - input_per_channel
-
bool
对象,表示针对所有输入,是执行逐通道量化还是执行逐张量量化。默认值为False
。 - input_round_mode
-
int
对象,表示用于量化所有输入的舍入模式。选项包括:0 表示HALF_TO_EVEN
,1 表示HALF_UP
,2 表示HALF_AWAY_FROM_ZERO
。默认值为 1。 - input_unsigned
-
bool
对象,表示是否为所有输入使用无符号的整数量化。它通常用于非负数输入(范围介于 0 到 1 之间),前提是 input_unsigned 为 true。默认值为False
。 - weight_bit
-
int
对象,表示所有权重的位宽。默认值为 8。 - weight_method
-
int
对象,表示在量化所有权重的过程中,用于计算比例因子的方法。选项包括:0 表示Non_Overflow
,1 表示Min_MSE
,2 表示Min_KL
,3 表示Percentile
。默认值为 1。 - weight_symmetry
-
bool
对象,表示针对所有权重,是执行对称量化还是非对称量化。默认值为True
。 - weight_per_channel
-
bool
对象,表示针对所有权重,是执行逐通道量化还是执行逐张量量化。默认值为False
。 - weight_round_mode
-
int
对象,表示用于量化所有权重的舍入模式。选项包括:0 表示HALF_TO_EVEN
,1 表示HALF_UP
,2 表示HALF_AWAY_FROM_ZERO
。默认值为 0。 - weight_unsigned
-
bool
对象,表示是否为所有权重使用无符号的整数量化。通常在 weight_symmetry 为 false 时使用该对象。默认值为False
。 - bias_bit
-
int
对象,表示所有偏差的位宽。默认值为 8。 - bias_method
-
int
对象,表示在量化所有偏差的过程中,用于计算比例因子的方法。选项包括:0 表示Non_Overflow
,1 表示Min_MSE
,2 表示Min_KL
,3 表示Percentile
。默认值为 0。 - bias_symmetry
-
bool
对象,表示针对所有偏差,是执行对称量化还是非对称量化。默认值为True
。 - bias_per_channel
-
bool
对象,表示针对所有偏差,是执行逐通道量化还是执行逐张量量化。默认值为False
。 - bias_round_mode
-
int
对象,表示用于量化所有偏差的舍入模式。选项包括:0 表示HALF_TO_EVEN
,1 表示HALF_UP
,2 表示HALF_AWAY_FROM_ZERO
。默认值为 0。 - bias_unsigned
-
bool
对象,表示是否为所有偏差使用无符号的整数量化。通常在 bias_symmetry 为 false 时使用该对象。默认值为False
。 - activation_bit
-
int
对象,表示所有激活的位宽。默认值为 8。 - activation_method
-
int
对象,表示在量化所有激活的过程中,用于计算比例因子的方法。选项包括:0 表示Non_Overflow
,1 表示Min_MSE
,2 表示Min_KL
,3 表示Percentile
。默认值为 1。 - activation_symmetry
-
bool
对象,表示针对所有激活,是执行对称量化还是非对称量化。默认值为True
。 - activation_per_channel
-
bool
对象,表示针对所有激活,是执行逐通道量化还是执行逐张量量化。默认值为False
。 - activation_round_mode
-
int
对象,表示用于量化所有激活的舍入模式。选项包括:0 表示HALF_TO_EVEN
,1 表示HALF_UP
,2 表示HALF_AWAY_FROM_ZERO
。默认值为 1。 - activation_unsigned
-
bool
对象,表示是否为所有激活使用无符号的整数量化。它通常用于非负数激活(例如,ReLU 或 ReLU6),前提是 activation_symmetry 为 true。默认值为False
。