概述 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

推断是一个计算密集型进程,需要大量存储器带宽来满足边缘 (Edge) 应用的低时延和高吞吐量要求。

量化和通道剪枝技巧不仅可以应对这些挑战,同时也能实现最优性能和高能效,并最大程度减少精度劣化。量化能使整数计算单元变得行之有效,并且权重与激活能以更低的精度来呈现。另一方面,剪枝可以减少所需的运算总量。AMD Vitis AI 量化器包含量化工具,而剪枝工具则集成在 Vitis AI 优化器内。

图 1. 剪枝和量化流程

通常,进行神经网络训练时,使用的是 32 位浮点权重和激活值。 Vitis AI 量化器可将 32 位浮点权重和激活转换为 8 位整数 (INT8) 格式,这样即可降低计算复杂性,而不会损失预测精度。定点网络模型的部署所需的存储器带宽更少,因此相比浮点模型,速度更快且能效更高。Vitis AI 量化器支持神经网络中存在公用层,包括但不限于卷积、池化、完全连接和批量归一。

Vitis AI 量化器支持 TensorFlow(1.x 和 2.x)以及 PyTorch。量化器名称分别为 vai_q_tensorflow 和 vai_q_pytorch。在 Vitis AI 2.5 和更低版本中,适用于 TensorFlow 1.x 的 Vitis AI 量化器是基于 TensorFlow 1.15 来运作的,并且包含在 TensorFlow 1.15 程序包内一起发布。但从 Vitis AI 3.0 起,Vitis AI 量化器作为独立 Python 包来提供,其中特别提供了多个同时适用于 TensorFlow 1.x 和 TensorFlow 2.x 的量化 API。您导入此包后,Vitis AI 量化器即可以 TensorFlow 插件的方式来运作。

表 1. Vitis AI 量化器支持的框架和功能
模型 版本 功能特性
训练后量化 (PTQ) 量化感知训练 (QAT) 快速微调(高级校准) 检查器
TensorFlow 1.x 支持 1.15 支持 支持 支持 不支持
TensorFlow 2.x 支持 2.3 - 2.12 支持 支持 支持 支持
PyTorch 支持 1.2 到 1.13 和 2.0 支持 支持 支持 支持

训练后量化 (PTQ) 只需少量未标记的图像便可分析激活分布。训练后量化的运行时间因神经网络大小而异,少则数秒,多则数分钟。通常量化后,精度会有所下降,但在可接受范围内。然而,精度损失对于某些网络(如 Mobilenet)而言可能过大,甚至是难以承受的。在此类情况下,量化感知训练 (QAT) 可以进一步改善量化模型的精度。要执行 QAT,就需要原始训练数据集。此进程需要多轮微调,微调持续时间从几分钟到几小时不等。执行 QAT 时,建议使用较小的学习率。

注释:Vitis AI 1.4 起,“训练后量化”一词取代了“量化校准”一词,“量化感知训练”则取代了“量化微调”。
注释: Vitis AI 仅执行有符号量化。强烈建议应用标准化,其中包含通过缩放输入像素值来得到零均值和单位方差。它能确保 DPU 看到的值在 [-1.0, +1.0] 范围内。使用缩放后的无符号输入(将原始输入除以 255.0 以获得 [0.0, 1.0] 的范围)会导致动态范围丢失,因为输入范围仅用了一半。TensorFlow 2.x 和 PyTorch 量化器会提供配置来执行无符号量化用于实验。目前,对于 DPU 而言,由此获得的结果尚无法部署。
注释: 使用 Netron 之类的工具查看模型时,对于某些层而言,存在一个 fix_point 参数,它表示用于该层的量化参数。fix_point 参数表示所使用的小数位数。例如,如果 8 位有符号量化含 fix_point = 7,那么 Q-format 表示法会显示 Q0.7,即,1 个符号位、0 个整数位和 7 个小数位。要将 Q-format 的整数值转换为浮点,请将该整数值乘以 2^-fixed_point。

对于训练后量化,会实现跨层均衡算法 1 。跨层均衡可以提升校准性能,对于包含逐通道卷积的网络尤其如此。

通过少量未标记的数据,AdaQuant 算法 2 不仅可以对激活进行校准,还可以对权重进行微调。AdaQuant 使用少量未标记的数据(与训练后量化相似),但它会改变模型,这与微调类似。Vitis AI 量化器可实现此算法,并将其称为“快速微调”或“高级校准”。相比于训练后量化,快速微调能达成更高性能,但速度稍慢。
注释: 对于快速微调,每一轮运行都会得到不同结果。这与微调类似。

参考资料

  1. Markus Nagel 等,《Data-Free Quantization through Weight Equalization and Bias Correction》,arXiv:1906.04721, 2019。
  2. Itay Hubara 等,《Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming》,arXiv:2006.10518, 2020。