0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习模型量化方法

OpenCV学堂 来源:OpenCV学堂 2024-07-15 11:01 次阅读

深度学习模型量化概述

深度学习模型量化是一种重要的模型轻量化技术,旨在通过减少网络参数的比特宽度来减小模型大小和加速推理过程,同时尽量保持模型性能。从而达到把模型部署到边缘或者低算力设备上,实现降本增效的目标。

01定义

模型量化是指将神经网络的浮点算法转换为定点算法,通常涉及将浮点数参数转换为低位数的整数,例如从32位浮点数(FP32)到8位整数(INT8)。这一技术通过减少模型中参数的位数来降低模型的存储需求和计算复杂性。

02主要类型

静态量化:

在模型训练后进行,不涉及重新训练。它通常用于不需要细粒度调优的场景。

动态量化:

在模型推理时进行,对权重进行量化,但保留中间激活的浮点数表示。它适用于那些需要保持较高推理精度的应用。

量化感知训练QAT

QAT - Quantization Aware Training, 在训练过程中将量化考虑在内,通过模拟低精度的效果来训练模型。这种方法可以最大限度地减少量化对模型精度的影响。

03量化方法

均匀量化:

所有权重与激活值被量化到均匀间隔的离散值上。这简化了量化的实现,是一种普遍使用的量化方法。

非均匀量化:

考量到分布的不均匀性,通过对数或其他方式量化,目的是最小化量化前后的信号失真。

对称与非对称量化:

对称量化在正负数值上使用相同的量化间隔,非对称量化则允许正负数值有不同的量化间隔。

常用量化框架

当前工业界常用的主流量化工具与框架主要有以下三种!

01PyTorch(torch.quantization)

支持训练后量化。PyTorch的量化支持主要包括三种方式:训练后动态量化(Post Training Dynamic Quantization)、训练后静态量化(Post Training Static Quantization)以及量化感知训练(Quantization Aware Training, QAT)。

训练后量化

1. 训练后动态量化

概述:训练后动态量化是指在模型训练完成后,仅对模型的权重进行量化,而激活(activations)在推理过程中进行量化。这种方式适用于那些对精度要求不是特别高,但需要快速部署的场景。

特点:

简单易用:不需要重新训练模型,只需要对训练好的模型进行量化。 性能提升:与浮点数模型相比,量化后的模型在推理速度上会有显著提升,同时模型大小也会减小。 示例代码:

import torch 
from torch import nn 
from torch.quantization import quantize_dynamic 




class DemoModel(nn.Module): 
    def __init__(self): 
        super(DemoModel, self).__init__() 
        self.conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=1) 
        self.relu = nn.ReLU() 
        self.fc = nn.Linear(2, 2) 


    def forward(self, x): 
        x = self.conv(x) 
        x = self.relu(x) 
        x = self.fc(x) 
        return x 


model_fp32 = DemoModel() 
model_int8 = quantize_dynamic( 
    model=model_fp32, 
    qconfig_spec={nn.Linear},  # 仅对Linear层进行量化 
    dtype=torch.qint8 
)

2. 训练后静态量化

概述:训练后静态量化是指对模型训练完成后,不仅对权重进行量化,还对激活进行量化。这种方式需要收集一些代表性的数据来标定(calibrate)量化参数,以确保量化后的模型精度尽可能接近原始模型。由于同时量化了权重和激活,因此量化后的模型精度通常比动态量化更高。需要收集代表性的数据来标定量化参数。

示例流程:

1. 准备标定数据集。

2. 加载并准备模型(设置eval模式,并附加量化配置)。

3. 使用标定数据集对模型进行标定,以收集权重和激活的分布信息

4. 将标定后的模型转换为量化模型。

量化感知训练(QAT)

虽然QAT不属于训练后量化的范畴,但它是另一种重要的量化方式,值得提及。QAT是在模型训练过程中插入伪量化模块,模拟量化效应,从而提高模型对量化操作的适应能力。这种方式可以在一定程度上弥补静态量化在精度上的损失。

02OpenVINO NCCF

OpenVINO NCCF(Neural Network Compression Framework)量化框架是OpenVINO工具套件中的一个重要组成部分,旨在帮助开发者通过量化技术优化深度学习模型的性能。OpenVINO NCCF是一个用于深度学习模型压缩的框架,它提供了多种压缩算法,包括量化、剪枝、蒸馏等,以帮助开发者减小模型大小、提高推理速度和降低功耗。量化作为其中的一种重要技术,通过将模型中的浮点数参数转换为整数,实现了模型的压缩和加速。

