BitsAndBytes(簡稱 BnB)是一個用于“壓縮”大語言模型的工具包

BitsAndBytes(簡稱 BnB)是一個用于“壓縮”大語言模型的工具包,能把模型從原來的16位或32位,壓成4位或8位,減少顯存占用,同時保持盡量高的精度。


🧩 為什么叫 Bits and Bytes?

它的名字就揭示了它的本質:

  • Bits(比特):指的是更小單位的表示,比如 4-bit、8-bit 的低精度表示。
  • Bytes(字節):指的是標準 8-bit 表示 或 更多位的數據。
    合在一起,意思是“控制模型用多少位來表示參數”,從而節省資源。

💡 為什么要用 BitsAndBytes?

訓練/推理 大型語言模型(LLaMA、GPT、Mistral 等)時,如果使用原始精度(16-bit float),會導致:

  • 顯存爆炸(16GB 顯卡跑不動)
  • 加載速度慢
  • 部署成本高

而 BitsAndBytes 允許我們把模型壓縮成 8-bit 或 4-bit,讓你:

? 在消費級顯卡上運行
? 加載更快
? 精度損失小,可控


🔢 舉例說明:原始模型 vs BnB 壓縮模型

以 LLaMA 2-7B 模型為例:

模型格式占用顯存(大概)精度情況
FP16 原始模型14~16 GB精度最高
BnB 8-bit 模型8~9 GB精度接近
BnB 4-bit 模型4~5.5 GB精度略降

🔧 技術實現

BitsAndBytes 使用了兩種核心壓縮方式:

壓縮類型說明舉例
8-bit 量化把每個參數從 16-bit → 8-bit數值范圍從 ±65536 → ±256
4-bit 量化每個參數用 4-bit 表示,更極限一個 float 壓縮為 16 分之一大小

它也提供了三種主流 量化模式(不用深究,但知道名字有用):

  • nf4(最常用,效果穩定)
  • fp4(浮點 4bit)
  • int4(整數 4bit)

🧪 示例:怎么用 BitsAndBytes 加載壓縮模型(Python)

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import BitsAndBytesConfig# 配置 4-bit 加載
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype="float16",  # 用 fp16 來計算bnb_4bit_quant_type="nf4",         # 用 NF4 量化算法
)model_name = "unsloth/llama-3.1-8b-unsloth-bnb-4bit"model = AutoModelForCausalLM.from_pretrained(model_name,quantization_config=bnb_config,device_map="auto"
)tokenizer = AutoTokenizer.from_pretrained(model_name)

📌 總結一下,說得更簡單點:

  • BitsAndBytes 就是個壓縮工具包,能讓大模型“瘦身”,輕松跑在普通電腦上;
  • 你只要看到 bnb-4bit、bnb-8bit,就知道用了這個工具
  • Unsloth 只是把它優化得更厲害一些而已

🧱 1. 什么是「量化(Quantization)」?

把模型里那些“高精度的數字”變成“低精度的小數字”,以此來減少模型體積、降低顯存占用、提升加載速度


🎯 舉個例子:

比如你有個模型參數是:

原始值:0.123456789(float32,32位)

如果我們只保留4位小數:

量化后:0.1235(float16 或 8-bit 或 4-bit)

你會失去一點精度,但整體性能幾乎沒變,資源節省巨大!


🧠 2. FP16 是什么?

? 定義:

  • FP16 = “16-bit Floating Point”
  • 是一種精度比 float32 低、但比 8-bit 高的數據格式

? 用途:

  • 用來訓練或推理大型模型時節省內存
  • 精度和速度之間取得平衡,幾乎不影響模型效果

🔢 3. 什么是 4-bit?

? 定義:

  • 表示每個參數只用 4位(半個字節)來存儲
  • 比 FP16(16位)壓縮了 4倍

? 代價:

  • 節省顯存最多
  • 但精度有所降低(不同算法影響不同)

🛠? 4. BitsAndBytes 是什么?

? 定義:

BitsAndBytes(簡稱 BnB)是一個庫,用于自動把大模型做成 8-bit 或 4-bit 的壓縮版本,并且保持它們能在 GPU 上跑。

