Posted on

QLoRA – Efficient Finetuning of Quantized LLMs

QLoRA 擴展了 LoRA,透過量化原始網路的權重值來提高效率,從高解析度資料類型(如 Float32)到較低解析度資料類型(如 int4)。這會減少記憶體需求並加快計算速度。

什麼是QLoRA

QLORA(Quantized LoRA)方法是一種用於大型語言模型(LLMs)的微調的新方法。傳統上,微調大型模型需要龐大的計算資源,而QLORA則提出了一種可以在GPU上進行低成本微調的方法。QLORA的關鍵創新在於使用了4位量化技術,並引入了可訓練的低秩適配器權重,從而大幅降低了微調過程中所需的記憶體,並且在不影響模型性能的情況下實現了相當於16位完全微調基準的預測性能。

QLoRA 技術所做的三個面向改進

  • 4-bit 常態浮點(NormalFloat):這是一種資訊理論上最優的量化資料類型,適用於服徠常態分佈的資料。與4-bit 整數和4-bit 浮點相比,它在實踐中能取得更好的效果。量化是指用更少的位數來表示數據,從而降低記憶體佔用。
  • 雙量化(Double Quantization):這種方法會量化量化常數本身,可以節省大約每個參數0.37 位(例如對於一個65B 參數的模型,可以節省大約3GB 內存)。量化常數是量化過程中產生的一些中間值。
  • 分頁優化器(Paged Optimizers):這利用了NVIDIA 統一記憶體的功能,避免在處理包含長序列的迷你批次資料時梯度檢查點(gradient checkpointing) 造成的記憶體激增。梯度檢查點是一種訓練技巧,可以節省內存,但可能會降低精度。

由上圖可知,QLoRA 利用了nVidia 統一記憶體功能,當GPU 記憶體不足時,該功能允許GPU->CPU 無縫頁面傳輸,從而管理GPU 中突然出現的記憶體峰值,並協助解決記憶體溢出/超限問題。

利用QLoRA所做的研究

由於 QLORA 的高效性,可以進行深入的指令微調和聊天機器人效能研究,所涉及的模型規模是常規微調因記憶體開銷而無法企及的。 因此,提出論文的團隊針對多個指令微調資料集、模型架構以及參數規模介於 80M 到 65B 的模型訓練了超過 1000 個模型。 除了證明 QLORA 能恢復 16 位元精度效能(§4)以及訓練出最先進的聊天機器人 Guanaco(§5)之外,還分析了訓練模型的趨勢。

首先,他們發現資料品質比資料集大小重要得多,例如,一個包含9k 個樣本的資料集(OASST1) 在聊天機器人效能方面優於一個包含45 萬個樣本的資料集(子集化的FLAN v2 ),即使兩者都旨在支持遵循指令泛化。

其次,他們展示了強大的大規模多任務語言理解(MMLU) 基準測試性能並不意味著強大的Vicuna 聊天機器人基準測試性能,反之亦然- 換句話說,對於給定任務而言,數據集的適用性比大小更重要

相關資源: