你應(yīng)該懂的AI大模型(十二)之 QLoRA
一、顯存和算力
1. 基本概念
顯存 (Memory)
-
定義:GPU 用于臨時存儲數(shù)據(jù)的高速內(nèi)存,類似于計算機(jī)的 RAM。
-
作用:
- 存儲模型權(quán)重、中間激活值、梯度和優(yōu)化器狀態(tài)。
- 數(shù)據(jù)在顯存與 GPU 核心之間快速傳輸以支持計算。
-
衡量單位:GB (如 8GB、24GB)。
算力 (Computational Power)
-
定義:GPU 執(zhí)行計算操作的能力,由 GPU 核心數(shù)量和頻率決定。
-
作用:
- 執(zhí)行矩陣乘法、卷積等計算密集型操作。
-
衡量單位:
- TFLOPS (萬億次浮點(diǎn)運(yùn)算 / 秒),如 NVIDIA A100 的 312 TFLOPS (FP16)。
- CUDA 核心數(shù)或 Tensor 核心數(shù)。
2. 關(guān)鍵區(qū)別
| 維度 | 顯存 | 算力 |
|---|---|---|
| 瓶頸表現(xiàn) | 訓(xùn)練時出現(xiàn) "CUDA out of memory" 錯誤 | 訓(xùn)練速度慢,GPU 利用率低 |
| 優(yōu)化方式 | 量化模型、梯度檢查點(diǎn)、減少 batch size | 使用更快的 GPU、優(yōu)化算法復(fù)雜度 |
| 典型場景 | 大模型微調(diào)(如 13B 參數(shù)模型) | 高分辨率圖像處理、大 batch 訓(xùn)練 |
| 資源競爭 | 模型權(quán)重 vs 激活值 vs 優(yōu)化器狀態(tài) | 計算密集型操作(如矩陣乘法) |
3. 相互關(guān)系
顯存決定模型規(guī)模
-
模型越大(參數(shù)越多),所需顯存越多。
- 例如:7B 參數(shù)模型在 FP16 精度下需約 14GB 顯存存儲權(quán)重。
-
量化技術(shù)(如 QLoRA 的 4-bit 量化)通過降低精度減少顯存需求。
算力決定計算速度
-
算力越高,單位時間內(nèi)處理的數(shù)據(jù)量越大。
- 例如:A100 的算力約為 RTX 3090 的 3 倍,相同任務(wù)速度快約 3 倍。
-
并行計算(如 Data Parallelism)依賴算力提升效率。
顯存與算力的平衡
- 小顯存 + 高算力:適合小模型高速推理(如手機(jī)端 AI)。
- 大顯存 + 低算力:適合訓(xùn)練大模型但速度較慢。
- 大顯存 + 高算力:理想配置(如 A100、H100),支持大規(guī)模訓(xùn)練和推理。
4. 實際應(yīng)用中的影響
訓(xùn)練階段
-
顯存不足:
- 無法加載完整模型或 batch,需使用梯度累積、模型并行等技術(shù)。
-
算力不足:
- 訓(xùn)練時間過長,即使顯存充足也無法充分利用數(shù)據(jù)。
推理階段
-
顯存限制部署規(guī)模:
- 邊緣設(shè)備(如車載 GPU)需壓縮模型以適配有限顯存。
-
算力影響響應(yīng)速度:
- 實時應(yīng)用(如自動駕駛)需高算力 GPU 保證低延遲。
5. 優(yōu)化策略
顯存優(yōu)化
- 量化:FP16 → INT8 → 4-bit/2-bit。
- 梯度檢查點(diǎn):犧牲計算速度換取顯存。
- 模型架構(gòu)優(yōu)化:使用參數(shù)效率更高的模型(如 LLaMA 比 GPT-3 參數(shù)量少 50%)。
算力優(yōu)化
- 算法優(yōu)化:使用 FlashAttention、TensorRT 等加速庫。
- 硬件升級:從 RTX 3090 (35 TFLOPS) 升級到 A100 (312 TFLOPS)。
- 并行策略:數(shù)據(jù)并行、張量并行或流水線并行。
6. 常見誤區(qū)
-
"顯存越大越好":
- 若算力不足,大顯存無法充分發(fā)揮作用(如訓(xùn)練小模型時)。
-
"算力高就能訓(xùn)練大模型":
- 顯存不足時,高算力 GPU 仍無法加載大模型。
-
"量化只影響精度":
- 4-bit 量化不僅減少顯存,還能加速計算(如 A100 的 4-bit Tensor Core)。
總結(jié)
-
顯存是模型運(yùn)行的 "空間",決定了你能處理多大的模型。
-
算力是模型運(yùn)行的 "速度",決定了你能多快完成計算。
-
理想的配置需要兩者平衡,例如:
- 微調(diào) 7B 模型:至少 16GB 顯存 + 中等算力(如 RTX 4090)。
- 訓(xùn)練 70B 模型:80GB 顯存 + 高算力(如 A100/A800)。
在資源有限時,需根據(jù)任務(wù)需求優(yōu)先優(yōu)化瓶頸資源(顯存或算力)。
二、部署量化(打包量化)與訓(xùn)練量化
| 維度 | 訓(xùn)練量化 | 部署量化(打包量化) |
|---|---|---|
| 目標(biāo) | 在訓(xùn)練過程中減少顯存和計算量 | 在推理時減小模型體積、加速推理速度 |
| 應(yīng)用階段 | 模型訓(xùn)練階段 | 模型部署階段 |
| 技術(shù)重點(diǎn) | 保持訓(xùn)練穩(wěn)定性和模型精度 | 最大化推理效率,最小化精度損失 |
| 典型場景 | QLoRA 微調(diào)大模型 | 在手機(jī)、邊緣設(shè)備上部署模型 或者 需要極致推理速度(如實時對話系統(tǒng))。 |
| 精度損失處理 | 通過技術(shù)補(bǔ)償(如雙重量化)減少損失 | 通過校準(zhǔn)或微調(diào)恢復(fù)精度 |
部署量化會節(jié)約算例但不會節(jié)約顯存,因為模型推理中間態(tài)對顯存的占用不會因為量化而變小。但是如果我們想在24G顯存的服務(wù)器上訓(xùn)練一個8B的模型通過訓(xùn)練量化就可以讓開啟訓(xùn)練。
-
訓(xùn)練量化是以量化方式訓(xùn)練模型,核心是在低精度下保持訓(xùn)練穩(wěn)定性(一般情況下我們建議使用8位QLoRA訓(xùn)練,這時的精度損失是很小的)。
-
部署量化是對訓(xùn)練好的模型進(jìn)行壓縮加速,核心是在最小精度損失下提升推理效率。
-
兩者可結(jié)合使用:例如用 QLoRA 訓(xùn)練,再用 GPTQ 進(jìn)一步量化部署。選擇哪種方法取決于你的具體需求:
- 需要高精度微調(diào) → 訓(xùn)練量化(如 QLoRA)
- 需要極致部署效率 → 部署量化(如 GPTQ+llama.cpp)
三、QLoRA
QLoRA 是 2023 年提出的一種參數(shù)高效微調(diào)技術(shù),通過將大語言模型量化與 LoRA 低秩適應(yīng)相結(jié)合,大幅降低了微調(diào)所需的顯存,讓普通人也能在消費(fèi)級 GPU 上微調(diào) 7B 甚至 70B 規(guī)模的大模型。
四、如何使QLoRA訓(xùn)練效果超越LoRA
以LLamaFactory為例,我們在訓(xùn)練時選擇QLoRA,那么我們可以在LoRA參數(shù)的配置中提升LoRA秩(一般LoRA縮放參數(shù)是秩的兩倍)。
在相同顯存限制下,高秩 QLoRA 可以達(dá)到比 LoRA 更高的準(zhǔn)確率。QLoRA 的訓(xùn)練時間更長,但性價比更高(例如 r=32 的 QLoRA 用 12GB 顯存達(dá)到了 LoRA 需要 24GB 才能達(dá)到的效果)。

