QLoRA 其實是一種結合了量化和 LoRA 微調技術的統一方法,而不是同時使用兩種不同的微調方式。換句話說,QLoRA 的意思就是:先把大模型的主權重用低精度(例如 4-bit)量化,從而大幅減少存儲需求;然后在此基礎上,通過 LoRA 技術,僅對少部分參數(比如 1%)進行微調,這部分參數保留在較高的精度(例如 FP16)。
詳細解釋
-
LoRA 微調:
LoRA(Low-Rank Adaptation)是一種微調方法,它通過引入低秩矩陣來調整模型的部分參數,而不改變原始模型的全部權重。這種方法適用于在有限數據或計算資源情況下,對大模型進行有效的微調。 -
QLoRA:
QLoRA 就是結合了量化和 LoRA 的技術。它先將大模型的主權重量化為 4-bit(從而降低存儲和計算成本),然后只對模型中的一小部分參數(例如 1%)使用 LoRA 微調,保持這些額外權重為 FP16 精度。這樣既能大幅降低資源消耗,又能通過 LoRA 對模型進行有效的微調。
舉例說明
假設有一個 10B 參數的模型:
-
全精度存儲需求:
原始模型采用 FP16,每個參數 2 字節,總共 10B × 2 = 20GB。 -
使用 QLoRA:
- 首先,將大部分 10B 參數用 4-bit 量化保存。4-bit 每個參數大約 0.5 字節,所以量化后占用 10B × 0.5 = 5GB。
- 然后,對其中 1% 的參數(即 100M 個參數)應用 LoRA 微調,這部分權重仍使用 FP16,即 100M × 2 字節 = 200MB。
- 整個模型最終存儲需求約 5GB + 200MB = 5.2GB。
這里的“QLoRA”并不是同時用兩種方法,而是一種集成了量化和 LoRA 微調的技術方案。
總結:
QLoRA 本身就是在基于低精度量化的基礎上,通過 LoRA 微調來調整一小部分參數。它們不是互斥的,而是互補的,正是這種組合方法使得大模型在節省資源的同時還能達到較好的微調效果。
存儲需求
存儲需求主要根據模型中參數的總數以及每個參數占用的字節數來計算。簡單來說,計算公式為:
存儲需求 = 參數數量 × 每個參數所占字節數
具體舉例
-
FP16存儲(16位浮點數):
- 每個參數占用 16 位,也就是 2 字節。
- 如果模型有 10 億個參數(1B),那么存儲需求就是:
1B × 2 字節 = 2GB - 如果模型有 100 億個參數(10B),存儲需求就是:
10B × 2 字節 = 20GB
-
4-bit量化存儲:
- 4-bit 等于 4/8 = 0.5 字節。
- 對于 10B 參數的模型,經過 4-bit 量化后的存儲需求為:
10B × 0.5 字節 = 5GB
-
使用 LoRA 或 qLoRA 微調時:
- LoRA 只對模型中一小部分參數進行更新,比如 1% 的參數。
- 如果一個 10B 參數的 FP16 模型,1% 參數大約是 0.1B,存儲需求為:
0.1B × 2 字節 = 0.2GB - 這部分更新的參數就需要額外的存儲,而整體模型仍然以原始的量化或全精度格式存在。
總結
- 如果你用 FP16 格式存儲,一個擁有 10B 參數的模型大約需要 20GB 的存儲空間;如果量化到 4-bit,則大約只需要 5GB。
- 使用 LoRA 微調時,你只更新模型的一小部分參數,這部分參數所需的存儲相對更少。
這樣的計算方法可以幫助你評估訓練和部署模型時所需的存儲資源。