模型壓縮技術(二),模型量化讓模型“輕裝上陣”

一、技術應用背景

在人工智能蓬勃發展的浪潮下,大模型在自然語言處理、計算機視覺等諸多領域大放異彩,像知名的GPT以及各類開源大語言模型,其規模與復雜度持續攀升。然而,這一發展也帶來了挑戰,模型越大,對計算資源和存儲資源的索求便越高。

在實際應用場景中,無論是將模型部署于云端服務器,還是讓其在邊緣設備上運行,資源受限的問題都十分突出。比如手機、智能音箱這類邊緣設備,它們的硬件計算能力和內存空間相對有限,難以承載龐大的原始模型運行。在此背景下,大模型量化技術應需而生,其核心目標就是要破解模型在資源受限環境下如何實現高效運行的難題。

二、底層原理

(一)信息的數字化表示

在計算機的世界里,數據是以二進制的形式來存儲和處理的。對于大模型中的權重和激活值而言,其原始的表示形式通常為32位的浮點數(float32)。一個32位浮點數由符號位、指數位和尾數位這三部分構成,憑借這樣的結構,它能夠精準地呈現各種各樣的實數。但這種高精度的表示方式也有弊端,那就是會占用較多的存儲空間。而量化技術的關鍵思路,就是運用更少的比特數來對這些數據進行表示,比如把32位浮點數轉化成8位整數(int8)甚至比特數更低的形式。如下圖,meta-Llama-3-8B模型FP32大小為32GB,用Int8量化后為8GB。
在這里插入圖片描述

(二)量化過程

量化的操作過程類似給數據劃分“格子”。以將float32量化到int8為例來詳細說明,假設原始數據的取值范圍是[-1, 1],我們要做的是把這個范圍映射到int8的取值范圍[-128, 127]。具體步驟如下:
首先,要確定一個縮放因子(scale),比如通過公式scale = 255 / (1 - (-1)) 來計算得出。接著,將原始的float32數據乘以這個scale,并按照四舍五入的規則取最接近的整數,如此一來,這個整數就會落入int8的取值范圍之中。而在進行推理運算時,還需要將int8數據再除以scale,以此還原回近似的原始值來開展后續的計算。通過這樣的方式,就實現了從float32到int8的量化和反量化過程,就如同在左邊的float32取值范圍和右邊的量化后的int8取值范圍之間,搭建起了一座通過縮放因子實現映射的“橋梁”。

三、技術實現方式

(一)訓練后量化(Post - Training Quantization)

這種量化方式是在模型完成訓練之后才進行的操作。具體而言,先是在全精度(如float32)的條件下完成模型的訓練,之后再對已經訓練好的權重和激活值實施量化。其中,常見的方法是線性量化,也就是前面所提到的依據縮放因子來開展量化的方式。訓練后量化具有實現起來較為簡單的優勢,并且不需要對模型進行重新訓練,所以它很適合用于那些需要快速完成部署的場景。例如,在一些對精度要求并非特別嚴苛的圖像分類應用場景中,直接針對訓練好的模型開展訓練后量化操作,能夠迅速地降低模型的大小,同時也能減少推理時的計算量。

(二)量化感知訓練(Quantization - Aware Training)

此方式是在模型的訓練過程當中就將量化的影響納入考慮范疇。在訓練階段,會模擬量化的實際過程,讓模型從訓練之時就能夠適應低比特數的表示形式。詳細來講,在進行反向傳播計算梯度時,會針對量化操作采取特殊的處理手段,使得模型參數在訓練進程中可以適應由于量化而產生的精度損失。量化感知訓練這種方法能夠在一定程度上降低量化對模型精度所造成的影響,所以它比較適用于那些對精度要求相對較高的應用場景,比如醫療影像識別領域中所運用的大模型。

四、對模型的利弊影響

(一)利

  1. 顯著減少存儲空間:以從32位浮點數量化到8位整數為例,經過量化后,模型的存儲需求能夠降低大約4倍。這對于那些存儲資源有限的設備,或者是在進行大規模模型部署的情況而言,無疑是大大削減了存儲成本。
  2. 有效加速推理過程:低比特數的數據在進行計算時,硬件的計算效率會更高。例如,在一些能夠支持int8計算的硬件加速器上,模型的推理速度能夠得到顯著的提升。這樣一來,模型便可以更迅速地響應外界的請求,進而有效提升用戶的使用體驗。
  3. 切實降低能耗:由于計算量有所減少,并且硬件的計算效率也得到了提升,所以模型在運行過程中的能耗會隨之降低。對于邊緣設備來講,更低的能耗就意味著能夠擁有更長的電池續航時間,這在實際使用中是非常具有優勢的。

