vitis_quantize.VitisQuantizer.quantize_model - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文

此函数用于执行浮点模型训练后量化 (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.Datasetkeras.utils.Sequencenp.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_dataset numpy.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
bool 对象,表示是否将独立 BatchNormalization 层转换到 DepthwiseConv2D 层中。
convert_sigmoid_to_hard_sigmoid
Vitis AI 2.0 和更低版本中命名为 replace_sigmoid
bool 对象,表示是否将 Activation(activation='sigmoid') 层和 Sigmoid 层替换为 hard sigmoid 层并执行量化。若为否,sigmoid 层将保留不予量化,并在 CPU 上进行调度。
convert_relu_to_relu6
Vitis AI 2.0 和更低版本中命名为 replace_relu6
bool 对象,表示是否将 ReLU6 层替换为 ReLU 层。
include_cle
bool 对象,表示是否在量化前实现跨层均衡。
cle_steps
int 对象,表示用于执行跨层均衡的迭代步骤数。
cle_to_relu6
Vitis AI 2.0 和更低版本中命名为 forced_cle
bool 对象,表示是否为 ReLU6 层执行强制跨层均衡。
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