量化初探: 对称量化以及非对称量化

本文介绍了量化的定义及好处,包括减小内存占用、加速计算、降低功耗等。以ResNet - 50模型为例展示数据类型传递,还阐述了浮点数到整数量化中遇到的问题,并给出非对称量化和对称量化的解决方法及计算示例。

1. 量化的定义以及好处

量化(Quantization)是指将高精度浮点数表示为低精度整数的过程,从而提高神经网络的效率和性能。在能够接受一定的精度损失的情况下,可以有以下的好处:

  1. 减小内存占用

    • 模型大小减少:通过量化,我们可以将32位浮点数转换为较低位宽的数(例如8位整数)。这可以显著减少模型的大小,使其更容易在内存受限的设备上部署。
    • 减少带宽需求:模型大小的减少也意味着在下载或传输模型时需要的带宽减少。
  2. 加速计算

    • 特定硬件加速:很多硬件(例如Jetson)对低位宽的操作更有优势,因此量化模型可以更好地利用这些硬件特性。
    • 并行化:低位运算可以允许更高的并行度,从而进一步加速计算。
  3. 减小功耗和延迟

    • 减少计算复杂性:较低位宽的运算通常需要较少的计算资源,这意味着功耗可以降低。
    • 实时应用:在需要低延迟的场景(如自动驾驶或增强现实应用)中,量化可以帮助模型更快地做出预测。
  4. 部署灵活性:由于量化模型更小、更快,它们可以更容易地部署在各种设备上,包括但不限于智能手机、IoT设备和边缘计算设备。

  5. 提高能效比:在很多场景下,能效比(性能与功耗的比值)是一个关键指标。通过减少内存和计算需求,量化可以显著提高神经网络的能效比。

  6. 降低部署成本:使用小型、低功耗的硬件部署量化模型可以降低整体部署成本。

需要注意的是,虽然量化带来了很多好处,但也可能导致模型精度的损失。因此,在使用量化之前,建议进行详细的评估和测试,以确保模型的效果满足特定应用的需求。

2. 从ResNet看数据类型的传递

2.1 从torch里面导出一个ResNet-50模型

import torch
import torchvision.models as models

model = models.resnet50()
input = torch.randn(1, 3, 224, 224)

torch.onnx.export(model, input, "resnet50.onnx")

在这里插入图片描述

可以看出来,没有量化的模型是直接从输出一直传递FP32的数据类型到output,如下图

在这里插入图片描述

3. 浮点数到整数的量化中遇到的问题

PS. -128~127: int8(signed int8) 0-255: uint8(unsigned char)

1. 原始浮点数组

[-0.61, -0.52, 1.62]

2. 计算量化尺度(scale)

公式:

scale=float_max−float_minquant_max−quant_min \text{scale} = \frac{\text{float\_max} - \text{float\_min}}{\text{quant\_max} - \text{quant\_min}} scale=quant_maxquant_minfloat_maxfloat_min

插入数值:
scale=1.62−(−0.61)127−(−128)=0.00874509  \text{scale} = \frac{1.62 - (-0.61)}{127 - (-128)} = 0.00874509 \ scale=

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值