OpenVINO NCCF量化流程

OpenVINO NCCF量化流程通常包括以下几个步骤:

模型准备:

首先,需要有一个训练好的深度学习模型,该模型可以是PyTorch、TensorFlow等框架下的模型。

模型转换:

将训练好的模型转换为OpenVINO的中间表示(IR)格式。这一步是可选的,但转换为IR格式可以更好地利用OpenVINO的优化功能。

量化配置:

配置量化参数,包括量化精度(如INT8、FP16等)、量化策略(如对称量化、非对称量化等)以及量化目标设备(如CPUGPU等)。

量化执行:

使用OpenVINO NCCF提供的量化工具或API对模型进行量化。这一步通常包括前向传播以收集统计信息、计算量化参数以及应用量化参数到模型权重和激活中。

模型评估:

对量化后的模型进行评估,以验证量化对模型精度的影响。如果精度损失在可接受范围内,则可以继续使用量化后的模型;否则,需要调整量化参数并重新执行量化。

模型部署:

将量化后的模型部署到目标设备上,进行实际的推理任务。

OpenVINO NCCF量化优势

高精度保持:

OpenVINO NCCF提供了多种量化策略和算法,可以帮助开发者在保持模型精度的同时实现显著的压缩和加速。

硬件支持:

OpenVINO NCCF支持多种硬件平台,包括Intel CPU、GPU、FPGA等,使得量化后的模型可以在不同的硬件上实现高效的推理。

易用性:

OpenVINO NCCF提供了丰富的API和工具,使得开发者可以轻松地集成和使用量化功能,无需深入了解底层的量化算法和优化技术。

ResNet18的图像分类模型FP32与INT8量化版本推理速度比较:

cca197ba-3cc6-11ef-a4c8-92fbcf53809c.png

在OpenVINO的官方文档和社区中,可以找到关于NCCF量化的详细示例和教程。这些示例通常包括模型准备、转换、量化、评估和部署等整个流程,为开发者提供了宝贵的参考和指导。

03TensorRT量化框架

TensorRT量化是深度学习模型优化的一种重要手段,它通过将模型中的参数(如权重)从浮点数(如FP32)转换为整数(如INT8)来减少模型的存储和计算成本,从而达到模型压缩和运算加速的目的。

TensorRT量化的基本概念

NVIDIA的TensorRT是一个高性能的深度学习推理优化器,它支持多种深度学习框架(如TensorFlow、PyTorch等)的模型,并提供了一系列的优化技术,包括量化、层融合、动态张量等,以加速深度学习模型的推理速度。

TensorRT量化的目标 减少模型大小:

通过量化,可以将模型的参数从浮点数转换为整数,从而显著减少模型的存储需求。

加速推理速度:

在支持INT8等低精度整数运算的硬件上,使用量化后的模型可以显著提高推理速度。

降低功耗:

在一些嵌入式或移动设备上,使用量化后的模型可以降低功耗,延长设备的使用时间。

TensorRT量化的实现方式

TensorRT支持多种量化方式,主要包括隐式量化和显式量化两种:

隐式量化:

在TensorRT的早期版本中,隐式量化是主要的量化方式。它不需要修改模型结构或训练代码,只需要在模型推理过程中使用TensorRT提供的量化工具进行量化。隐式量化通常适用于训练后量化(PTQ)场景。

显式量化:

从TensorRT 8.0版本开始,显式量化得到了全面支持。显式量化允许在模型训练过程中插入量化指令(如QDQ操作),并在模型推理过程中使用TensorRT进行量化。显式量化可以提供更高的量化精度和更好的性能优化。

TensorRT量化的校准方法

在TensorRT中,量化过程中需要使用校准数据集来确定量化参数(如缩放因子和零点)。TensorRT支持多种校准方法,包括熵校准和最小最大值校准等:

熵校准:

熵校准是一种动态校准算法,它使用KL散度(KL Divergence)来度量推理数据和校准数据之间的分布差异。在校准过程中,TensorRT会分析每个张量的分布,并选择合适的量化参数以最小化KL散度。

最小最大值校准:

最小最大值校准使用最小最大值算法来计算量化参数。在校准过程中,TensorRT会统计校准数据中的最小值和最大值,并根据这些值来计算量化参数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3023

    浏览量

    48285
  • 深度学习
    +关注

    关注

    73

    文章

    5418

    浏览量

    120548
  • pytorch
    +关注

    关注

    2

    文章

    793

    浏览量

    12986

