推断是一个计算密集型进程,需要大量存储器带宽来满足边缘 (Edge) 应用的低时延和高吞吐量要求。
量化和通道剪枝技巧不仅可以应对这些挑战,同时也能实现最优性能和高能效,并最大程度减少精度劣化。量化能使整数计算单元变得行之有效,并且权重与激活能以更低的精度来呈现。另一方面,剪枝可以减少所需的运算总量。AMD Vitis AI 量化器包含量化工具,而剪枝工具则集成在 Vitis AI 优化器内。
通常,进行神经网络训练时,使用的是 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 插件的方式来运作。
模型 | 版本 | 功能特性 | |||
---|---|---|---|---|---|
训练后量化 (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 时,建议使用较小的学习率。
对于训练后量化,会实现跨层均衡算法 1 。跨层均衡可以提升校准性能,对于包含逐通道卷积的网络尤其如此。
参考资料
- Markus Nagel 等,《Data-Free Quantization through Weight Equalization and Bias Correction》,arXiv:1906.04721, 2019。
- Itay Hubara 等,《Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming》,arXiv:2006.10518, 2020。