量化 API
vitis_vai.quantize(
input_float,
quantize_strategy = 'pof2s',
custom_quantize_strategy = None,
calib_dataset = None,
calib_steps = None,
calib_batch_size = None,
save_path = './vai_wego/quantized.h5',
verbose = 0,
add_shape_info = False,
dump = False,
dump_output_dir = './vai_dump/')
此函数用于执行浮点模型训练后量化 (PTQ),包括模型最优化、权重量化和激活训练后量化。
参数
- input_float
- 要量化的
tf.keras.Model
浮点对象。 - quantize_strategy
- 表示量化策略类型的字符串对象。可用值包括:pof2s、pof2s_tqt、fs
和 fsx。pof2s
是默认策略,使用 2 的幂值比例量化器和 Straight-Through-Estimator(直通式估算器)。pof2s_tqt 是 Vitis AI 1.4 中引入的策略,使用 2 的幂值比例量化器中经过训练的阈值,可生成更好的 QAT 结果。fs 是 Vitis AI 2.5 中引入的量化策略,它为 Conv2D、DepthwiseConv2D、Conv2DTranspose 和 Dense 层的输入和权重执行浮点比例量化。另一方面,相比于 fs 量化策略,fsx
能将量化策略扩展到更多类型的层,包括 Add、MaxPooling2D 和 AveragePooling2D,并且还在量化中引入了偏差和激活。 注释:
- pof2s_tqt 只能用于 init_quant=True 的 QAT,以获得最佳性能。
- fs 和 fsx 策略是专为具有浮点支持的目标器件设计的。DPU 当前不支持浮点,因此以这些量化策略进行量化的模型无法部署到 DPU。
- custom_quantize_strategy
- string 对象。表示定制量化策略 JSON 文件的文件路径。
- 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_dataset 采用 numpy.array 对象形式,那么默认批次大小设为 32。
- save_path
- string 对象。量化模型的保存目录。
- verbose
- int 对象。表示日志记录的详细程度。详细程度值越大,生成的 log 日志记录越详细。默认值为 0。
- add_shape_info
- bool 对象。用于判定是否要为定制层添加形状推断信息。对于含有定制层的模型,其值必须设为 True。
- dump
- 用于启用或禁用转储的标志。如果 dump=False,则禁用转储,如果 dump=True,则启用转储。
- dump_output_dir
- string 对象。表示转储结果的保存目录。
如需了解有关如何在 WeGO TensorFlow 2.x 中使用即时量化的更多信息,请参阅 WeGO 示例。