本文對比了全參數(shù)微調(diào)和LoRA,并分析了這兩種技術各自的優(yōu)勢和劣勢。作者使用了三個真實用例來訓練LLaMA 2模型,這提供了比較特定任務的性能、硬件要求和訓練成本的基準。本文證明了使用LoRA需要在serving效率和模型質(zhì)量之間做出權衡,而這取決于具體的任務。
此外,本文還提供了關于如何通過智能提示技術來穩(wěn)定LoRA訓練的深入見解,并進一步驗證了采用較低的學習率可以增強最終模型檢查點的可靠性。實驗是基于經(jīng)LoRA調(diào)整的腳本版本進行的。
(本文由OneFlow編譯發(fā)布,轉(zhuǎn)載請聯(lián)系授權。原文:https://www.anyscale.com/blog/fine-tuning-llms-lora-or-full-parameter-an-in-depth-analysis-with-llama-2)
來源?| Anyscale
OneFlow編譯
翻譯|宛子琳、楊婷
最近幾個月,開源語言大模型(LLM)之間展開了與OpenAI專有模型的競爭。提升開源LLM性能的一種常用策略是全參數(shù)微調(diào),這種方法對模型的所有參數(shù)進行了優(yōu)化。在之前的博客文章中(https://www.anyscale.com/blog/fine-tuning-llama-2-a-comprehensive-case-study-for-tailoring-models-to-unique-applications),我們分析了這種全參數(shù)微調(diào)與GPT-4的提示工程和少樣本提示的比較效果。
正如你所料,全參數(shù)微調(diào)是一項資源密集型任務,需要強大的計算能力來管理優(yōu)化器狀態(tài)和檢查點。一些上下文信息:通常情況下,優(yōu)化器狀態(tài)和梯度所占的內(nèi)存空間約為模型本身的12倍。即便是擁有70億參數(shù)的最小LLaMA-2模型,也需要大量計算資源來進行微調(diào)。因此,該領域出現(xiàn)了所謂的"參數(shù)高效微調(diào)(也被稱為peft)"。在這些策略中,如LoRA(LLM的低秩適配)旨在優(yōu)化較小的參數(shù)子集,從而最大限度地減少資源利用并加速訓練周期。
本文比較了全參數(shù)微調(diào)和LoRA微調(diào),突出了各自的優(yōu)缺點。我們的討論基于之前的博客文章,其中針對三個數(shù)據(jù)集進行了基準測試,并對基準線以及通過全參數(shù)微調(diào)獲得的改進有了深入理解。鑒于LoRA仍是一項相對較新的技術,我們還詳細討論了使用LoRA進行訓練的經(jīng)驗,并分享了一些實用技巧和方法,以幫助你更好地優(yōu)化LoRA訓練體驗。
(當應用于LLaMA-2時,基于LoRA的微調(diào)與全參數(shù)微調(diào)的效果幾乎相當。因此,在生成SQL查詢或基于文本的功能表征等專有任務中,它可以勝過GPT-4,但在數(shù)學推理任務上稍顯遜色。上圖中,粉色條形代表GPT-4的表現(xiàn);顏色最深的條形代表基準的聊天調(diào)優(yōu)模型;顏色較深的條形表示LoRA微調(diào)所帶來的收益;顏色最淺的條形表示全參數(shù)微調(diào)結果。)
在我們比較LoRA和全參數(shù)微調(diào)之前,先簡要解釋LoRA背后的基本概念。
1
什么是LoRA
LoRA,即LLM的低秩適配(Low-Rank Adaptation),它基于一個重要洞察:專有任務的微調(diào)權重與初始預訓練權重之間的差異往往表現(xiàn)出“低固有秩(low intrinsic rank)”差異,這意味著它可以很好地近似為一個低秩矩陣。那什么是低秩矩陣?低秩矩陣具有較少的線性獨立列,簡單來說,就是矩陣的“復雜度”較低。低秩矩陣還具備一個酷炫的屬性,它們可以表示為兩個較小矩陣的乘積。這引出了這樣一個假設:即微調(diào)權重和初始預訓練權重之間的這種差距可以表示為兩個較小矩陣的乘積。通過注重更新這兩個較小的矩陣,而非整個原始權重矩陣,可以大幅提升計算效率。
在實際操作中,微調(diào)過程中的原始權重矩陣保持不變,而是通過兩個附加矩陣A和B進行微調(diào),這些矩陣作為微調(diào)權重矩陣的分解。見以下引自原始LoRA論文的示意圖:
(這張來自原始論文的示意圖展示了模型中一個矩陣的張量運算。A和B即上文中提到的小矩陣。輸入向量d會同時經(jīng)過原始的預訓練權重和經(jīng)LoRA微調(diào)的低秩分解矩陣的并行處理。)
值得注意的是,通過在訓練過程中保持原始的“預訓練權重”不變,并選擇 r << d,相較于全參數(shù)微調(diào),可顯著減少優(yōu)化器的內(nèi)存占用和檢查點尺寸。這種方法可應用于模型架構中的任何密集層。自原始LoRA論文發(fā)布以來,已陸續(xù)提出了許多基于LoRA的技術,此處對此不展開討論。
尤其在管理多個專用模型時,更高效的模型部署是這些類似LoRA的參數(shù)高效方法的主要優(yōu)勢。隨著業(yè)界向著開發(fā)一系列用于各種任務的專用LLM的方向發(fā)展,這一點變得越來越重要。
超參數(shù)
在深入討論實驗結果之前,先簡要介紹一下在本文中作為LoRA配置基準所使用的超參數(shù)。
關于每種選擇背后的理由仍然是LLM社區(qū)中的討論熱點,下文將對我們的決策進行闡述:
秩:8
選擇更高秩的分解矩陣將抵消LoRA的效率優(yōu)勢。我們的初步測試表明,即使將秩提高到16,性能提升也微乎其微。因此,我們選擇秩為8以維持更小的檢查點尺寸,避免人為地擴大檢查點文件。
Alpha:16
Alpha用于對學習到的權重進行擴展。包括原始的LoRA論文在內(nèi)的現(xiàn)有文獻,通常建議固定Alpha的值為16,而不將其作為可調(diào)節(jié)的超參數(shù)。
目標模塊:所有密集層
最初的LoRA論文專注于僅對“Q”和“V”注意力矩陣進行微調(diào),并取得了可觀的成果,證明了該技術的有效性。但隨后的研究表明,對其他層甚至所有層進行微調(diào)能夠改善效果。我們推測,將LoRA應用于更多的層可以使我們更接近于實現(xiàn)全參數(shù)微調(diào)的能力。因此,我們選擇在所有層上實施LoRA。
基礎學習率:1e-4
學習率1e-4已成為使用LoRA微調(diào)LLM的標準。盡管我們在訓練過程中偶爾會遇到訓練損失不穩(wěn)定的情況,但將學習率降低到3e-5等較低的值可有效穩(wěn)定訓練過程,關于這一點將在下文中詳細討論。
2
模型質(zhì)量結果
在之前的博文中,我們展示了在GSM8k、ViGGO和SQL數(shù)據(jù)集上微調(diào)小型模型的有效性,本文我們就使用之前獲得的結果作為基準來評估LoRA。關于使用的數(shù)據(jù)集和我們的評估技術的更多細節(jié),我們推薦感興趣的讀者參考那篇文章(https://www.anyscale.com/blog/fine-tuning-llama-2-a-comprehensive-case-study-for-tailoring-models-to-unique-applications)。此處我們將重點關注全參數(shù)微調(diào)和LoRA微調(diào)的比較結果。
非結構化文本的功能性表征(ViGGO)
我們用于訓練模型的第一個數(shù)據(jù)集是ViGGO。任務是從一個句子中提取功能表征。下圖為一次失敗預測中的一個數(shù)據(jù)點:
上圖所示的數(shù)據(jù)點說明這個任務并不需要較高級別的邏輯或推理能力,它的本質(zhì)是將模型從一種表征映射到另一種表征。這是一個小型模型通過全參數(shù)微調(diào)能夠?qū)W得很好的任務?,F(xiàn)在的問題是,LoRA是否能夠同樣出色地學習這一任務。
(在ViGGO數(shù)據(jù)集上不同模型大小和微調(diào)方法的預測準確率。上圖結果顯示,我們的LoRA微調(diào)模型表現(xiàn)僅略低于全參數(shù)微調(diào)模型,在ViGGO測試集上幾乎實現(xiàn)了100%的準確率。)
根據(jù)這些結果,我們可以得出結論,盡管進行了一定程度的超參數(shù)優(yōu)化,LoRA實驗還是需要在準確率上做一些取舍。舉一個具體的例子,在13B模型上我們犧牲了2%的準確率(95% vs 97%)。在大多數(shù)實際應用場景中,我們部署經(jīng)微調(diào)的LLM來完成工作時,LoRA將成為首選技術,它可以提供更高效的服務,而2%的準確率損失可能并不是一個大問題。
小學數(shù)學(GSM8k)
該學術數(shù)據(jù)集測試了模型針對數(shù)學問題的邏輯推理能力。問題和答案結構類似下表所示:
值得注意的是,我們有許多方法可以得出這些問題的正確答案,這與我們測試的其他數(shù)據(jù)集形成了鮮明對比??紤]到這一點,在評估模型時,我們只考慮了在“####”之前的最終答案。那么,LoRA的表現(xiàn)如何呢?以下是我們針對GSM8k數(shù)據(jù)集訓練的模型準確率示例:
(在GSM8k數(shù)據(jù)集上,根據(jù)不同的模型大小和微調(diào)方法預測準確率。與全參數(shù)微調(diào)的對照組相比,兩個LoRA微調(diào)模型的表現(xiàn)較差。但在70B模型上,情況則完全不同,LoRA幾乎達到了與全參數(shù)微調(diào)相當?shù)臏蚀_率。盡管如此,與基準模型相比,70B模型的改進仍然相對較小。)
無論使用哪種微調(diào)技術,基礎模型的參數(shù)大小對于模型在邏輯/數(shù)學推理方面的能力起著重要作用。然而,LoRA微調(diào)模型的表現(xiàn)始終明顯低于全參數(shù)微調(diào)。這是因為LoRA是一種低秩近似,可能無法很好地體現(xiàn)數(shù)學技能。需要注意的是,與其他任務相比,即便進行了全參數(shù)微調(diào),模型的表現(xiàn)也不夠出色。學習數(shù)學并非一項簡單任務,僅憑借幾千個示例對模型進行微調(diào),無法培養(yǎng)出強大的數(shù)學推理能力。
結構化查詢語言(SQL)
我們最終評估了與實際用例相關的數(shù)據(jù)集。該SQL數(shù)據(jù)集將自然語言查詢映射到了函數(shù)式SQL查詢。具體而言,每個數(shù)據(jù)點都包含以下三個字段:
從SQL任務與ViGGO任務的相似性可以看出,經(jīng)微調(diào)的LLM很有希望能夠解決這一問題。同樣,這個模型需要學習一組形式化原則來解決這一任務,而不是應用高級邏輯或推理。
(在SQL數(shù)據(jù)集上,根據(jù)模型大小和微調(diào)方法預測準確率,LoRA微調(diào)模型的表現(xiàn)幾乎可與全參數(shù)微調(diào)模型相當。需要注意的是,LoRA微調(diào)的13B模型的表現(xiàn)略優(yōu)于全參數(shù)微調(diào)的7B模型。)
3
LoRA與全參數(shù)微調(diào):值得考慮的因素
盡管LoRA的設計初衷是作為全參數(shù)微調(diào)的替代方案,但在訓練過程中,還是有一些值得注意的細微差別。
任務類型至關重要
需要強調(diào)的是,LoRA在微調(diào)時充當理想權重的低階近似非常重要,這有效限制了網(wǎng)絡的“適應能力(adaptation capacity)”。從數(shù)學角度來看,我們可以將LLM的原始權重視為矩陣“X”。對于任何給定任務,經(jīng)過最優(yōu)微調(diào)的LLM權重可以表示為矩陣“Y”。微調(diào)的目標是發(fā)現(xiàn)一個增量矩陣“Z”,使得X+Z=Y。然而,在LoRA的情況下,這個增量矩陣“Z”是通過低秩分解來近似的。因此,對于某些類型的任務來說,實現(xiàn)最優(yōu)解可能具有一定的挑戰(zhàn)性。某些數(shù)據(jù)集可能更容易適應,而其他數(shù)據(jù)集則可能會帶來困難。相比之下,全參數(shù)微調(diào)不存在這樣的限制,其學習到的權重保留了原始模型的表達能力,可能簡化了適應各種數(shù)據(jù)的任務。這是一個需要通過實際測試來探索的實證問題。
實驗中,我們觀察到在GSM8k數(shù)學數(shù)據(jù)集上,全參數(shù)微調(diào)和LoRA微調(diào)之間的表現(xiàn)差距最大。這個任務需要學習一項具有挑戰(zhàn)性的新技能,而這個技能可能并不適合用低秩近似來描述。然而,對于其他任務,這兩種微調(diào)方式的差距則小得多。
LoRA對學習率的敏感度
即便對于LoRA表現(xiàn)良好的任務,我們?nèi)孕枰{(diào)整學習率以確保訓練的穩(wěn)定性。由于參數(shù)數(shù)量有限,使用LoRA進行優(yōu)化比全參數(shù)微調(diào)更加復雜。參考以下SQL實驗圖表:
(上圖展示了學習率對訓練穩(wěn)定性和驗證集上困惑度(perplexity)的影響。在這一特定任務中,為穩(wěn)定學習過程,我們將學習率從1e-4降低到了3e-5。)
訓練損失的變化自然會導致評估損失的巨大差異,這可能造成經(jīng)LoRA微調(diào)的模型表現(xiàn)出現(xiàn)顯著下降。雖然可能存在穩(wěn)定性問題,但只要選擇適當?shù)膶W習率,與全參數(shù)微調(diào)相比,LoRA微調(diào)模型幾乎可以實現(xiàn)最佳的收斂結果。
讓我們在生產(chǎn)環(huán)境中探討這一微調(diào)問題。下圖展示了使用LoRA對一個70B模型進行微調(diào)的結果,除學習率外,所有超參數(shù)保持不變。
(如上表所示,兩個訓練過程達到了大致相同的困惑度。對于較低的學習率,在訓練損失穩(wěn)定下降的同時困惑度達到了最小值;而對于較高的學習率,訓練損失則急劇增加,這讓我們對檢查點的最優(yōu)性更加缺乏信心。)
這兩個模型在GSM8k數(shù)據(jù)集上的成功率都為61%。盡管較低的學習率產(chǎn)生了一個典型的學習曲線,但較高的學習率卻不夠穩(wěn)定。因此,雖然將學習率保持在1e-4可以節(jié)省訓練成本,但我們必須意識到潛在的不穩(wěn)定性。解決這個問題對于在生產(chǎn)環(huán)境中確保微調(diào)的成本效益和效果可靠性至關重要。
提示的作用
你可能會想:“我真的需要進行超參數(shù)調(diào)優(yōu)嗎?LoRA的一大關鍵優(yōu)勢是其在內(nèi)存和服務效率方面的高效性,但如果要進行多次作業(yè)啟動和網(wǎng)格搜索以找到最優(yōu)配置,它可能會顯得不那么吸引人。在這種情況下,提示可有效緩解這一問題。
在之前關于全參數(shù)微調(diào)的博客文章中,我們討論了在用特殊的學習詞元分割的情況下,如何有效利用輸入和期望輸出的簡單拼接來代替提示。然而,在LoRA中,我們發(fā)現(xiàn)這種盲目地合并輸入和輸出的方式(即便使用了特殊詞元)可能并不是最穩(wěn)定的方法。這與我們之前的說法一致,即數(shù)據(jù)偏離分布外太遠可能會導致LoRA難以處理。
在沒有提示的ViGGO任務中,數(shù)據(jù)可能如下圖所:
一個正確提示的數(shù)據(jù)點應該包含任務描述,這在某種程度上類似于沒有少樣本示例的提示工程:
聊天格式可作為一個通用的框架應用于各種任務。而關鍵在于任務描述會使得答案中的詞元更有可能取決于問題中存在的詞元,從而使問題優(yōu)化變得更容易,微調(diào)效果更有效。
(以上圖表展示了在ViGGO任務的微調(diào)過程中,任務描述提示對模型性能的影響。在其他超參數(shù)不變的情況下,任務描述提示顯著提高了模型學習的穩(wěn)定性。)
雖然任務描述可提高微調(diào)效率,但它可能會削弱微調(diào)的一個目標,即縮短提示長度。當使用LoRA作為微調(diào)策略時,這種權衡更加明顯,因此,我們可能會陷入不斷嘗試各種提示來優(yōu)化微調(diào)模型的循環(huán)之中。
LoRA與嵌入層特殊詞元的相互作用
正如在之前的博客文章中強調(diào)的那樣,我們已經(jīng)集成了額外的特殊詞元以更好地結構化數(shù)據(jù)。這些詞元將我們正在使用的LLaMA 2模型的詞匯表大小從32000擴展到了32004。這自然引發(fā)了一個問題:我們是否應該訓練這些額外的詞元?如果是的話,我們是否應該將LoRA應用于整個層或者使額外的嵌入可訓練?
針對我們的微調(diào)目標,簡單地將這些額外嵌入層隨機初始化,然后將LoRA應用于整個嵌入層似乎就足夠了。然而,重要的是要記住將這些隨機初始化的新詞匯嵌入包含在模型的檢查點中,以便之后進行準確的推理。
(LoRA嵌入層的檢查點結構可視化,上圖展示的是LoRA秩為8的示例。除LoRA特定的矩陣A和B之外,在詞匯擴展期間保存創(chuàng)建的額外嵌入也非常重要,這些嵌入是隨機初始化的。)
LoRA的訓練速度優(yōu)勢
LoRA在模型中引入了新參數(shù)和計算,這稍微減慢了前向傳播的速度。另一方面,由于GPU之間需要進行的梯度通信較少,較少的可訓練參數(shù)加快了反向傳播速度。
我們發(fā)現(xiàn),如果不利用減少的內(nèi)存占用(通過增加批次大小),那么相對于全參數(shù)微調(diào),LoRA并沒有很明顯的速度優(yōu)勢。不過,如果你的工作負載不受計算限制,那么增加批次大小確實可以提高訓練吞吐量。
例如,當在一個p4de.24xlarge節(jié)點上微調(diào)一個LLaMA-7B模型時,全參數(shù)微調(diào)需要將批量大小設置為8,以充分利用可用的GRAM內(nèi)存。然而,LoRA可以將批大小增加到64,這仍然在內(nèi)存限制范圍內(nèi),從而優(yōu)化訓練速度。
(在p4de.24xlarge節(jié)點上,對比上下文長度為512的7B模型的訓練吞吐量(每秒處理的詞元數(shù))。LoRA的較低內(nèi)存占用允許使用更大的批大小,從而使吞吐量提高約30%。)
還有一個需要考慮的因素:盡管LoRA可以提高吞吐量,但并不一定意味著相對于全參數(shù)微調(diào),可以更快地達到收斂。LoRA雖然在內(nèi)存方面十分高效,但可能會影響模型達到收斂的速度。為說明這一點,讓我們來看一下之前實驗中的訓練損失曲線。
(我們并排比較了LoRA和全參數(shù)訓練損失,實時測量顯示出相似的收斂速度。)
測試結果顯示,經(jīng)過20分鐘的訓練,這兩種方法產(chǎn)生的困惑度相當。因此,在達到類似質(zhì)量的檢查點時,從成本效益的角度考慮,LoRA和全參數(shù)微調(diào)方法可以說幾乎相當。然而,如果要同時操作多個模型,那么LoRA更高效的資源部署可能會產(chǎn)生重要影響。
LoRA的內(nèi)存使用優(yōu)勢
減少了內(nèi)存占用是LoRA在訓練過程中的最大優(yōu)勢,這使得我們可以選擇更便宜且內(nèi)存更小的實例進行微調(diào),或者在更大的上下文長度下進行微調(diào)等。為說明這一點,我們嘗試對所有模型大?。?B、13B和70B)進行訓練。以下是應用全參數(shù)微調(diào)和LoRA進行一輪訓練時的內(nèi)存消耗并列對比:
(訓練過程中GPU內(nèi)存(頂部)和CPU內(nèi)存(底部)的總集群利用率(total cluster utilization)。左側(cè)運行表示一個全參數(shù)微調(diào)的訓練輪次,右側(cè)運行表示一個LoRA微調(diào)的訓練輪次。圖表頂部的每種顏色都代表了一個GPU內(nèi)存利用率。)
從這兩張圖中可以看出,在檢查點保存過程中,內(nèi)存消耗在一個輪次結束時達到峰值。我們可以通過測算檢查點保存期間GPU內(nèi)存和CPU內(nèi)存的消耗來估算所需的最大內(nèi)存。
下面的圖表進一步說明了這些微調(diào)技術之間的差異:
(上圖展示了在單個p4de.24xlarge節(jié)點上,使用512個詞元上下文長度,批大小設置為8,對LLaMA 2模型系列進行微調(diào)時所需的總內(nèi)存差異。對于7B和13B模型,LoRA消耗的內(nèi)存要少得多,因此可以在更少或更便宜的實例上運行。而針對全參數(shù)微調(diào)的“缺失”圖表則強調(diào)了內(nèi)存需求超過p4de.24xlarge實例的規(guī)格。)
對于70B模型,由于其較小的內(nèi)存占用,我們能夠在單個p4de.24xlarge節(jié)點上使用LoRA運行微調(diào)任務。這凸顯了LoRA的另一個優(yōu)勢:顯著降低的內(nèi)存需求使我們能夠利用更少的資源。
檢查點大小和LoRA的服務優(yōu)勢
下表詳細說明了全參數(shù)微調(diào)和兩種不同LoRA配置之間的檢查點大小差異。后一種LoRA配置將LoRA應用于所有層,使我們能夠?qū)崿F(xiàn)之前在本文中詳細介紹的令人期待的準確度。
這些數(shù)據(jù)強調(diào)了LoRA在同時服務多個微調(diào)模型方面的實際優(yōu)勢。背景補充:存儲20個完全微調(diào)的7B模型大約需要280GB內(nèi)存。相比之下,基于我們選擇的LoRA參數(shù),同樣的存儲空間可以容納包含基礎模型在內(nèi)的約700個經(jīng)LoRA微調(diào)的70B模型。
就提供服務而言,LoRA較小的檢查點允許高效存儲和快速加載各種模型。當需要為每個服務請求使用獨特模型時,這一點極為有利。此外,能夠在同一批次的請求中重復使用基礎模型,使我們能夠使用更大的批大小,從而通過增加吞吐量、減少時延和降低成本來提高服務效率。
4
總結
通過比較硬件要求和預測準確率,我們希望說服讀者相信以下觀點:
-
LoRA的主要權衡十分明確:你可能會犧牲一部分模型質(zhì)量,但將獲得更高效地提供多個模型服務的能力。
-
雖然LoRA在特定的應用領域中表現(xiàn)出色,但可能在需要邏輯推理等更廣泛的任務中表現(xiàn)欠佳。
-
對于盲目連接輸入與輸出的方式,我們應該調(diào)整學習率以獲得可靠的訓練檢查點。
-
不要低估數(shù)據(jù)提示的作用,它可以提高訓練穩(wěn)定性,使我們能夠選擇更高的學習率,且保持訓練穩(wěn)定。
-
沒有A100?有了LoRA,你仍然可以在較小的GPU上對模型進行微調(diào)。
-
與常規(guī)檢查點相比,LoRA檢查點明顯更小,更便于擴展服務,特別是在管理多個經(jīng)微調(diào)的模型時。
其他人都在看
-
GPU架構與計算入門指南
-
為什么開源大模型終將勝出
-
LoRA和QLoRA微調(diào)語言大模型
-
OpenAI規(guī)模經(jīng)濟與第二護城河
-
全面對比GPT-3.5與LLaMA 2微調(diào)
-
語言大模型推理性能工程:最佳實踐
-
開源LLM演進史:高質(zhì)量基礎模型競賽文章來源:http://www.zghlxwxcb.cn/news/detail-751854.html
試用OneFlow: github.com/Oneflow-Inc/oneflow/http://github.com/Oneflow-Inc/oneflow/文章來源地址http://www.zghlxwxcb.cn/news/detail-751854.html
到了這里,關于微調(diào)語言大模型選LoRA還是全參數(shù)?基于LLaMA 2深度分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!