0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí)模型量化方法

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2024-07-15 11:01 ? 次閱讀

深度學(xué)習(xí)模型量化概述

深度學(xué)習(xí)模型量化是一種重要的模型輕量化技術(shù),旨在通過減少網(wǎng)絡(luò)參數(shù)的比特寬度來減小模型大小和加速推理過程,同時盡量保持模型性能。從而達(dá)到把模型部署到邊緣或者低算力設(shè)備上,實現(xiàn)降本增效的目標(biāo)。

01定義

模型量化是指將神經(jīng)網(wǎng)絡(luò)的浮點算法轉(zhuǎn)換為定點算法,通常涉及將浮點數(shù)參數(shù)轉(zhuǎn)換為低位數(shù)的整數(shù),例如從32位浮點數(shù)(FP32)到8位整數(shù)(INT8)。這一技術(shù)通過減少模型中參數(shù)的位數(shù)來降低模型的存儲需求和計算復(fù)雜性。

02主要類型

靜態(tài)量化:

在模型訓(xùn)練后進(jìn)行,不涉及重新訓(xùn)練。它通常用于不需要細(xì)粒度調(diào)優(yōu)的場景。

動態(tài)量化:

在模型推理時進(jìn)行,對權(quán)重進(jìn)行量化,但保留中間激活的浮點數(shù)表示。它適用于那些需要保持較高推理精度的應(yīng)用。

量化感知訓(xùn)練QAT

QAT - Quantization Aware Training, 在訓(xùn)練過程中將量化考慮在內(nèi),通過模擬低精度的效果來訓(xùn)練模型。這種方法可以最大限度地減少量化對模型精度的影響。

03量化方法

均勻量化:

所有權(quán)重與激活值被量化到均勻間隔的離散值上。這簡化了量化的實現(xiàn),是一種普遍使用的量化方法。

非均勻量化:

考量到分布的不均勻性,通過對數(shù)或其他方式量化,目的是最小化量化前后的信號失真。

對稱與非對稱量化:

對稱量化在正負(fù)數(shù)值上使用相同的量化間隔,非對稱量化則允許正負(fù)數(shù)值有不同的量化間隔。

常用量化框架

當(dāng)前工業(yè)界常用的主流量化工具與框架主要有以下三種!

01PyTorch(torch.quantization)

支持訓(xùn)練后量化。PyTorch的量化支持主要包括三種方式:訓(xùn)練后動態(tài)量化(Post Training Dynamic Quantization)、訓(xùn)練后靜態(tài)量化(Post Training Static Quantization)以及量化感知訓(xùn)練(Quantization Aware Training, QAT)。

訓(xùn)練后量化

1. 訓(xùn)練后動態(tài)量化

概述:訓(xùn)練后動態(tài)量化是指在模型訓(xùn)練完成后,僅對模型的權(quán)重進(jìn)行量化,而激活(activations)在推理過程中進(jìn)行量化。這種方式適用于那些對精度要求不是特別高,但需要快速部署的場景。

特點:

簡單易用:不需要重新訓(xùn)練模型,只需要對訓(xùn)練好的模型進(jìn)行量化。 性能提升:與浮點數(shù)模型相比,量化后的模型在推理速度上會有顯著提升,同時模型大小也會減小。 示例代碼:

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層進(jìn)行量化 
    dtype=torch.qint8 
)

2. 訓(xùn)練后靜態(tài)量化

概述:訓(xùn)練后靜態(tài)量化是指對模型訓(xùn)練完成后,不僅對權(quán)重進(jìn)行量化,還對激活進(jìn)行量化。這種方式需要收集一些代表性的數(shù)據(jù)來標(biāo)定(calibrate)量化參數(shù),以確保量化后的模型精度盡可能接近原始模型。由于同時量化了權(quán)重和激活,因此量化后的模型精度通常比動態(tài)量化更高。需要收集代表性的數(shù)據(jù)來標(biāo)定量化參數(shù)。

示例流程:

1. 準(zhǔn)備標(biāo)定數(shù)據(jù)集。

2. 加載并準(zhǔn)備模型(設(shè)置eval模式,并附加量化配置)。

3. 使用標(biāo)定數(shù)據(jù)集對模型進(jìn)行標(biāo)定,以收集權(quán)重和激活的分布信息。

4. 將標(biāo)定后的模型轉(zhuǎn)換為量化模型。

量化感知訓(xùn)練(QAT)