(二)弊

  1. 存在精度損失風險:量化操作本質上是運用有限的離散值去近似原始的連續值,所以不可避免地會帶來一定程度的精度損失。在一些對精度要求極高的任務當中,比如金融風險預測等領域,經過量化后的模型很可能無法滿足相應的精度要求。
  2. 調優工作較為復雜:量化感知訓練這種方式需要在訓練過程中對更多的超參數進行調整,以此來平衡量化所帶來的各種影響,這無疑增加了模型訓練以及調優工作的復雜性。而且,不同的量化方法以及量化比特數對模型精度的影響也各不相同,所以需要開展大量的實驗來篩選出最為合適的量化方案。

大模型量化技術實則是在努力尋求模型性能與資源限制之間的平衡,盡管它目前還存在一些局限性,但隨著相關技術的不斷發展與優化,量化技術必然會在大模型的廣泛應用中發揮愈發重要的作用,從而讓大模型能夠在更多的場景中“輕裝上陣”,為人工智能的進一步普及和發展提供堅實有力的支持。大模型壓縮技術還有模型蒸餾技術,可以看看。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71756.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習:愚者未完成的詩篇(零)

當算法在數據海洋中打撈支離破碎的韻律時,機器學習系統展現出的智慧如同斷臂的維納斯雕像——完美與殘缺構成令人戰栗的美學悖論。愚者,在詞語的混沌中編織邏輯經緯,卻總在即將觸及詩性本質的瞬間,暴露出認知維度的致命裂隙。 一…

【算法題】小魚的航程

問題: 分析 分析題目,可以看出,給你一個開始的星期,再給一個總共天數,在這些天內,只有周六周日休息,其他全要游泳250公里。 那分支處理好啦 當星期為6時,需要消耗2天,…

GStreamer —— 2.5、Windows下Qt加載GStreamer庫后運行 - “教程5:GUI 工具包集成(gtk)“(附:完整源碼)

運行效果 簡介 上一個教程演示了時間管理及seek操作。本教程介紹如何將 GStreamer 集成到圖形用戶中 接口 (GUI) 工具包,如 GTK。基本上 GStreamer 負責媒體播放,而 GUI 工具包處理 用戶交互。最有趣的部分是那些 庫必須進行交互&…

NLTK和jieba

NLTK與jieba概述 自然語言處理(NLP)領域是計算機科學領域與人工智能領域中的一個重要方向,主要研究方向是實現人與計算機之間用自然語言進行有效通信的各種理論和方法。 在自然語言處理領域中,文本類型的數據占據著很大的市場&a…

linux查看定時任務與設置定時任務

一、查看定時任務 使用 cron 查看當前用戶的定時任務: bash crontab -l # 查看當前用戶的cron任務 查看系統級定時任務: bash 系統級任務通常存放在以下位置: cat /etc/crontab # 系統主配置文件 ls /etc/cron.d/ # 系統級任務片段 ls /…

DeepSeek-R1本地化部署(Mac)

一、下載 Ollama 本地化部署需要用到 Ollama,它能支持很多大模型。官方網站:https://ollama.com/ 點擊 Download 即可,支持macOS,Linux 和 Windows;我下載的是 mac 版本,要求macOS 11 Big Sur or later,Ol…

支持向量簡要理解

決策方程符合感知機區分理論,我們基于線性代數來看這滿足子空間理論,可以獲取得到超平面。 支持向量機的目標是尋找最與超平面最近的點的最大距離,而距離計算如上,符合數學上計算點到線(面)的距離公式。 …

使用OpenCV和MediaPipe庫——實現人體姿態檢測

目錄 準備工作如何在Windows系統中安裝OpenCV和MediaPipe庫? 安裝Python 安裝OpenCV 安裝MediaPipe 驗證安裝 代碼邏輯 整體代碼 效果展示 準備工作如何在Windows系統中安裝OpenCV和MediaPipe庫? 安裝Python 可以通過命令行運行python --versio…

5G學習筆記之BWP