? 用法:

  • 在 Transformers 中加載模型時配合使用:
from transformers import BitsAndBytesConfig

? 支持的壓縮方式:

模式含義用處
bnb-8bit8-bit 量化精度幾乎不降,省一半顯存
bnb-4bit4-bit 量化精度略降,顯存最省

🧱 5. 什么是 bnb-4bit?

? 定義:

就是“使用 BitsAndBytes 工具,將模型壓縮成 4bit 精度的版本”。

你看到名字中有:

llama-2-7b-bnb-4bit

就說明這個模型:

  • 是用 BitsAndBytes 壓成了 4-bit
  • 通常占用顯存為原始的 1/4 ~ 1/3
  • 精度比 FP16 略低,但在很多實際應用中,效果差異不大

🧩 總結一下:區別和聯系

術語類別是啥?舉例和別人啥關系
量化技術名詞降低模型精度壓縮模型FP32 → 8bit → 4bit總稱,下面幾種都屬于量化方式
FP16精度類型用16位浮點表示參數原始模型的精簡版是一種 中等壓縮的量化方式
4-bit精度類型每個參數只用4位表示參數值范圍更小精度最低,但節省顯存最多
BitsAndBytes工具把模型壓成 4bit/8bit 工具bnb-4bit 就是它壓的實現量化的工具庫
bnb-4bit文件/模型后綴使用 BitsAndBytes 做的 4-bit 模型llama-2-7b-bnb-4bit是 4-bit 的一種具體實現方式

📌 舉個通俗場景類比

想象你有一本書:

格式類比
FP32原版硬皮精裝書
FP16紙質平裝版
bnb-8bit黑白復印本
bnb-4bit縮印+刪圖版手冊

你還能看懂它在講啥,但體積輕多了。


? 如果你在開發中怎么選?

你擁有的資源推薦格式使用方式
顯卡很強(A100/4090)FP16 或 FP32不用壓縮,保持最佳精度
顯卡一般(8GB)bnb-4bit用 BitsAndBytes 量化運行
CPU 推理GGUF+CPU 模式用 llama.cpp 加載 .gguf

🧠 一句話總結:

FP32、FP16、8bit、4bit 都是表示數字的格式,表示的越精細,占用的空間越大。
壓縮后模型運行更快、顯存占用更小,但精度也會降低。


📦 它們的關系(由高到低精度):

格式全稱精度(位)精度高嗎?顯存占用舉例
FP32Float 32位32-bit?????🟥最大0.1234567890123456(精確)
FP16Float 16位16-bit????☆🟧中等0.1234(舍去一部分小數)
8bit整數8位8-bit??☆☆☆🟨小0.12(小數更少)
4bit整數4位4-bit?☆☆☆☆🟩最小0.1(最粗略的近似)

💬 用比喻來說:

格式類比成衣服定制
FP32高級西裝,按厘米剪裁(超精準)
FP16成衣店西裝,按大中小分尺碼(較精準)
8bit淘寶快時尚,按身高估尺碼(能穿)
4bit地攤衣服,只分男女(湊合能穿)

🔢 用數字實際表示的范圍與精度

假設你要保存數字 0.123456789

格式實際能保存成啥
FP320.123456789 (全部保留)
FP160.1235(只保留4位有效)
8bit0.12(可能只有兩位有效)
4bit0.1(基本靠近大概意思)

🧪 舉個真實例子:加載 LLaMA2-7B 模型

格式模型大小顯存要求精度變化是否可訓練
FP3214GB+28~32GB無損? 可訓練
FP16~13GB14~16GB幾乎無損? 可訓練
8bit~8GB8~9GB有些誤差? 通常只推理
4bit~4.2GB5~6GB精度損失多? 通常只推理

🔧 技術區別

格式類型是否浮點描述
FP32浮點數? 是32位浮點,訓練 & 推理標準格式
FP16浮點數? 是用一半的位表示 float
8bit整數/量化? 否一般用于推理(int8)
4bit整數/量化? 否極致壓縮,用于推理(int4)

? 什么時候用哪個?

