pytorch 模型量化处理及导出onnx格式模型

文章展示了如何使用PyTorch进行模型量化,以减少模型大小、提高推理速度。通过创建一个简单的模型,应用静态量化、融合算子、准备和转换模型到int8格式,并导出为ONNX模型。之后,通过ORT(InferenceSession)运行ONNX模型,计算与原始fp32模型的输出差异,以验证量化后的精度损失。

量化处理可以加快推理速度,减少模型占用空间 ,提高推理性能的必要选择。

量化时需要对算子进行量化处理,对输入数据fp32格式进行量化处理到int8, 再输入模型中。

最后测试了两种模型相对于torch原始模型的误差均值。

注意安装 onnx/onnxruntime 

pip install onnx
pip install onnxruntime

import torch
import torch.quantization


class M(torch.nn.Module):
    def __init__(self):
        super(M, self).__init__()
        self.quant = torch.quantization.QuantStub()  # 静态量化时量化桩用于量化数据
        self.conv = torch.nn.Conv2d(1, 1, 1)
        self.relu = torch.nn.ReLU()
        self.dequant = torch.quantization.DeQuantStub() #取消量化桩

    def forward(self, x):
        x = self.quant(x) #量化数据,从fp32->uint8
        x = self.conv(x)  #量化后conv
        x = self.relu(x)    #量化后relu
        x = self.dequant(x) #恢复量化变量为fp32
        return x

# create a model instance
model_fp32 = M()  #创建模型
model_fp32.eval() #推理模式
model_fp32.qconfig = torch.quantization.get_default_qconfig('fbgemm') #设置量化配置
model_fp32_fused = torch.quantization.fuse_modules(model_fp32, [['co
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值