llama.cpp gguf主要量化方法

量化是一種通過降低模型參數的表示精度來減少模型的大小和計算存儲需求的方法,如把單精度fp32轉化為int8來減少存儲和計算成本。

常見的是線性量化,公式?r = S(q-Z),將實數值r映射為量化的整數值q,其中縮放因子S和零點Z根據參數分布統計計算得來。

以下是幾種llama.cpp采用的主要量化方法。

1 傳統量化方法

Qx_y命名,x是量化位數,比如4、5、6等,y是0或1,0表示對稱量化,1表示非對稱量化。

對稱量化是在正負范圍內是對稱的,零點是0。

w = q * block_scale

非對稱量化允許零點偏移,適應于數據均值非0的情況,因此也比對稱量化多一個參數。

w = q * block_scale + block_minimum

每個量化塊包含32個權重,量化權重可以通過位移、按位與和乘法來快速解碼,對非對稱變體還需要加法。

llama.cpp傳統量化示例:

Q8_0:?8-bit舍入到最近值量化,每個塊32個權重,權重公式: ?w = q * block_scale.

Q8_1:?8-bit 舍入到最近值量化,每個塊32個權重, 權重公式:?w = q * block_scale + block_minimum.

Q4_0: 5-bit舍入到最近值量化,每個塊32個權重,權重公式: ?w = q * block_scale.

Q4_1: 5-bit 舍入到最近值量化,每個塊32個權重, 權重公式:?w = q * block_scale + block_minimum.

Q4_0: 4-bit舍入到最近值量化,每個塊32個權重,權重公式: ?w = q * block_scale.

Q4_1: 4-bit 舍入到最近值量化,每個塊32個權重, 權重公式:?w = q * block_scale + block_minimum.

2 K系列量化方法

不僅對權重進行量化,還對尺度因子block_scale和零點block_minimum再次進行量化,實現層次化的量化。

每256個權重組成一個超級塊,層次化量化過程如下

1)首先以組大小16,對權重進行初始量化,如此1個超級塊有256/16=16個尺度因子。

2)對初始尺度因子再次進行量化,得到一個二階的尺度因子,減少了存儲這些輔助信息的空間。

llama.cpp K系列量化示例:

Q8_K: 8位量化,每個超塊有256個權重,僅用于量化中間結果,適用于2-6位點積運算,權重公式 w = q * block_scale

Q6_K:? 8位量化,超塊有16個塊組成,每個塊16個權重,權重公式 w = q * block_scale(8位),平均每個權重6.5625位。

Q5_K: 5位量化,超塊有8個塊組成,每個塊32個權重,權重公式 w = q * block_scale(6位) +?block_minimum(6位),平均每個權重5.5位。

Q4_K: 4位量化,超塊有8個塊組成,每個塊32個權重,權重公式 w = q * block_scale(6位) +?block_minimum(6位),平均每個權重4.5位。

Q3_K: 3位量化,超塊有16個塊組成,每個塊16個權重,權重公式 w = q * block_scale(6位) ,平均每個權重3.4375位。

Q2_K:?4位量化,超塊有8個塊組成,每個塊32個權重,權重公式 w = q * block_scale(4位) +?block_minimum(4位),平均每個權重2.5625位。

3 IQ系列量化方法

使用了矢量量化和重要性矩陣

1)矢量量化,就是將多個權重視為一個矢量,在高維空間一起量化,捕捉了權重之間的相關性。這些矢量被影射到一個預訓練碼本(cookbook)中的某個條目,如此條目編號就可以表示一起量化的n個權重,所需空間約為原始權重空間的1/n。

2)重要性矩陣,利用重要性矩陣對權重進行分組,評估每個權重或組的重要性程度,對重要的權重使用更精細和碼本或更高的量化精度,對不太重要的權重使用更粗略的碼本或更低的量化精度。

這類量化方法還有一些特別后綴,比如M、S、XS、XXS,表示的是碼本的精細程度,碼本越小,模型的壓縮率越大。

llama.cpp IQ系列量化示例:

IQ4_NL:?4位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得。