原文标题:深度学习模型量化方法与框架介绍

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    量化算法介绍及其特点分析

    模型量化作为一种能够有效减少模型大小,加速深度学习推理的优化技术,已经得到了学术界和工业界的广泛研究和应用。
    发表于 07-26 08:08

    深度学习模型是如何创建的?

    具有深度学习模型的嵌入式系统应用程序带来了巨大的好处。深度学习嵌入式系统已经改变了各个行业的企业和组织。
    发表于 10-27 06:34

    什么是深度学习?使用FPGA进行深度学习的好处?

    ,即使使用具有一定低位宽的数据,深度学习推理也不会降低最终精度。目前据说8位左右可以提供稳定的准确率,但最新的研究表明,已经出现了即使降低到4位或2位也能获得很好准确率的模型学习方法
    发表于 02-17 16:56

    模型驱动深度学习的标准流程与学习方法解析

    模型驱动的深度学习方法近年来,深度学习在人工智能领域一系列困难问题上取得了突破性成功应用。
    的头像 发表于 01-24 11:30 4816次阅读
    <b class='flag-5'>模型</b>驱动<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的标准流程与<b class='flag-5'>学习方法</b>解析

    针对线性回归模型深度学习模型,介绍了确定训练数据集规模的方法

    学习模型的表现会按照幂定律持续提升。例如,有人曾用深度学习方法对三亿张图像进行分类,发现模型的表现随着训练数据规模的增长按对数关系提升。
    的头像 发表于 05-05 11:03 5988次阅读

    深度学习模型压缩与加速综述

    目前在深度学习领域分类两个派别,一派为学院派,研究强大、复杂的模型网络和实验方法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目标。复杂
    的头像 发表于 06-08 17:26 5077次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>压缩与加速综述

    基于深度学习的视频质量评价方法模型研究

    视频质量评价(VQA)是以人眼的主观质量评估结果为依据,使用算法模型对失真视频进行评估。传统的评估方法难以做到主观评价结果与客观评价结果相一致。基于深度学习的视频质量评价
    发表于 03-29 15:46 81次下载
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的视频质量评价<b class='flag-5'>方法</b>及<b class='flag-5'>模型</b>研究

    什么?不用GPU也能加速你的YOLOv3深度学习模型

    解决烦恼,让你的深度学习模型效率“一节更比七节强”! Neural Magic是专门研究深度学习的稀疏
    的头像 发表于 06-10 15:33 2192次阅读
    什么?不用GPU也能加速你的YOLOv3<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>

    结合基扩展模型深度学习的信道估计方法

    结合基扩展模型深度学习的信道估计方法
    发表于 06-30 10:43 62次下载

    模型为什么是深度学习的未来?

    与传统机器学习相比,深度学习是从数据中学习,而大模型则是通过使用大量的模型来训练数据。
    的头像 发表于 02-16 11:32 1945次阅读

    YOLOv8模型ONNX格式INT8量化轻松搞定

    深度学习模型量化支持深度学习模型部署框架支持的一种轻
    的头像 发表于 07-18 09:34 3155次阅读
    YOLOv8<b class='flag-5'>模型</b>ONNX格式INT8<b class='flag-5'>量化</b>轻松搞定

    深度学习模型优化与调试方法

    深度学习模型在训练过程中,往往会遇到各种问题和挑战,如过拟合、欠拟合、梯度消失或爆炸等。因此,对深度学习
    的头像 发表于 07-01 11:41 417次阅读

    深度学习中的模型权重

    深度学习这一充满无限可能性的领域中,模型权重(Weights)作为其核心组成部分,扮演着至关重要的角色。它们不仅是模型学习的基石,更是
    的头像 发表于 07-04 11:49 363次阅读

    深度学习中的时间序列分类方法

    的发展,基于深度学习的TSC方法逐渐展现出其强大的自动特征提取和分类能力。本文将从多个角度对深度学习在时间序列分类中的应用进行综述,探讨常用
    的头像 发表于 07-09 15:54 308次阅读

    深度神经网络模型量化的基本方法

    深度神经网络模型量化深度学习领域中的一种重要优化技术,旨在通过减少模型参数的精度(即从高精度浮
    的头像 发表于 07-15 11:26 426次阅读