Pytorch 1.3.0 量化介绍

PyTorch 1.3.0 支持INT8量化,减少模型大小和内存需求,提高inference速度。量化包括逐tensor和逐channel非对称线性量化,通过特定的映射方程进行浮点到定点数转换。量化流程涉及动态和静态量化,以及量化感知训练,其中静态量化涉及模型准备、融合操作子、标定和转换等步骤。量化模型的准备需要将特定操作转换为模块,并指定量化位置。
摘要由CSDN通过智能技术生成

量化介绍

量化指的是使用比浮点精度更少的比特数来进行yi计算和存储的技术。一个量化后的模型使用整数tensor而不是浮点数tensor来执行一部分或全部的操作。这是一种更紧凑的模型表现方式,并且可以利用许多硬件平台上的高性能向量操作。PyTorch支持INT8的量化,相比于FP32,模型大小减少了4x,对内存带宽的需求也减少了4x。INT8操作的硬件支持使得其计算通常要比FP32快2-4倍。量化主要是一种加速inference的技术,量化后的操作也仅支持前向的计算。

PyTorch支持多种深度学习模型的量化方式。在大部分的情况下,模型使用FP32训练,然后被转换为INT8的模型。此外,PyTorch还支持量化感知的训练,可以将量化过程中出现的误差建模,通过fake-quantization模块进行前向和反向的计算。需要注意的是全部的计算是在浮点数上执行的。在量化感知训练最后,PyTorch提供了转换工具来吧训练好的模型转换为更低的精度。

从更底层的层面上,PyTorch提供了一种表示量化后的tensor的方式,同时使用它们进行计算。这些tensor可以被用来直接构建模型,并在低精度下完成所有的计算。同时也提供高级的API包含了典型的用最小的精度损失从FP32转换到低精度模型的工作流程。


量化tensor

PyTorch同时提供逐tensor与逐channel的非对称线性量化。逐tensor的量化意味着tensor内所有的值都被同样的尺度缩放。逐channel的量化意味着对于给定维度,通常是tensor的channel维度,tensor在该维度的每个切片会使用不同的缩放和偏移(这样缩放与偏移可以用向量的方式来表示),这样保证了在量化过程拥有更少的误差。

浮点数到定点数的转换过程使用了下面的映射方程:

Q ( x , s c a l e , z e r o _ p o i n t ) = r o u n d ( x s c a l e + z e r o _ p o i n t ) Q(x, sca

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值