利用浮点比例进行量化 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文
DPU 量化使用 2 的幂值比例、对称和逐张量量化器,且需特殊处理才能进行 DPU 行为仿真。但对于支持浮点比例的其他器件,则需要采用不同的量化策略,因此引入了浮点比例量化。
fs 量化策略
Conv2DDepthwiseConv2DConv2DTransposeDense 层的输入和权重执行量化。默认不执行 Conv-BN 折叠。
fsx 量化策略
相较于 fs 量化策略,该策略能对更多类型的层执行量化,例如,AddMaxPooling2DAveragePooling2D。此外,量化进程会扩展至 Conv2DDepthwiseConv2DConv2DTransposeDense 层的偏差和激活。它默认包含 Conv-BN 折叠。
注释: fsfsx 策略都是专为具有浮点支持的目标器件设计的。DPU 目前不支持浮点,因此以这些量化策略进行量化的模型无法部署到 DPU。
您可在 VitisQuantizer 的构造函数中将 quantize_strategy 设为 fsfsx 来切换为使用浮点比例量化。代码示例如下所示:
model = tf.keras.models.load_model('float_model.h5')
from tensorflow_model_optimization.quantization.keras import vitis_quantize
quantizer = vitis_quantize.VitisQuantizer(model, quantize_strategy='fs')
quantized_model = quantizer.quantize_model(calib_dataset=calib_dataset,
                                           calib_step=100, 
                                           calib_batch_size=10,
                                           **kwargs)
calib_dataset
calib_dataset 是用作校准的代表性校准数据集。您可将 eval_datasettrain_dataset 或其他数据集作为整体来使用,或者仅使用其中一部分。
calib_steps
calib_steps 表示校准步骤总数。其默认值为 None。如果 calib_datasettf.data dataset、生成器或 keras.utils.Sequence 实例且 steps 为 None,校准会运行到数据集耗尽为止。阵列输入不支持此实参。
calib_batch_size
calib_batch_size 表示用于校准的每批次样本数。如果 calib_dataset 为数据集、生成器或 keras.utils.Sequence 实例形式,则批次大小由数据集本身控制。如果 calib_datasetnumpy.array 对象形式,那么默认批次大小为 32。
**kwargs
**kwargs 是用户定义的量化策略配置的词典。它支持用户改写默认内置量化策略。例如,设置 bias_bit=16 即可支持该工具使用 16 位量化器来量化所有偏差。如需了解有关用户定义的配置的更多信息,请参阅 vai_q_tensorflow2 用法 部分。