LoRA 秩 (rank) 是控制可訓(xùn)練參數(shù)數(shù)量和模型表達(dá)能力的關(guān)鍵參數(shù)。理論上,調(diào)高 LoRA 秩可以增強(qiáng) QLoRA 的表達(dá)能力。
通過QLoRA量化大幅降低基礎(chǔ)模型的顯存占用,從而允許使用更高的 LoRA 秩。
例如:
- 傳統(tǒng) LoRA(FP16)在 24GB GPU 上最多使用 r=16(否則顯存溢出)。
- QLoRA(4-bit)在同樣 GPU 上可使用 r=32 甚至更高,獲得更強(qiáng)表達(dá)能力。
1.如何通過高秩 QLoRA 獲得更好效果?
(1) 硬件與參數(shù)配置
-
GPU 顯存:
- 24GB GPU:推薦 r≤32
- 48GB GPU:可嘗試 r=64
(2) 訓(xùn)練策略優(yōu)化
- 學(xué)習(xí)率調(diào)整:
高秩 LoRA 需要更高學(xué)習(xí)率,推薦范圍 5e-5 至 1e-4。 - 梯度累積:
使用較大的梯度累積步數(shù)(如 8-16),模擬更大 batch size。 - 更長訓(xùn)練時間:
高秩模型需要更多訓(xùn)練步數(shù)收斂,可將 max_steps 增加 50-100%。
(3) 量化技術(shù)選擇
- 雙重量化:
啟用bnb_4bit_use_double_quant=True以節(jié)省額外顯存。 - NF4 量化:
使用bnb_4bit_quant_type="nf4"而非默認(rèn)的 FP4,減少精度損失。2. 注意事項
-
并非秩越高越好:
對于大多數(shù)任務(wù),r=16-32 已足夠,過高的秩可能導(dǎo)致過擬合。 -
量化誤差累積:
4-bit 量化會引入一定誤差,可通過以下方式緩解:- 使用
compute_dtype=torch.float16保持梯度計算的高精度。 - 在關(guān)鍵層(如注意力機(jī)制)保留 FP16 精度。
- 使用
-
推理部署:
高秩 LoRA 在推理時會增加計算量,可通過以下方式優(yōu)化:- 將 LoRA 參數(shù)合并到基礎(chǔ)模型中(需更多顯存)。
- 使用 INT8 量化進(jìn)行推理。
-

浙公網(wǎng)安備 33010602011771號