您的位置:首頁 > 軟件教程 > 教程 > 大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析

來源:好特整理 | 時間:2024-06-12 08:45:55 | 閱讀:189 |  標(biāo)簽: LOR 過程   | 分享到:

博客首發(fā)于我的知乎,詳見:https://zhuanlan.zhihu.com/p/702629428 一、LoRA原理 LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩適應(yīng),是參數(shù)高效微調(diào)最常用的方法。 LoRA的本質(zhì)就是用更少的訓(xùn)練參數(shù)來近似LLM全參數(shù)微調(diào)所

博客首發(fā)于我的知乎,詳見: https://zhuanlan.zhihu.com/p/702629428

一、LoRA原理

LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩適應(yīng),是參數(shù)高效微調(diào)最常用的方法。

LoRA的本質(zhì)就是用更少的訓(xùn)練參數(shù)來近似LLM全參數(shù)微調(diào)所得的增量參數(shù),從而達到使用更少顯存占用的高效微調(diào)。

1.1 問題定義

LoRA與訓(xùn)練目標(biāo)是解耦的,但本文設(shè)定就是語言模型建模。

以下將給出語言建模(可自然推廣到序列建模)的基本符號定義,即最大化給定提示的條件概率(本質(zhì)是極大似然估計)。

The maximization of conditional probabilities given a task-specific prompt

給定一個參數(shù)為 \(\mathbf{\Phi}\) 預(yù)訓(xùn)練的自回歸語言模型$ P_{\Phi}(y|x)$。

\(x\) 為輸入, \(y\) 為輸出

note: 為與原文符號一致,下文 \(\mathbf{\Phi}\) 、 \(\mathbf{\Theta}\) 、 \(\mathbf{W}\) 均表示模型參數(shù)

全參數(shù)微調(diào)

每次full fine-tuning訓(xùn)練,學(xué)一個 \(\Delta \mathbf{\Phi}\) \(|\Delta \mathbf{\Phi}|\) 參數(shù)量大hold不住

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
語言模型的條件概率分布建模目標(biāo)

高效微調(diào)

$ \Delta \mathbf{\Phi}$ 是特定于下游任務(wù)的增量參數(shù)

LoRA將 $ \Delta \mathbf{\Phi}=\Delta \mathbf{\Phi}(\Theta)$ ,用參數(shù)量更少的$ \mathbf{\Theta}$來編碼(低秩降維表示來近似), \(|\mathbf{\Phi}| << | \mathbf{\Theta}|\)

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
LoRA訓(xùn)練目標(biāo)

Transformer架構(gòu)參數(shù)

Transformer層的輸入和輸出維度大小 \(d_{model}\)

\(\mathbf{W_q}\) 、 \(\mathbf{W_k}\) 、 \(\mathbf{W_v}\) ,和 \(\mathbf{W_o}\) 分別代表自注意力的query、key、value和output投影矩陣

\(\mathbf{W}\) \(\mathbf{W}_0\) 代表預(yù)訓(xùn)練的權(quán)重矩陣

\(?\mathbf{W}\) 是微調(diào)后得到的增量參數(shù)矩陣(訓(xùn)練后,優(yōu)化算法在參數(shù)上的累計更新量)

\(r\) 代表LoRA模塊的秩

1.2 LoRA簡介

LoRA的核心思想是,在凍結(jié)預(yù)訓(xùn)練模型權(quán)重后,將可訓(xùn)練的低秩分解矩陣注入到的Transformer架構(gòu)的每一層中,從而大大減少了在下游任務(wù)上的可訓(xùn)練參數(shù)量。

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
LoRA結(jié)構(gòu)

We propose Low-Rank Adaptation(LoRA), which freezes the pre trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks.

在推理時,對于使用LoRA的模型來說,可直接將原預(yù)訓(xùn)練模型權(quán)重與訓(xùn)練好的LoRA權(quán)重合并,因此在推理時不存在額外開銷。

1.3 為什么要LoRA

背景