雖然QAT不屬于訓(xùn)練后量化的范疇,但它是另一種重要的量化方式,值得提及。QAT是在模型訓(xùn)練過程中插入偽量化模塊,模擬量化效應(yīng),從而提高模型對量化操作的適應(yīng)能力。這種方式可以在一定程度上彌補(bǔ)靜態(tài)量化在精度上的損失。

02OpenVINO NCCF

OpenVINO NCCF(Neural Network Compression Framework)量化框架是OpenVINO工具套件中的一個重要組成部分,旨在幫助開發(fā)者通過量化技術(shù)優(yōu)化深度學(xué)習(xí)模型的性能。OpenVINO NCCF是一個用于深度學(xué)習(xí)模型壓縮的框架,它提供了多種壓縮算法,包括量化、剪枝、蒸餾等,以幫助開發(fā)者減小模型大小、提高推理速度和降低功耗。量化作為其中的一種重要技術(shù),通過將模型中的浮點數(shù)參數(shù)轉(zhuǎn)換為整數(shù),實現(xiàn)了模型的壓縮和加速。

OpenVINO NCCF量化流程

OpenVINO NCCF量化流程通常包括以下幾個步驟:

模型準(zhǔn)備:

首先,需要有一個訓(xùn)練好的深度學(xué)習(xí)模型,該模型可以是PyTorch、TensorFlow等框架下的模型。

模型轉(zhuǎn)換:

將訓(xùn)練好的模型轉(zhuǎn)換為OpenVINO的中間表示(IR)格式。這一步是可選的,但轉(zhuǎn)換為IR格式可以更好地利用OpenVINO的優(yōu)化功能。

量化配置:

配置量化參數(shù),包括量化精度(如INT8、FP16等)、量化策略(如對稱量化、非對稱量化等)以及量化目標(biāo)設(shè)備(如CPU、GPU等)。

量化執(zhí)行:

使用OpenVINO NCCF提供的量化工具或API對模型進(jìn)行量化。這一步通常包括前向傳播以收集統(tǒng)計信息、計算量化參數(shù)以及應(yīng)用量化參數(shù)到模型權(quán)重和激活中。

模型評估:

對量化后的模型進(jìn)行評估,以驗證量化對模型精度的影響。如果精度損失在可接受范圍內(nèi),則可以繼續(xù)使用量化后的模型;否則,需要調(diào)整量化參數(shù)并重新執(zhí)行量化。

模型部署:

將量化后的模型部署到目標(biāo)設(shè)備上,進(jìn)行實際的推理任務(wù)。

OpenVINO NCCF量化優(yōu)勢

高精度保持:

OpenVINO NCCF提供了多種量化策略和算法,可以幫助開發(fā)者在保持模型精度的同時實現(xiàn)顯著的壓縮和加速。

硬件支持:

OpenVINO NCCF支持多種硬件平臺,包括Intel CPU、GPU、FPGA等,使得量化后的模型可以在不同的硬件上實現(xiàn)高效的推理。

易用性:

OpenVINO NCCF提供了豐富的API和工具,使得開發(fā)者可以輕松地集成和使用量化功能,無需深入了解底層的量化算法和優(yōu)化技術(shù)。

ResNet18的圖像分類模型FP32與INT8量化版本推理速度比較:

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

在OpenVINO的官方文檔和社區(qū)中,可以找到關(guān)于NCCF量化的詳細(xì)示例和教程。這些示例通常包括模型準(zhǔn)備、轉(zhuǎn)換、量化、評估和部署等整個流程,為開發(fā)者提供了寶貴的參考和指導(dǎo)。

03TensorRT量化框架

TensorRT量化是深度學(xué)習(xí)模型優(yōu)化的一種重要手段,它通過將模型中的參數(shù)(如權(quán)重)從浮點數(shù)(如FP32)轉(zhuǎn)換為整數(shù)(如INT8)來減少模型的存儲和計算成本,從而達(dá)到模型壓縮和運(yùn)算加速的目的。

TensorRT量化的基本概念

NVIDIA的TensorRT是一個高性能的深度學(xué)習(xí)推理優(yōu)化器,它支持多種深度學(xué)習(xí)框架(如TensorFlow、PyTorch等)的模型,并提供了一系列的優(yōu)化技術(shù),包括量化、層融合、動態(tài)張量等,以加速深度學(xué)習(xí)模型的推理速度。

TensorRT量化的目標(biāo) 減少模型大?。?/p>

通過量化,可以將模型的參數(shù)從浮點數(shù)轉(zhuǎn)換為整數(shù),從而顯著減少模型的存儲需求。

