DPU 量化使用 2 的幂值比例、对称和逐张量量化器,且需特殊处理才能进行 DPU 行为仿真。但对于支持浮点比例的其他器件,则需要采用不同的量化策略,因此引入了浮点比例量化。
-
fs
量化策略 - 对
Conv2D
、DepthwiseConv2D
、Conv2DTranspose
和Dense
层的输入和权重执行量化。默认不执行 Conv-BN 折叠。 -
fsx
量化策略 - 相较于
fs
量化策略,该策略能对更多类型的层执行量化,例如,Add
、MaxPooling2D
和AveragePooling2D
。此外,量化进程会扩展至Conv2D
、DepthwiseConv2D
、Conv2DTranspose
和Dense
层的偏差和激活。它默认包含 Conv-BN 折叠。
注释:
您可在 fs
和 fsx
策略都是专为具有浮点支持的目标器件设计的。DPU 目前不支持浮点,因此以这些量化策略进行量化的模型无法部署到 DPU。VitisQuantizer
的构造函数中将 quantize_strategy
设为 fs
或 fsx
来切换为使用浮点比例量化。代码示例如下所示: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_dataset
、train_dataset
或其他数据集作为整体来使用,或者仅使用其中一部分。 - calib_steps
-
calib_steps
表示校准步骤总数。其默认值为 None。如果calib_dataset
为tf.data dataset
、生成器或keras.utils.Sequence
实例且 steps 为 None,校准会运行到数据集耗尽为止。阵列输入不支持此实参。 - calib_batch_size
-
calib_batch_size
表示用于校准的每批次样本数。如果calib_dataset
为数据集、生成器或keras.utils.Sequence
实例形式,则批次大小由数据集本身控制。如果calib_dataset
为numpy.array
对象形式,那么默认批次大小为 32。 - **kwargs
-
**kwargs
是用户定义的量化策略配置的词典。它支持用户改写默认内置量化策略。例如,设置 bias_bit=16 即可支持该工具使用 16 位量化器来量化所有偏差。如需了解有关用户定义的配置的更多信息,请参阅 vai_q_tensorflow2 用法 部分。