美文网首页
深度学习模型压缩之模型量化

深度学习模型压缩之模型量化

作者: 小黄不头秃 | 来源:发表于2023-07-03 17:25 被阅读0次

    我们在训练好了模型之后,在模型部署上线之前,我们通常会对模型进行优化。例如:我们的模型过大,使得模型无法部署到边缘设备上,我们需要对模型进行压缩,那么怎么对模型进行压缩和优化呢?

    我们需要在减小模型大小的同时,尽可能的维持模型原有精度。

    模型优化的方法:

    一、模型量化

    量化的路线与模型剪枝截然不同,剪枝是对不重要的神经元,卷积核等进行操作。量化更加简单粗暴,他直接将原本模型中的所有参数从原来的32位,减小成8位甚至是4位。简单来说,量化就是将训练好的网络的权重,激活值从高精度转化为低精度。

    量化的优点

    • 减少内存和存储的占用
    • 降低功耗
    • 提高计算速度

    量化的对象

    • 模型的权重
    • 激活函数的输出
    • 梯度

    量化的位数:8位、16位
    在pytorch的现在版本中,仅对CPU版本有量化的支持。

    官方教程:(beta) Static Quantization with Eager Mode in PyTorch — PyTorch Tutorials 2.0.1+cu117 documentation

    import os
    import sys
    import time
    import numpy as np
    
    import torch
    import torch.nn as nn
    from torch.utils.data import DataLoader
    
    import torchvision
    from torchvision import datasets
    import torchvision.transforms as transforms
    
    # Set up warnings
    import warnings
    warnings.filterwarnings(
        action='ignore',
        category=DeprecationWarning,
        module=r'.*'
    )
    warnings.filterwarnings(
        action='default',
        module=r'torch.ao.quantization'
    )
    
    # Specify random seed for repeatable results
    torch.manual_seed(191009)
    

    在forward函数中使用量化

    pytorch中对一个张量进行量化。

    import torch 
    
    x = torch.randn(3,3)
    xq = torch.quantize_per_tensor(x, scale=0.1, zero_point=8, dtype=torch.quint8)
    

    注意:这里的uint8并不是说要将32位小数要转化为整数,仅代表位数。

    量化还可以反量化,当然这里的反量化并不能还原成原来的值,仅仅是将数位进行拓展。

    x = torch.dequantize(xq)
    

    相关文章

      网友评论

          本文标题:深度学习模型压缩之模型量化

          本文链接:https://www.haomeiwen.com/subject/yazxudtx.html