通常,凍結(jié)預(yù)訓(xùn)練模型權(quán)重,再額外插入可訓(xùn)練的權(quán)重是常規(guī)做法,例如Adapter?捎(xùn)練的權(quán)重學(xué)習(xí)的就是微調(diào)數(shù)據(jù)的知識。

但它們的問題在于,不僅額外增加了參數(shù),而且還改變了模型結(jié)構(gòu)。

這會導(dǎo)致模型訓(xùn)練、推理的計算成本和內(nèi)存占用急劇增加,尤其在模型參數(shù)需在多GPU上分布式推理時(這越來越常見)。

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
推理性能比較

動機

深度網(wǎng)絡(luò)由大量Dense層構(gòu)成,這些參數(shù)矩陣通常是滿秩的。

相關(guān)工作表明,When adapting to a specific task, 訓(xùn)練學(xué)到的過度參數(shù)化的模型實際上存在于一個較低的內(nèi)在維度上(高維數(shù)據(jù)實際是在低維子空間中)

We take inspiration from Li et al. (2018a); Aghajanyan et al. (2020) which show that the learned over-parametrized models in fact reside on a low intrinsic dimension.

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
低秩矩陣

LoRA就假設(shè)LLM在下游任務(wù)上微調(diào)得到的增量參數(shù)矩陣 \(\Delta \mathbf{W}\) 是低秩的(肯定不是滿秩),即存在冗余參數(shù)或高度相關(guān)的參數(shù)矩陣,但實際有效參數(shù)是更低維度的。

We hypothesize that the change in weights during model adaptation also has a low “intrinsic rank”, leading to our proposed Low-Rank Adaptation (LoRA) approach.

LoRA遂設(shè)想,對全參數(shù)微調(diào)的增量參數(shù)矩陣 \(\Delta \mathbf{W}\) 進行低秩分解近似表示(即對參數(shù)做降維)。

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
PCA降維示意圖,源于https://lightning.ai/pages/community/tutorial/lora-llm/

這樣訓(xùn)練 \(\Delta \mathbf{W}\) 的低秩分解近似參數(shù)矩陣,效果上相比其他PEFT方法不會打什么折扣,而且還能在推理時不增加額外開銷。

LoRA allows us to train some dense layers in a neural network indirectly by optimizing rank decomposition matrices of the dense layers’ change during adaptation instead, while keeping the pre-trained weights frozen

LoRA的大體思路就是這樣,具體的矩陣分解也是靠微調(diào)過程學(xué)習(xí)的。

接下來,介紹LoRA的具體方案。

1.4 LoRA實現(xiàn)

LoRA就是低秩矩陣適應(yīng),在凍結(jié)原有LLM參數(shù)時,用參數(shù)量更小的矩陣進行低秩近似訓(xùn)練。

LoRA原理

對于預(yù)訓(xùn)練權(quán)重矩陣 \(\mathbf{W}_{0} \in \mathbb{R}^{d \times d}\) ,LoRa限制了其更新方式,即將全參微調(diào)的增量參數(shù)矩陣 \(\Delta \mathbf{W}\) 表示為兩個參數(shù)量更小的矩陣$\mathbf{B} \(和\) \mathbf{A}$的低秩近似:

其中, \(\mathbf{B}\in \mathbb{R}^{d \times r}\) \(\mathbf{A}\in \mathbb{R}^{r \times d}\) 為LoRA低秩適應(yīng)的權(quán)重矩陣,秩 \(r\) 遠(yuǎn)小于 \(d\) 。

