大型語言模型工程
QLoRA(量化低秩適應,quantized low-rank adaptation)
微調一個大型模型,通常意味著要同時把它數十億個權重、它們的梯度、以及最佳化器狀態全塞進記憶體裡,光這一點就讓 650 億參數的模型在任何單張消費級顯卡上都跑不起來。QLoRA 的訣竅是:把凍結的基礎模型壓成極度精簡的 4-bit 形式,只在其上訓練一對纖薄的低秩適配器。沉重的權重只是唯讀的壓艙物;會動的只有那對小小的適配器,於是記憶體開銷塌縮到一張 48GB 的 GPU 就付得起。
有三個零件讓它在不毀掉準確度的前提下運作。基礎以 4-bit NormalFloat 儲存,這種資料型別的量化級距特意排得貼合訓練後權重那種近似高斯的分佈,使每個桶承載相等的機率質量。雙重量化接著把量化常數本身也量化,再摳回一點記憶體。前向與反向傳遞時,每個 4-bit 區塊會即時反量化回 bf16,梯度穿過它流入 LoRA 矩陣,而分頁式最佳化器則把最佳化器狀態溢出到 CPU,以熬過記憶體尖峰。
成果是:在業餘玩家就買得起的硬體上,保住了近乎全精度微調的品質。要留意的是基礎模型始終維持量化狀態:QLoRA 適應的是一個 4-bit 模型,量化早已摧毀的精度就是回不來了,而把適配器併回 4-bit 基礎是有損的——除非你先反量化回較高精度再合併。
h = \mathrm{dequant}_{\mathrm{NF4}}(W_0)\,x + \tfrac{\alpha}{r}\,B A\,x,\quad B\in\mathbb{R}^{d\times r},\ A\in\mathbb{R}^{r\times k}
做矩陣乘法時把 4-bit 基礎反量化;只有低秩對 B、A 會收到梯度。
QLoRA 並不會白白讓部署時的基礎模型變成 4-bit;它只是廉價地訓練適配器,上線時仍需把適配器併入較高精度的基礎、或讓適配器獨立掛載。
又称
另见