量化 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 的幂值比例的量化器中使用 Trained-Threshold(经训练的阈值),这样可能会为 QAT 生成更好的结果。fs 是 Vitis AI 2.5 中引入的新量化策略,它使用浮点比例量化来计算 Conv2D、DepthwiseConv2D、Conv2DTranspose 和 Dense 层的输入和权重。相比于 fs 量化策略,fsx
量化策略会对更多类型的层执行量化,例如,Add、MaxPooling2D 和 AveragePooling2D。此外,它还会量化偏差和激活。 注释:
- pof2s_tqt 策略只能用于 QAT,并且应与 init_quant=True 一起使用以获得最佳性能。
- fs 和 fsx 策略是专为具有浮点支持的目标器件设计的。DPU 当前不支持浮点,因此以这些量化策略进行量化的模型无法部署到 DPU。
- custom_quantize_strategy
- 字符串对象,表示定制量化策略 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 实例且步骤数为 None,校准将运行到数据集耗尽为止。此实参不支持阵列输入。
- calib_batch_size
- int 对象,表示用于校准的每批次样本数。如果“calib_dataset”为数据集、生成器或 keras.utils.Sequence 实例形式,则批次大小由数据集本身控制。如果“calib_dataset”为 numpy.array 对象形式,则默认批次大小为 32。
- save_path
- 该字符串对象表示量化模型的保存目录。
- verbose
- int 对象,表示日志记录的详细程度。详细程度值越大,生成的 log 日志记录越详细。默认值为 0。
- add_shape_info
- bool 对象,表示是否要为定制层添加形状推断信息。对于含有定制层的模型,必须设为 True。
- dump
- 用于启用或禁用转储的标志。如果 dump=False,则禁用转储,如果 dump=True ,则启用转储。
- dump_output_dir
- 该字符串对象表示转储结果的保存目录。
如需了解有关如何在 WeGO TensorFlow 2.x 中使用即时量化的更多信息,请参阅 WeGO 示例。