加速推理速度:

在支持INT8等低精度整數(shù)運(yùn)算的硬件上,使用量化后的模型可以顯著提高推理速度。

降低功耗:

在一些嵌入式或移動設(shè)備上,使用量化后的模型可以降低功耗,延長設(shè)備的使用時間。

TensorRT量化的實現(xiàn)方式

TensorRT支持多種量化方式,主要包括隱式量化和顯式量化兩種:

隱式量化:

在TensorRT的早期版本中,隱式量化是主要的量化方式。它不需要修改模型結(jié)構(gòu)或訓(xùn)練代碼,只需要在模型推理過程中使用TensorRT提供的量化工具進(jìn)行量化。隱式量化通常適用于訓(xùn)練后量化(PTQ)場景。

顯式量化:

從TensorRT 8.0版本開始,顯式量化得到了全面支持。顯式量化允許在模型訓(xùn)練過程中插入量化指令(如QDQ操作),并在模型推理過程中使用TensorRT進(jìn)行量化。顯式量化可以提供更高的量化精度和更好的性能優(yōu)化。

TensorRT量化的校準(zhǔn)方法

在TensorRT中,量化過程中需要使用校準(zhǔn)數(shù)據(jù)集來確定量化參數(shù)(如縮放因子和零點)。TensorRT支持多種校準(zhǔn)方法,包括熵校準(zhǔn)和最小最大值校準(zhǔn)等:

熵校準(zhǔn):

熵校準(zhǔn)是一種動態(tài)校準(zhǔn)算法,它使用KL散度(KL Divergence)來度量推理數(shù)據(jù)和校準(zhǔn)數(shù)據(jù)之間的分布差異。在校準(zhǔn)過程中,TensorRT會分析每個張量的分布,并選擇合適的量化參數(shù)以最小化KL散度。

最小最大值校準(zhǔn):