此時,微調(diào)的參數(shù)量從原來 \(\Delta \mathbf{W}\) \(d*d\) ,變成了 \(\mathbf{B}\) \(\mathbf{A}\) \(2*r*d\) 。可知, \(2*r*d << d*d\) (有 \(2r << d\)

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析

給定輸入 \(\mathbf{x} \in \mathbb{R}^brnr99f\) ,添加LoRA后的輸出 \(\mathbf{h} \in \mathbb{R}^nhjxjln\)

這里,將 \(\Delta \mathbf{h}=\mathbf{B}\mathbf{A} \mathbf{x}\) ,便于后續(xù)求導(dǎo)計算。

在訓(xùn)練時,原始參數(shù) \(\mathbf{W}_{0}\) 被凍結(jié),意味著 \(\mathbf{W}_{0}\) 雖然會參與前向傳播和反向傳播,但是不會計算其對應(yīng)梯度 \(\frac{\partial L}{\partial \mathbf{W}_0}\) ,更不會更新其參數(shù)。

在推理時,直接按上面的式子將 \(\mathbf{B}\mathbf{A}\) 合并到 \(\mathbf{W}_{0}\) 中,因此相比原始LLM不存在推理延時。

1.5 LoRA參數(shù)初始化

在開始訓(xùn)練時:

  • 矩陣 \(\mathbf{B}\) 通過高斯函數(shù)初始化, \(b_i \sim N(0, {\sigma_b}^2)\)

  • 矩陣 \(\mathbf{A}\) 為全零初始化, \(a_i = 0\)

這使得訓(xùn)練開始前,LoRA的旁路 \(\mathbf{B}\mathbf{A}=0\) ,那么微調(diào)就能從預(yù)訓(xùn)練權(quán)重 \(\mathbf{W}_{0}\) 開始。

這樣就能和全參數(shù)微調(diào)時一樣,能有相同的開始。

這個策略要求,至少 \(\mathbf{B}\) \(\mathbf{A}\) 中有一個被初始化為全0項。

但如果,全被初始化為0, \(\mathbf{B}\) \(\mathbf{A}\) 就訓(xùn)不動了。因為, \(\mathbf{B}\) \(\mathbf{A}\) 全0時,處于鞍點,兩個權(quán)重的梯度也全為0?
\(\mathbf{B}\) 的梯度 \(\frac{\partial L}{\partial \mathbf{B}}\) 依賴 \(\mathbf{A}\) \(\mathbf{A}\) 的梯度 \(\frac{\partial L}{\partial \mathbf{A}}\) 依賴 \(\mathbf{B}\) ,如果僅一項為0訓(xùn)練是可以啟動的)

1.6 LoRA權(quán)重系數(shù) \(\frac{\alpha}{r}\)

實際實現(xiàn)時, \(\Delta \mathbf{W} = \mathbf{B}\mathbf{A}\) 會乘以系數(shù) \(\frac{\alpha}{r}\) 與原始預(yù)訓(xùn)練權(quán)重合并 \(\mathbf{W}_{0}\) , \(\alpha\) 是一個超參:

直觀來看,系數(shù) \(\frac{\alpha}{r}\) 決定了在下游任務(wù)上微調(diào)得到的LoRA低秩適應(yīng)的權(quán)重矩陣 \(\mathbf{B}\mathbf{A}\) 占最終模型參數(shù)的比例。

給定一個或多個下游任務(wù)數(shù)據(jù),進行LoRA微調(diào):

  • 系數(shù) \(\frac{\alpha}{r}\) 越大,LoRA微調(diào)權(quán)重的影響就越大,在下游任務(wù)上越容易過擬合
  • 系數(shù) \(\frac{\alpha}{r}\) 越小,LoRA微調(diào)權(quán)重的影響就越。ㄎ⒄{(diào)的效果不明顯,原始模型參數(shù)受到的影響也較少)

一般來說,在給定任務(wù)上LoRA微調(diào),讓 \({\alpha}\) \(r\) 的2倍數(shù)。(太大學(xué)過頭了,太小學(xué)不動。)

根據(jù)經(jīng)驗,LoRA訓(xùn)練大概很難注入新的知識,更多是修改LLM的指令尊隨的能力,例如輸出風(fēng)格和格式。原始的LLM能力,是在預(yù)訓(xùn)練是獲得的(取決于參數(shù)量、數(shù)據(jù)規(guī)模X數(shù)據(jù)質(zhì)量)。

LoRA的秩 \(r\) 決定,LoRA的低秩近似矩陣的擬合能力,實際任務(wù)需要調(diào)參挑選合適的秩 \(r\) 維度。系數(shù) \(\frac{\alpha}{r}\) \(\alpha\) 決定新老權(quán)重的占比。

1.7 LoRA的秩 \(r\) 如何選擇

