2.5、校准算法

本文介绍了PPQ中的校准方法,包括kl、mse、minmax、isotone和percentile,用于计算网络量化参数。通过QSetting调整量化校准参数,并详细说明了相关参数如OBSERVER_KL_HIST_BINS、OBSERVER_PERCENTILE和OBSERVER_MSE_HIST_BINS的调整方式。此外,还提到了ENABLE_CUDA_KERNEL方法对量化速度的影响,以及graphwise_error_analyse工具用于分析量化误差。建议关注网络输出节点的误差,以保持量化精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在 PPQ 中我们提供许多校准方法,这些校准方法将计算出网络的量化参数
让我们调整校准算法来尝试降低误差

code

from typing import Iterable

import torch
import torchvision
from ppq import QuantableOperation, TargetPlatform, graphwise_error_analyse
from ppq.api import quantize_torch_model
from ppq.api.interface import (ENABLE_CUDA_KERNEL, dispatch_graph,
                               dump_torch_to_onnx, load_onnx_graph, quantize_native_model)
from ppq.api.setting import QuantizationSettingFactory

# ------------------------------------------------------------
# 在 PPQ 中我们提供许多校准方法,这些校准方法将计算出网络的量化参数
# 这个脚本将以随机数据和 mobilenet v2 网络为例向你展示它们的使用方法
# ------------------------------------------------------------

BATCHSIZE   = 32
INPUT_SHAPE = [BATCHSIZE, 3, 224, 224]
DEVICE      = 'cuda'
PLATFORM    = TargetPlatform.TRT_INT8

def load_calibration_dataset() -> Iterable:
    # ------------------------------------------------------------
    # 让我们从创建 calibration 数据开始做起, PPQ 需要你送入 32 ~ 1024 个样本数据作为校准数据集
    # 它们应该尽可能服从真实样本的分布,量化过程如同训练过程一样存在可能的过拟合问题
    # 你应当保证校准数据是经过正确预处理的、有代表性的数据,否则量化将会失败;校准数据不需要标签;数据集不能乱序
    # ------------------------------------------------------------
    return [torch.rand(size=INPUT_SHAPE) for _ in range(32)]
CALIBRATION = load_calibration_dataset()

def collate_fn(batch: torch.Tensor) -> torch.Tensor:
    return batch.to(DEVICE)

# ------------------------------------------------------------
# 我们使用 mobilenet v2 作为一个样例模型
# PPQ 将会使用 torch.onnx.export 函数 把 pytorch 的模型转换为 onnx 模型
# 对于复杂的 pytorch 模型而言,你或许需要自己完成 pytorch 模型到 onnx 的转换过程
# ------------------------------------------------------------
model = torchvision.models.mobilenet.mobilenet_v2(pretrained=True)
model = model.to(DEVICE)

# ------------------------------------------------------------
# PPQ 提供 kl, mse, minmax, isotone, percentile(默认) 五种校准方法
# 每一种校准方法还有更多参数可供调整,PPQ 也允许你单独调整某一层的量化校准方法
# 在这里我们首先展示以 QSetting 的方法调整量化校准参数(推荐)
# ------------------------------------------------------------
QSetting = QuantizationSettingFactory.default_setting()
QSetting.quantize_activation_setting.calib_algorithm = 'kl'
QSetting.quantize_parameter_setting.calib_algorithm  = 'minmax'
# ------------------------------------------------------------
# 更进一步地,当你选择了某种校准方法,你可以进入 ppq.core.common
# OBSERVER_KL_HIST_BINS, OBSERVER_PERCENTILE, OBSERVER_MSE_HIST_BINS 皆是与校准方法相关的可调整参数
# OBSERVER_KL_HIST_BINS - KL 算法相关的箱子个数&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nsq_ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值