最小最大值校準(zhǔn)使用最小最大值算法來計算量化參數(shù)。在校準(zhǔn)過程中,TensorRT會統(tǒng)計校準(zhǔn)數(shù)據(jù)中的最小值和最大值,并根據(jù)這些值來計算量化參數(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3112

    瀏覽量

    48658
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5463

    瀏覽量

    120888
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    802

    瀏覽量

    13115

原文標(biāo)題:深度學(xué)習(xí)模型量化方法與框架介紹

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    量化算法介紹及其特點分析

    模型量化作為一種能夠有效減少模型大小,加速深度學(xué)習(xí)推理的優(yōu)化技術(shù),已經(jīng)得到了學(xué)術(shù)界和工業(yè)界的廣泛研究和應(yīng)用。
    發(fā)表于 07-26 08:08

    深度學(xué)習(xí)模型是如何創(chuàng)建的?

    具有深度學(xué)習(xí)模型的嵌入式系統(tǒng)應(yīng)用程序帶來了巨大的好處。深度學(xué)習(xí)嵌入式系統(tǒng)已經(jīng)改變了各個行業(yè)的企業(yè)和組織。
    發(fā)表于 10-27 06:34

    什么是深度學(xué)習(xí)?使用FPGA進(jìn)行深度學(xué)習(xí)的好處?

    ,即使使用具有一定低位寬的數(shù)據(jù),深度學(xué)習(xí)推理也不會降低最終精度。目前據(jù)說8位左右可以提供穩(wěn)定的準(zhǔn)確率,但最新的研究表明,已經(jīng)出現(xiàn)了即使降低到4位或2位也能獲得很好準(zhǔn)確率的模型學(xué)習(xí)方法
    發(fā)表于 02-17 16:56

    模型驅(qū)動深度學(xué)習(xí)的標(biāo)準(zhǔn)流程與學(xué)習(xí)方法解析

    模型驅(qū)動的深度學(xué)習(xí)方法近年來,深度學(xué)習(xí)在人工智能領(lǐng)域一系列困難問題上取得了突破性成功應(yīng)用。
    的頭像 發(fā)表于 01-24 11:30 ?4883次閱讀
    <b class='flag-5'>模型</b>驅(qū)動<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的標(biāo)準(zhǔn)流程與<b class='flag-5'>學(xué)習(xí)方法</b>解析

    針對線性回歸模型深度學(xué)習(xí)模型,介紹了確定訓(xùn)練數(shù)據(jù)集規(guī)模的方法

    學(xué)習(xí)模型的表現(xiàn)會按照冪定律持續(xù)提升。例如,有人曾用深度學(xué)習(xí)方法對三億張圖像進(jìn)行分類,發(fā)現(xiàn)模型的表現(xiàn)隨著訓(xùn)練數(shù)據(jù)規(guī)模的增長按對數(shù)關(guān)系提升。
    的頭像 發(fā)表于 05-05 11:03 ?6087次閱讀

    深度學(xué)習(xí)模型壓縮與加速綜述

    目前在深度學(xué)習(xí)領(lǐng)域分類兩個派別,一派為學(xué)院派,研究強(qiáng)大、復(fù)雜的模型網(wǎng)絡(luò)和實驗方法,為了追求更高的性能;另一派為工程派,旨在將算法更穩(wěn)定、高效的落地在硬件平臺上,效率是其追求的目標(biāo)。復(fù)雜
    的頭像 發(fā)表于 06-08 17:26 ?5171次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>模型</b>壓縮與加速綜述

    基于深度學(xué)習(xí)的視頻質(zhì)量評價方法模型研究

    視頻質(zhì)量評價(VQA)是以人眼的主觀質(zhì)量評估結(jié)果為依據(jù),使用算法模型對失真視頻進(jìn)行評估。傳統(tǒng)的評估方法難以做到主觀評價結(jié)果與客觀評價結(jié)果相一致?;?b class='flag-5'>深度學(xué)習(xí)的視頻質(zhì)量評價
    發(fā)表于 03-29 15:46 ?81次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的視頻質(zhì)量評價<b class='flag-5'>方法</b>及<b class='flag-5'>模型</b>研究

    結(jié)合基擴(kuò)展模型深度學(xué)習(xí)的信道估計方法

    結(jié)合基擴(kuò)展模型深度學(xué)習(xí)的信道估計方法
    發(fā)表于 06-30 10:43 ?62次下載

    模型為什么是深度學(xué)習(xí)的未來?

    與傳統(tǒng)機(jī)器學(xué)習(xí)相比,深度學(xué)習(xí)是從數(shù)據(jù)中學(xué)習(xí),而大模型則是通過使用大量的模型來訓(xùn)練數(shù)據(jù)。
    的頭像 發(fā)表于 02-16 11:32 ?2050次閱讀

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

    深度學(xué)習(xí)模型量化支持深度學(xué)習(xí)模型部署框架支持的一種輕
    的頭像 發(fā)表于 07-18 09:34 ?3442次閱讀
    YOLOv8<b class='flag-5'>模型</b>ONNX格式INT8<b class='flag-5'>量化</b>輕松搞定

    深度學(xué)習(xí)模型優(yōu)化與調(diào)試方法

    深度學(xué)習(xí)模型在訓(xùn)練過程中,往往會遇到各種問題和挑戰(zhàn),如過擬合、欠擬合、梯度消失或爆炸等。因此,對深度學(xué)習(xí)
    的頭像 發(fā)表于 07-01 11:41 ?643次閱讀

    深度學(xué)習(xí)中的模型權(quán)重

    深度學(xué)習(xí)這一充滿無限可能性的領(lǐng)域中,模型權(quán)重(Weights)作為其核心組成部分,扮演著至關(guān)重要的角色。它們不僅是模型學(xué)習(xí)的基石,更是
    的頭像 發(fā)表于 07-04 11:49 ?801次閱讀

    深度學(xué)習(xí)中的時間序列分類方法

    的發(fā)展,基于深度學(xué)習(xí)的TSC方法逐漸展現(xiàn)出其強(qiáng)大的自動特征提取和分類能力。本文將從多個角度對深度學(xué)習(xí)在時間序列分類中的應(yīng)用進(jìn)行綜述,探討常用
    的頭像 發(fā)表于 07-09 15:54 ?653次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型量化的基本方法

    深度神經(jīng)網(wǎng)絡(luò)模型量化深度學(xué)習(xí)領(lǐng)域中的一種重要優(yōu)化技術(shù),旨在通過減少模型參數(shù)的精度(即從高精度浮
    的頭像 發(fā)表于 07-15 11:26 ?569次閱讀

    AI大模型深度學(xué)習(xí)的關(guān)系

    AI大模型深度學(xué)習(xí)之間存在著密不可分的關(guān)系,它們互為促進(jìn),相輔相成。以下是對兩者關(guān)系的介紹: 一、深度學(xué)習(xí)是AI大
    的頭像 發(fā)表于 10-23 15:25 ?300次閱讀