我們只會經歷一種人生,我們選擇的人生。 參考:《5G NR標準》、《5G無線系統指南:如微見著,賦能數字化時代》 目錄 1. 概述2. BWP頻域位置3. 初始與專用BWP4. 默認BWP5. 切換BWP 1. 概述 在LTE的設計中,默認所有終端均能處理最大2…

創建Electron35 + vue3 + electron-builder項目,有很過坑,記錄過程

環境: node v20.18.0 npm 11.1.0 用到的所有依賴: "dependencies": {"core-js": "^3.8.3","vue": "^3.2.13","vue-router": "^4.5.0"},"devDependencies": {"ba…

Linux下安裝elasticsearch(Elasticsearch 7.17.23)

Elasticsearch 是一個分布式的搜索和分析引擎,能夠以近乎實時的速度存儲、搜索和分析大量數據。它被廣泛應用于日志分析、全文搜索、應用程序監控等場景。 本文將帶你一步步在 Linux 系統上安裝 Elasticsearch 7.17.23 版本,并完成基本的配置&#xff0…

NVIDIA顯卡驅動、CUDA、cuDNN 和 TensorRT 版本匹配指南

一、驅動安裝 1、下載驅動 前往NVIDIA驅動下載頁,輸入顯卡型號和操作系統類型,選擇≥目標CUDA版本要求的驅動版本?。 2、安裝驅動? ?Windows?:雙擊安裝包按向導操作。?Linux?:建議使用apt或官方.run文件安裝?。 3、驗證…

plt和cv2有不同的圖像表示方式和顏色通道順序

在處理圖像時,matplotlib.pyplot (簡稱 plt) 和 OpenCV (簡稱 cv2) 有不同的圖像表示方式和顏色通道順序。了解這些區別對于正確處理和顯示圖像非常重要。 1. 圖像形狀和顏色通道順序 matplotlib.pyplot (plt) 形狀:plt 通常使用 (height, width, cha…

基于PyTorch的深度學習5——神經網絡工具箱

可以學習如下內容: ? 介紹神經網絡核心組件。 ? 如何構建一個神經網絡。 ? 詳細介紹如何構建一個神經網絡。 ? 如何使用nn模塊中Module及functional。 ? 如何選擇優化器。 ? 動態修改學習率參數。 5.1 核心組件 神經網絡核心組件不多,把這些…

模擬調制技術詳解

內容摘要 本文系統講解模擬調制技術原理及Matlab實現,涵蓋幅度調制的四種主要類型:雙邊帶抑制載波調幅(DSB-SC)、含離散大載波調幅(AM)、單邊帶調幅(SSB)和殘留邊帶調幅(…

aws(學習筆記第三十一課) aws cdk深入學習(batch-arm64-instance-type)

aws(學習筆記第三十一課) aws cdk深入學習 學習內容: 深入練習aws cdk下部署batch-arm64-instance-type 1. 深入練習aws cdk下部署batch-arm64-instance-type 代碼鏈接 代碼鏈接 代碼鏈接 -> batch-arm64-instance-type之前代碼學習 之前學習代碼鏈接 -> aw…

讀書報告」網絡安全防御實戰--藍軍武器庫

一眨眼,20天過去了,刷完了這本書「網絡安全防御實戰--藍軍武器庫」,回味無窮,整理概覽如下,可共同交流讀書心得。在閱讀本書的過程中,我深刻感受到網絡安全防御是一個綜合性、復雜性極高的領域。藍軍需要掌…

生成任務,大模型

一個生成項目 輸入:文字描述(但是給的數據集是一串數字,id,ct描述,醫生描述) 輸出:診斷報告 一、數據處理 import pandas as pd #處理表格數據pre_train_file "data/train.csv"tr…

Spring Boot API 項目中 HAProxy 與 Nginx 的選擇與實踐

在開發 Spring Boot 構建的 RESTful API 項目時,負載均衡和反向代理是提升性能與可用性的關鍵環節。HAProxy 和 Nginx 作為兩種流行的工具,經常被用于流量分發,但它們各有側重。究竟哪一個更適合你的 Spring Boot API 項目?本文將…

Java常用集合與映射的線程安全問題深度解析

Java常用集合與映射的線程安全問題深度解析 一、線程安全基礎認知 在并發編程環境下,當多個線程同時操作同一集合對象時,若未采取同步措施,可能導致以下典型問題: 數據競爭:多個線程同時修改數據導致結果不可預測狀…