你有的顯存/算力推薦格式原因
>= 32GB 顯存FP32最高精度,適合訓練
>= 16GB 顯存FP16精度接近 FP32,適合訓練和推理
>= 8GB 顯存8bit可跑大模型推理,損失精度較少
>= 4GB 顯存4bit極限壓縮,僅用于推理,速度快

🧠 總結一句話:

想省資源用 4bit 或 8bit,
想高精度用 FP16 或 FP32,
模型越小、速度越快,精度也會越低。


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

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

相關文章

【前端】 Vue 3 中二次封裝組件

在 Vue 3 中二次封裝組件是提高代碼復用性和維護性的重要手段。以下是詳細的封裝方法和最佳實踐: 一、封裝原則 功能擴展:在原有組件基礎上添加新功能定制樣式:統一項目的 UI 設計規范簡化接口:隱藏復雜邏輯,提供簡潔…

分布式詞表示(Distributed Word Representation):自然語言處理的核心基石

分布式詞表示(Distributed Word Representation):自然語言處理的核心基石 在自然語言處理(NLP)領域,如何將離散的詞匯轉化為計算機可理解的數值形式,一直是技術突破的關鍵。傳統的獨熱編碼&…

Windows Playwright NotImplementedError問題深究

原文鏈接&#xff1a;Windows Playwright NotImplementedError問題深究 < Ping通途說 0. 引言 今天來看一下這個困擾我很久的問題。是關于在FastAPI / NiceGUI 等基于Uvicorn環境下使用Async Playwright 提示NotImplementedError的問題。 本解決方案僅適用基于Uvicorn的異步…

QCustomPlot 數據可視化方式詳解

QCustomPlot 數據可視化方式詳解 QCustomPlot 提供了多種靈活的數據顯示方式,可以滿足從簡單靜態圖表到復雜實時數據可視化的各種需求。以下是 QCustomPlot 顯示數據的核心方式和策略: 基本數據顯示方式 1.1 完整數據設置 (setData)// 一次性設置完整數據集 QVector<doub…

家用舊電腦搭建小型服務器操作步驟教程:一步一步本地部署到公網訪問

你家是不是也有一臺吃灰的舊電腦&#xff1f;別急著扔&#xff0c;它其實還能發揮大作用&#xff01;小編最近就把家里一臺十年前的老臺式機&#xff0c;改造成了一個小型服務器&#xff0c;主要用來文件備份、當網站測試環境&#xff0c;還是比較有用的。今天就來手把手教你&a…

Python銀行賬戶系統全解析

完整代碼如下&#xff1a; class BankAccount:def __init__(self, account_holder, initial_balance0):"""初始化銀行賬戶:param account_holder: 賬戶持有人姓名:param initial_balance: 初始余額&#xff0c;默認為0"""self.account_holder …

博世X阿里云:智能座艙接入通義大模型!

近日,全球領先的汽車技術與服務商博世與阿里云宣布在大模型領域達成合作,通義大模型助力博世加速AI技術應用于智能座艙,首次實現座艙環境主動感知和3D數字人交互。 博世AI智能座艙技術原型由博世智能駕控事業部以通義千問和通義萬相為基礎,結合阿里云百煉大模型服務平臺和磐曦數…

高性能計算服務器的主要作用都有哪些?

高性能計算服務器是一種專門為了處理大規模科學計算和數據分析任務所設計的服務器&#xff0c;高性能計算服務器擁有著強大的計算能力和高速的數據傳輸能力&#xff0c;有著高度的可靠性和可擴展性&#xff0c;下面小編就來介紹一下高性能計算服務器的主要作用吧&#xff01; 高…

C++ 進階:深入理解虛函數、繼承與多態

前言 在 C 的面向對象編程中&#xff0c;繼承和多態是兩個核心概念。今天我們將深入探討 C 中與多態密切相關的幾個重要特性&#xff1a;虛函數、virtual 關鍵字、override 關鍵字、多重繼承以及虛繼承。這些內容是理解 C 多態機制和復雜類層次結構的關鍵。 虛函數與 virtual…

為AR眼鏡等多種智能可穿戴設備添加穿戴狀態檢測功能