和推薦系統(tǒng)中的評分矩陣分解、文本的非負(fù)矩陣分解,以及奇異值分解一樣。LoRA的低秩分解近似矩陣 \(\mathbf{B}\) \(\mathbf{A}\) 的秩 \(r\) 的大小,決定了其擬合能力。

理想的情況是找到一個秩 \(r\) ,使得LoRA的低秩近似結(jié)構(gòu) \(\mathbf{B}\mathbf{A}\) 能具備全參數(shù)微調(diào)的增量矩陣 \(\Delta \mathbf{W}\) 的表達能力,能越接近越好。

\(r\) 成為了LoRA的超參數(shù),隨著秩 \(r\) 維度的不斷增加,參與訓(xùn)練的參數(shù)量也隨之增加,LoRA的低秩適應(yīng)能力將逐漸提高甚至過擬合。

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
論文基于GPT-3 175B,WikiSQL和MultiNLI數(shù)據(jù)上,進行了關(guān)于LoRA秩 \(r\) 選取的實驗分析

Weight Type指明對Attention的那部分參數(shù)做了低秩適應(yīng)?梢园l(fā)現(xiàn),在這個2個數(shù)據(jù)集上, \(r\) =4,8時基本上要略優(yōu)于 \(r\) =64的效果。更高的 \(r\) 不一定帶來更好的效果。

作者指出,增加 \(r\) 并不能涵蓋更有意義的子空間,這表明低秩適應(yīng)矩陣就足夠了。但是,并不可能期望一個小的 \(r\) 適用于每個任務(wù)或數(shù)據(jù)集

一些秩 \(r\) 選取經(jīng)驗:

  • 微調(diào)的下游任務(wù)
    簡單任務(wù)所需的秩 \(r\) 不大,任務(wù)越難/多任務(wù)混合的情況,需要更大的秩 \(r\)

  • 基座能力
    越強的基座,所需的秩 \(r\) 應(yīng)該更小。例如Qwen2-72B-Instruct對比Qwen2-7B-Instruct。

越強的基座在處理同等任務(wù)時,需要微調(diào)的樣本數(shù)也通常會更少些。

  • 數(shù)據(jù)規(guī)模
    數(shù)據(jù)規(guī)模越大,需要更大的秩 \(r\)

1.8 LoRA的微調(diào)的參數(shù)選取

LoRA原始論文只研究了注意力參數(shù) \(\mathbf{W_q}\) 、 \(\mathbf{W_k}\) \(\mathbf{W_v}\) ,和 \(\mathbf{W_o}\) 。

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
論文基于GPT-3 175B,對比分析了訓(xùn)練預(yù)算有限時,關(guān)于LoRA的微調(diào)注意力參數(shù)的選擇

在訓(xùn)練預(yù)算為18M時 (roughly 35MB if stored
in FP16) on GPT-3 175B,注意力權(quán)重全部選擇時的效果最佳。

這表明,即使全部的注意力參數(shù)即使秩更小時( \(r=2\) ),相比秩更大的( \(r=8\) )部分注意力參數(shù),具有更強的建模能力。

在實際中,一般會把FFN的參數(shù)也考慮進來。

二、LoRA訓(xùn)練

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
LoRA反向傳播的過程

LoRA訓(xùn)練時,將凍結(jié)預(yù)訓(xùn)練權(quán)重 \(\mathbf{W_0}\)
,只優(yōu)化低秩矩陣 \(\mathbf{B}\) \(\mathbf{A}\)

LoRA訓(xùn)練后,只需保存低秩矩陣的 \(\mathbf{B}\) \(\mathbf{A}\) 參數(shù)。

2.1 LoRA訓(xùn)練的梯度計算

大模型高效微調(diào)-LoRA原理詳解和訓(xùn)練過程深入分析
LoRa的計算圖和梯度計算

\(\mathbf{B}\) \(\mathbf{A}\) 的梯度計算, \(\mathbf{W}_{0}\) 不參與計算。

繼續(xù)回傳的梯度,包括 \(\mathbf{W}_{0}\) 這一路:

2.2 反向傳播計算量

