DYNAMIC QUANTIZATION
Tutorials >PyTorch Recipes > Dynamic Quantization
doc
: Dynamic Quantization — PyTorch Tutorials 1.11.0+cu102 documentation
2022年5月24日
tag : 翻译学习
topic : Pytorch 量化
0 Dynamic Quantization
在本配方中,将介绍如何利用动态量化来加速 LSTM 风格的 递归神经网络 上的推理。
减小了模型权重的大小并加快了模型的执行速度。
1 Introduction
在设计神经网络时,进行许多权衡。在模型开发和训练期间,可以更改递归神经网络中的层数和参数数,并根据模型大小和/或模型延迟或吞吐量权衡准确性。此类更改可能需要大量时间和计算资源,因为正在迭代模型训练。量化提供了一种在训练完成后使用已知模型在性能和模型准确性之间进行类似权衡的方法。
可在单个会话中进行尝试,肯定可以看到模型大小显著减小,并且可以在不损失很多准确性的情况下显著减少延迟。
2 What is dynamic quantization?
量化网络意味着将其转换为对权重和/或激活使用精度较低的整数表示。这样可以降低模型大小,并允许在 CPU 或 GPU 上使用更高吞吐量的数学运算。
从浮点值转换为整数值时,实质上是将浮点值乘以某个比例因子,并将结果舍入为整数。各种量化方法的不同之处在于它们确定该比例因子的方式。
此处所述的动态量化的关键思想是,将根据运行时观察到的数据范围动态确定激活的比例因子。这可确保“调整”比例因子,以便保留有关每个观测数据集的尽可能多的信号。
另一方面,模型参数在模型转换期间是已知的,它们会提前转换并以INT8形式存储。
量化模型中的算术是使用矢量化的INT8指令完成的。通常使用 INT16 或 INT32 进行累积,以避免溢出。如果量化下一层或转换为FP32以进行输出,则此高精度值将缩小到INT8。
**动态量化相对不需要调整参数,**这使得它非常适合作为将LSTM模型转换为部署的标准部分添加到生产pipeline中。
注意
此处所采用方法的限制
此配方简要介绍了 PyTorch 中的动态量化功能以及使用它的工作流程。我们的重点是解释用于转换模型的特定函数。为了简洁明了,我们将进行一些重大的简化
- 从最小的LSTM网络开始
- 只需使用随机隐藏状态初始化网络即可
- 将使用随机输入测试网络
- 在本教程中,并不打算从新训练网络
- 将看到该网络的量化形式比我们开始的浮点网络更小,运行速度更快。
- 将看到输出值通常与FP32网络的输出值处于相同的大致值,但我们在这里不演示真实训练网络上的预期精度损失。
将看到如何完成动态量化,并能够看到内存使用和延迟时间的潜在减少。证明该技术可以在经过训练的LSTM上保持高水平的模型准确性,留给更高级的教程。如果想立即进行更高级的处理,请继续学习高级动态量化教程 advanced dynamic quantization tutorial.
3 Steps
这个食谱有5个步骤。
- 设置 - 在这里定义一个非常简单的LSTM,导入模块,并建立一些随机输入张量。
- 执行量化 - 在这里,您可以实例化浮点模型,然后创建其量化版本。
- 查看模型大小 - 在这里,显示模型大小变小。
- 查看延迟 - 在此处运行两个模型并比较模型运行