大型語言模型已經遠遠超出了消費級硬體的記憶體容量。一個 700 億參數的模型在標準 16 位元精度下需要 140 GB 的 GPU 記憶體──遠遠超過最昂貴的消費級 GPU。bitsandbytes 就是彌補這個差距的函式庫,提供量化技術,使得在可負擔的硬體上載入、訓練和執行大型模型成為可能。
由華盛頓大學的 Tim Dettmers 開發,bitsandbytes 已成為開源 AI 生態系統中最關鍵的基礎設施之一。它提供了三項基礎量化能力:用於記憶體高效訓練的 8 位元最佳化器、用於記憶體高效推論的 LLM.int8()、以及用於 QLoRA 風格微調的 4 位元 NormalFloat 量化。這些技術共同使數千名研究人員和開發者能夠在他們已有的硬體上處理大型模型。
該函式庫對 AI 社群的影響難以言喻。在 bitsandbytes 出現之前,微調一個 65B 參數模型需要多個價值數萬美元的 A100 GPU。有了 4 位元 QLoRA,同樣的任務可以在單張消費級 GPU 上完成。這種 LLM 微調的普及化,使得原本因成本而被排除在大規模 AI 研究之外的個人開發者、小型團隊和學術研究人員能夠進行創新。
bitsandbytes 的量化架構如何運作?
該函式庫實作了多種量化策略,每種策略針對不同的使用案例和精度需求進行了最佳化。
graph LR
A[bitsandbytes 函式庫] --> B[8 位元 Adam 最佳化器]
A --> C[LLM.int8() 推論]
A --> D[4 位元 NF4 量化]
B --> E[區塊式量化]
B --> F[動態量化]
C --> G[混合精度分解]
C --> H[異常特徵處理]
D --> I[NormalFloat4 格式]
D --> J[雙重量化]
E --> K[記憶體高效訓練]
F --> K
G --> L[全精度準確度]
H --> L
I --> M[記憶體高效微調]
J --> M
這三種主要量化策略在不同層級運作。8 位元最佳化器減少了訓練期間最佳化器狀態的記憶體佔用。LLM.int8() 使得推論原本會超出 GPU 記憶體的模型成為可能。而 4 位元 NF4 量化則使得在消費級硬體上微調大型模型成為可能。
bitsandbytes 提供了多少記憶體節省?
量化帶來的記憶體節省相當可觀,決定了是需要企業級 GPU 叢集還是僅需單張消費級顯示卡。
| 模型大小 | 16 位元精度 | 8 位元 (LLM.int8) | 4 位元 (NF4) |
|---|---|---|---|
| 7B 參數 | 14 GB | 7 GB | 3.5 GB |
| 13B 參數 | 26 GB | 13 GB | 6.5 GB |
| 33B 參數 | 66 GB | 33 GB | 16.5 GB |
| 65B 參數 | 130 GB | 65 GB | 32.5 GB |
| 70B 參數 | 140 GB | 70 GB | 35 GB |
| 180B 參數 | 360 GB | 180 GB | 90 GB |
一個在 16 位元精度下需要 140 GB GPU 記憶體的 70B 參數模型,在 4 位元下只需要 35 GB──可以輕鬆容納在單張 RTX 4090 或 A6000 上。即使是 180B 的模型,使用 4 位元量化和雙 GPU 設定也能夠存取。
QLoRA 如何使用 bitsandbytes 進行高效微調?
QLoRA(量化低秩適配)將 bitsandbytes 的 4 位元量化與 LoRA 適配器結合,以最小的記憶體開銷實現最先進的微調結果。
| 微調方法 | 記憶體 (7B 模型) | 記憶體 (70B 模型) | 訓練速度 | 品質保持 |
|---|---|---|---|---|
| 完整微調 (16 位元) | 56 GB | 560 GB | 1 倍(基準線) | 100% |
| LoRA (16 位元) | 28 GB | 280 GB | 1.2 倍 | 99.5% |
| QLoRA (4 位元 NF4) | 10 GB | 48 GB | 1.5 倍 | 99.3% |
| QLoRA (4 位元 + 雙重量化) | 8 GB | 35 GB | 1.6 倍 | 99.0% |
QLoRA 背後的關鍵洞察是:將基礎模型權重量化為 4 位元,同時將 LoRA 適配器權重保持在全精度,可以在記憶體成本僅為一小部分的情況下,達到與全精度訓練幾乎相同的微調品質。4 位元基礎模型權重在前向傳傳播期間即時反量化,而梯度僅流經 LoRA 適配器。
bitsandbytes 支援哪些 GPU 架構?
bitsandbytes 針對現代 NVIDIA GPU 架構進行了最佳化,並針對不同的 CUDA 功能提供了特定支援。
| GPU 架構 | 範例 | CUDA 計算能力 | bitsandbytes 支援 |
|---|---|---|---|
| Blackwell | B200、B100 | 10.0 | 完整支援 |
| Hopper | H100、H200 | 9.0 | 完整支援 |
| Ada Lovelace | RTX 4090、RTX 6000 Ada | 8.9 | 完整支援 |
| Ampere | A100、RTX 3090、A6000 | 8.0 | 完整支援 |
| Turing | RTX 2080、T4 | 7.5 | 完整支援 |
| Volta | V100 | 7.0 | 有限支援 |
| Pascal | P100、GTX 1080 | 6.x | 僅量化 |
該函式庫包含針對每個架構最佳化的 CUDA 核心,最先進的量化操作支援 Ampere 及更新的 GPU。僅 CPU 操作支援推論,但不支援訓練。
FAQ
什麼是 bitsandbytes? bitsandbytes 是由 Tim Dettmers 開發的 PyTorch 基礎 k-bit 量化函式庫。它實現了 8 位元最佳化器、LLM.int8 推論和 4 位元 QLoRA 訓練,大幅降低了大型語言模型的記憶體需求。
4 位元量化如何減少記憶體使用? 4 位元量化將模型權重從 32 位元浮點數轉換為 4 位元 (NF4) 格式,記憶體使用量約減少 8 倍。例如,一個需要 140GB 16 位元記憶體的 70B 參數模型,使用 4 位元量化後約只需 35GB。
什麼是 QLoRA,bitsandbytes 如何實現它? QLoRA(量化低秩適配)結合了 4 位元 NormalFloat 量化與低秩適配器,可在單張消費級 GPU 上微調大型語言模型。bitsandbytes 提供了 QLoRA 所依賴的 4 位元量化基礎。
什麼是 LLM.int8() 技術? LLM.int8() 是 bitsandbytes 中實作的技術,對大多數數值以 8 位元精度執行矩陣乘法,對異常特徵以 16 位元精度執行,在保持全精度準確度的同時只使用一半的記憶體。
bitsandbytes 與最新的 GPU 相容嗎? 是的,bitsandbytes 支援支援 CUDA 的 GPU,包括 NVIDIA Ampere (A100、A6000)、Ada Lovelace (RTX 4090、RTX 6000 Ada)、Hopper (H100、H200) 和 Blackwell 架構。也支援僅 CPU 推論。
延伸閱讀
- bitsandbytes GitHub 倉庫 – 原始碼、文件和安裝指南
- QLoRA 論文 – 介紹 4 位元微調的研究論文
- LLM.int8() 論文 – 關於 8 位元矩陣乘法的研究論文
- Hugging Face Transformers 整合 – 在 Transformers 函式庫中使用 bitsandbytes
- NormalFloat4 技術說明 – 4 位元量化中使用的 NF4 資料類型
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!