全量微調(diào)前向計算:$ \mathbf{h} = \mathbf{W}_0
\mathbf{x}$

全量微調(diào)反向計算:

LoRA微調(diào)計算:$\mathbf{h} = \mathbf{W}_{0}\mathbf{x} + \mathbf{B}\mathbf{A} \mathbf{x} $

此時,微調(diào)的參數(shù)量從原來 \(\Delta \mathbf{W}\) \(d*d\) ,變成了 \(\mathbf{B}\) \(\mathbf{A}\) \(2*r*d\) ?芍, \(2*r*d << d*d\) (有 \(2r << d\)

不考慮pytorch、llm.c或8-bit優(yōu)化器、Float8的訓(xùn)練優(yōu)化實現(xiàn)?梢钥吹,光梯度計算的話,實際計算量是增加了的。

2.3 LoRA在哪里減少了顯存占用

\(\mathbf{B}\) \(\mathbf{A}\) 的梯度是小頭這里,暫時忽略。

預(yù)訓(xùn)練權(quán)重 \(\mathbf{W_0}\) 的梯度存儲開銷,實際就是LoRA能大大減少了顯存占用的關(guān)鍵。

在LoRA訓(xùn)練時, \(\mathbf{W_0}\) 仍然會參與前向傳播和反向傳播,但是不會計算其對應(yīng)梯度 \(\frac{\partial L}{\partial \mathbf{W}_0}\) ,更不會更新其參數(shù)。

因此,這一步不再需要計算和保存梯度 \(\frac{\partial L}{\partial \mathbf{W}_0}\) ,以及更新 \(\mathbf{W_0}\) 。

\(d=4096, r=16\) 為例,這部分減少的梯度顯存占用粗略估計為: \(d*d - 2*d*r = 1 - \frac{2r}hd7vpj7\) , 減少了99.2187%。

若以Adaw optimizer的視角來看,其優(yōu)化器所需維護的states(梯度的一階矩(均值)和二階原始矩(有偏方差)),那么顯存占用減少地更多。

三、效率分析

按照LoRA論文報告的結(jié)果,LoRA微調(diào)使得在訓(xùn)練GPT3 175B時的,顯存消耗從1.2TB降至350GB;

當(dāng) \(r=4\) 時,最終保存的模型從350GB降至35MB,極大降低了訓(xùn)練的開銷。

下表,來源于LlamaFactory Github展示的微調(diào)LLM的最小硬件依賴估算值。

方法 精度 7B 13B 30B 70B 8x7B 8x22B
Full AMP 120GB 240GB 600GB 1200GB 900GB 2400GB
Full 16 60GB 120GB 300GB 600GB 400GB 1200GB
Freeze 16 20GB 40GB 80GB 200GB 160GB 400GB
LoRA/GaLore/BAdam 16 16GB 32GB 64GB 160GB 120GB 320GB
QLoRA 8 10GB 20GB 40GB 80GB 60GB 160GB
QLoRA 4 6GB 12GB 24GB 48GB 30GB 96GB
QLoRA 2 4GB 8GB 16GB 24GB 18GB 48GB

實際的使用情況:

  • 一張16GB顯存 T4,僅夠6B或7B的模型在batchsize為1時,進行int4 QLoRA,這還只是考慮輸入輸出有限時。
  • 一張32GB顯存 V100,大致夠6B或7B的模型在batchsize為1時,進行LoRA微調(diào)。
  • 一張80GB顯存 A800,Qwen1.5 72B 進行int4 QLoRA,以及例如Baichuan13B / Qwen14B的LoRA微調(diào)
  • 2張A800 80GB顯存,可以進行全參SFT或增量SFT

參考資料

猛猿:圖解大模型微調(diào)系列之:大模型低秩適配器LoRA(原理篇)
LoRA 微調(diào)-MartinLwx's blog|
Parameter-Efficient LLM Finetuning With Low-Rank Adaptation (LoRA)

原創(chuàng)不易,轉(zhuǎn)載需注明出處!

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點或證實其描述。

相關(guān)視頻攻略

更多

掃二維碼進入好特網(wǎng)手機版本!

掃二維碼進入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)