IQ4_XS:?4位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重4.25位。

IQ3_S: 3位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重3.44位。

IQ3_XXS: 3位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重3.06位。

IQ2_XXS: 2位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重2.06位。

IQ2_S: 2位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重2.5位。

IQ2_XS: 2位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重2.31位。

IQ1_S: 1位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重1.56位。

IQ1_M: 1位量化,每個超塊有256個權重,權重通過super_block_sacle和重要性矩陣獲得,平均每權重1.75位。

---

llama.cpp

https://github.com/ggml-org/llama.cpp

gguf

https://huggingface.co/docs/hub/gguf

GGUF量化原理詳解

https://www.zhihu.com/question/633365088

在mac m1基于llama.cpp運行deepseek

https://blog.csdn.net/liliang199/article/details/149246699

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

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

相關文章

汽車級MCU選型新方向:eVTOL垂槳控制監控芯片的替代選型技術分析

摘要:隨著eVTOL(電動垂直起降航空器)領域的蓬勃發展,對于高性能、高可靠性的垂槳控制監控芯片的需求日益迫切。本文旨在深入探討汽車級MCU(微控制單元)在這一新興領域的應用潛力,以國科安芯推出…

Deepoc具身智能大模型:送餐機器人如何學會“讀心術”

Deepoc具身智能大模型:送餐機器人如何學會“讀心術”深夜十點的商場火鍋店,一臺銀色機器人正穿越喧鬧的人群。當它感知到奔跑的兒童突然變向,驅動輪立即反向微調0.3度;托盤上的牛油鍋底因顧客推椅產生晃動,平衡系統瞬間…

學習設計模式《十七》——狀態模式

一、基礎概念 狀態模式的本質是【根據狀態來分離和選擇行為】。 狀態模式的定義:允許一個對象在其內部狀態改變時改變它的行為;對象看起來似乎修改了它的類。 認識狀態模式序號認識狀態模式說明1狀態和行為通常指的是對象實例的屬性的值;而行…

python的婚紗影樓管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具:Navicat/SQLyog等都可以 隨著婚紗…

濾波電路Multisim電路仿真實驗匯總——硬件工程師筆記

目錄 1 濾波電路基礎知識 1.1 濾波電路的分類 1.1.1 按頻率選擇性分類 1.1.2 按實現方式分類 1.2 濾波電路的設計 1.2.1 確定濾波器類型 1.2.2 計算截止頻率 1.2.3 選擇濾波階數 1.2.4 考慮元件參數 1.2.5 仿真驗證 1.3 濾波電路的應用 1.3.1 電源濾波 1.3.2 音頻…

C++隨機打亂函數:簡化源碼與原理深度剖析

文章目錄一、Fisher-Yates洗牌算法核心原理二、std::random_shuffle簡化實現與缺陷分析簡化源碼(核心邏輯)原理層面的致命缺陷三、std::shuffle的現代改進與實現簡化源碼(核心邏輯)原理層面的關鍵改進四、隨機數生成器工作原理URB…

DBeaver連接MySQL8.0報錯Public Key Retrieval is not allowed

DBeaver 鏈接本地mysql8.0服務報錯Public Key Retrieval is not allowed為什么會出現這個錯誤?MySQL 8.0 默認使用新的認證插件:caching_sha2_password某些客戶端(比如老版本的 JDBC 驅動或配置不當的 DBeaver)在連接時&#xff0…

SpringBoot系列—統一功能處理(攔截器)

上篇文章: SpringBoot系列—MyBatis-plushttps://blog.csdn.net/sniper_fandc/article/details/148979284?fromshareblogdetail&sharetypeblogdetail&sharerId148979284&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 攔…

《匯編語言:基于X86處理器》第7章 整數運算(3)

本章將介紹匯編語言最大的優勢之一:基本的二進制移位和循環移位技術。實際上,位操作是計算機圖形學、數據加密和硬件控制的固有部分。實現位操作的指令是功能強大的工具,但是高級語言只能實現其中的一部分,并且由于高級語言要求與平臺無關&am…