作者&#xff1a;Azoteq中國 隨著AR/VR眼鏡、頭戴式耳機和入耳式耳塞、智能手表和健身手環等可穿戴電子產品受到越來越多消費者的歡迎&#xff0c;如何設計外形更加時尚迷人、功能更加先進宜人的穿戴產品成為了創新和創意的焦點。作為全球領先的多傳感器解決方案提供商&#xf…

騰訊云國際站縮容:策略、考量與實踐

騰訊云國際站作為連接全球業務的重要云計算樞紐&#xff0c;其資源的靈活調配至關重要。而騰訊云國際站縮容&#xff0c;便是企業在特定發展階段或業務場景下需要深入探究的關鍵議題。 一、騰訊云國際站縮容的背景與動因 隨著企業業務的動態發展&#xff0c;市場需求并非一成…

英語寫作核心詞匯

以下是一些非常常見和實用的單詞和短語分類整理&#xff1a;? 1. 核心高頻動詞 (用于表達觀點、影響、變化等) ?Affect (v.): 影響?Cause (v.): 引起&#xff0c;導致?Influence (v./n.): 影響?Benefit (v./n.): 有益于&#xff1b;好處?Harm (v./n.): 損害&#xff1b…

Python函數參數傳遞機制全解析

Python常見問題解答 1. 函數參數傳遞是值傳遞還是引用傳遞&#xff1f; Python中的參數傳遞是"對象引用傳遞"&#xff08;或稱為"共享對象傳遞"&#xff09;。具體來說&#xff1a; 對于不可變對象&#xff08;如數字、字符串、元組&#xff09;&#x…

MATLAB提供的預訓練神經網絡

CNN 預訓練的神經網絡 Deep Learning Toolbox? provides various pretrained networks that have different sizes, speeds, and accuracies.

【PDF】Qt生成PDF文件,占用存儲小

在 Qt 項目中&#xff0c;如果你希望使用第三方開源庫來生成心電圖的 PDF 報告&#xff0c;并且要求占用磁盤空間最小&#xff0c;以下是一些推薦的選擇&#xff1a; 推薦的開源庫 PoDoFo 簡介&#xff1a;PoDoFo 是一個用于創建和操作 PDF 文件的 C 開源庫。它非常輕量級&…

系統架構設計師 1

第一章 緒論 系統架構設計師(System Architecture Designer)是項目開發活動中的關鍵角色之一。系統架構是系統的一種整體的高層次的結構表示&#xff0c;是系統的骨架和根基&#xff0c;其決定了系統的健壯性和生命周期的長短。 1.1 系統架構概述 1946年第一臺計算機&#x…

2023年面試記錄(base杭州)

阿里外包&#xff08;通過&#xff09; 一面&#xff1a; 1、react 常用hook 2、css的重繪和重排 后面如果進入還有兩輪 二面&#xff1a; 1、解決不同版本的兼容問題能句幾個例子嗎 2、FCP和 CLS 這兩個指標是什么意思能講下嗎 3、具體優化的動作是什么呢 4、放到cdn上為什么…

React 國際化方案最佳實踐調研

文章目錄 前言主流國際化庫對比分析翻譯資源管理策略語言切換方式與自動識別Next.js 中的國際化支持Page Router 模式&#xff08;pages 目錄&#xff09;App Router 模式&#xff08;app 目錄&#xff09; 多語言 SEO 與預渲染注意事項企業級多語言開發與協作流程建議 前言 整…

基于Python實現自然語言處理(主題層次的情感分類)

主題層次的情感分類 1 任務及數據集介紹 該項目作業的具體任務是來自于 BDCI2018-汽車行業用戶觀點主題及情感識別的題目。數據是網絡中公開的用戶對汽車相關內容的評價文本。此任務是對每條文本內容&#xff08;即用戶評論&#xff09;進行分析&#xff0c;確定該條評論中討…

SpringBoot 線程池 配置使用詳解

一、核心特性 Springboot 集成 支持 Async 注解&#xff0c;簡化異步方法調用。 參數可配置化 核心線程數、最大線程數、隊列容量、拒絕策略等均可通過配置調整。 生命周期管理 實現 Lifecycle 接口&#xff0c;支持線程池的啟動和關閉&#xff08;如應用關閉時優雅終止任務…