應用筆記|數字化儀在醫學SS-OCT中的應用

引言近些年來,OCT(光學相干斷層掃描,Optical Coherence Tomography)作為一種非破壞性3D光學成像技術逐漸在醫學眼科設備中流行起來。OCT可提供實時一維深度或二維截面或三維立體的圖像,分辨率可達微米(μm&…

Ubuntu 22.04與24.04 LTS版本對比分析及2025年使用建議

Ubuntu 22.04與24.04 LTS版本對比分析及2025年使用建議 在2025年的技術環境下,Ubuntu 22.04和24.04 LTS各有優勢,選擇哪一個取決于具體應用場景和用戶需求。經過對系統內核、桌面環境、軟件生態、生命周期支持等多方面因素的綜合分析,本報告將…

Linux進程的生命周期:狀態定義、轉換與特殊場景

前言 在Linux系統中,進程是資源分配和調度的基本單位,而進程狀態則是理解進程行為的關鍵。從運行中的任務(TASK_RUNNING)到僵尸進程(EXIT_ZOMBIE),每個狀態都反映了進程在內核調度、資源等待或父…

神經網絡簡介

大腦的基本計算單位是神經元(neuron)。人類的神經系統中大約有860億個神經元,它們被大約10^14-10^15個突觸(synapses)連接起來。下面圖表的左邊展示了一個生物學的神經元,右邊展示了一個常用的數學模型。每…

多路由協議融合與網絡服務配置實驗(電視機實驗)

多路由協議融合與網絡服務配置實驗文檔 一、實驗用途和意義 (一)用途 本實驗模擬企業復雜網絡環境,整合 OSPF、RIPv2 動態路由協議,結合 DHCP、FTP、Telnet 服務配置及訪問控制策略,實現多區域網絡互聯、服務部署與…

在指定conda 環境里安裝 jupyter 和 python kernel的方法

在 Conda 的指定環境中安裝 Jupyter 和 Python Kernel 是一個常見操作,以下是詳細步驟,確保在指定環境中正確配置 Jupyter 和 Python Kernel: 1. 準備工作 確保已安裝 Anaconda 或 Miniconda,Conda 環境管理工具可用。確認已創建或計劃使用的 Conda 環境。2. 步驟:安裝 J…

【數據結構與算法】數據結構初階:詳解順序表和鏈表(四)——單鏈表(下)

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 🍉學習方向:C/C方向 ??人生格言:為天地立心,為生民立命,為…

Java+AI精準廣告革命:實時推送系統實戰指南

? 廣告推送的世紀難題 用戶反感&#xff1a;72%用戶因無關廣告卸載APP 轉化率低&#xff1a;傳統推送轉化率<0.5% 資源浪費&#xff1a;40%廣告預算被無效曝光消耗 &#x1f9e0; 智能廣告系統架構 &#x1f525; 核心模塊實現&#xff08;Java 17&#xff09; 1. 實時…

JVM組成及運行流程 - 面試筆記

JVM整體架構 JVM&#xff08;Java Virtual Machine&#xff09;是Java程序運行的核心環境&#xff0c;主要由以下幾個部分組成&#xff1a;1. 程序計數器&#xff08;Program Counter&#xff09; 特點&#xff1a;線程私有&#xff0c;每個線程都有獨立的程序計數器作用&#…

JavaEE——線程池

目錄前言1. 概念2. 線程池相關參數3. Executors的使用總結前言 線程是為了解決進程太重的問題&#xff0c;操作系統中進程的創建和銷毀需要較多的系統資源&#xff0c;用了輕量級的線程來代替部分線程&#xff0c;但是如果線程創建和銷毀的頻率也開始提升到了一定程度&#xf…

3 c++提高——STL常用容器(一)

目錄 1 string容器 1.1 string基本概念 1.2 string構造函數 1.3 string賦值操作 1.4 string字符串拼接 1.5 string查找和替換 1.6 string字符串比較 1.7 string字符存取 1.8 string插入和刪除 1.9 string子串 2 vector容器 2.1 vector基本概念 2.2 vector構造函數…