自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)

發(fā)布于 2024-4-16 10:31
瀏覽
0收藏

論文標(biāo)題:ASPEN: High-Throughput LoRA Fine-Tuning of Large Language Models with a Single GPU

論文地址:??https://arxiv.org/abs/2312.02515??

論文翻譯https://arxivtools.blob.core.windows.net/xueshuxiangzipaperhtml/2023_12_6/2312.02515.pdf

參考代碼:https://github.com/TUDB-Labs/multi-lora-fine-tune

摘要

基于transformer的LLM在不同領(lǐng)域表現(xiàn)出出色的性能,特別是針對特定領(lǐng)域進(jìn)行微調(diào)時。微調(diào)LLM所需的資源可以通過低秩自適應(yīng)(LoRA)等高效參數(shù)微調(diào)方法來節(jié)省。雖然LoRA有效減少了計算負(fù)擔(dān)和資源需求,但它目前僅支持單作業(yè)微調(diào)。


本文提出了ASPEN,一個高吞吐量的LLM微調(diào)框架,其利用共享的預(yù)訓(xùn)練模型和自適應(yīng)調(diào)度,使用LoRA在單個GPU上有效地訓(xùn)練多個作業(yè)。實(shí)驗(yàn)表明,ASPEN在NVIDIA A100 80 GB GPU上訓(xùn)練多個LLaMA7B模型時,可節(jié)省53%的GPU顯存,在不同GPU上訓(xùn)練各種預(yù)訓(xùn)練模型時,吞吐量比現(xiàn)有方法提高約17%。自適應(yīng)調(diào)度算法將周轉(zhuǎn)時間減少24%,端到端訓(xùn)練延遲減少12%,對作業(yè)進(jìn)行優(yōu)先排序并防止內(nèi)存不足問題。

1. 引言

LoRA不僅廣泛用于LLM中的微調(diào)任務(wù),而且還實(shí)現(xiàn)了與全參微調(diào)相當(dāng)?shù)木??;贚oRA微調(diào)的極輕量級性質(zhì)進(jìn)一步允許在單個GPU上訓(xùn)練多個LoRA模塊。直觀地說,在多個LoRA模塊之間共享預(yù)訓(xùn)練的模型訓(xùn)練應(yīng)該會帶來相同的好處,例如減少GPU內(nèi)存使用和提高計算效率。然而,直接的共享方法-例如,在訓(xùn)練多個LoRA作業(yè)時,僅切入/切出LoRA模塊,同時將預(yù)訓(xùn)練的模型保留在GPU內(nèi)存中-可能會引入額外的開銷,這可能是次優(yōu)的。此外,當(dāng)前基于LoRA的微調(diào)系統(tǒng),如AlpacaLoRA,主要集中在優(yōu)化單作業(yè)微調(diào),并沒有徹底研究微調(diào)多個作業(yè)的有效策略。

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖2

本文提出了ASPEN,一個高吞吐量的微調(diào)框架,旨在在單個GPU上訓(xùn)練多個LoRA微調(diào)作業(yè)。其基于BatchFusion-一種新型并行微調(diào)方法,該方法通過將多個輸入批次融合到單個批次中,實(shí)現(xiàn)了多個LoRA微調(diào)作業(yè)的并發(fā)訓(xùn)練和預(yù)訓(xùn)練模型的共享。為多個作業(yè)有效地分配系統(tǒng)資源是一項(xiàng)復(fù)雜的任務(wù)。因此,ASPEN結(jié)合了一個細(xì)粒度的,高效的作業(yè)級調(diào)度器來處理多個LoRA作業(yè),成功地解決了以下關(guān)鍵問題:


BatchFusion過程中,當(dāng)訓(xùn)練數(shù)據(jù)長度變化時,對齊是必要的,并通過填充token來匹配迭代中最長數(shù)據(jù)的長度來實(shí)現(xiàn)。圖2(a)為批次融合的示例,其中填充令牌占了很大比例,導(dǎo)致整體吞吐量效率較低。雖然這些填充令牌不會直接影響模型性能,但會導(dǎo)致計包含它們會導(dǎo)致算效率低下。ASPEN的一個關(guān)鍵目標(biāo)是通過設(shè)計有效的填充策略來提高有效吞吐量,從而減輕可變數(shù)據(jù)長度引起的計算效率低下。


在資源有限的單個GPU上訓(xùn)練多個LoRA微調(diào)作業(yè)需要有效的資源管理。如圖1(左)所示,根據(jù)損失或準(zhǔn)確率趨勢,應(yīng)提前終止J2和J3,因?yàn)槔^續(xù)運(yùn)行這些作業(yè)獲得的收益最小,同時消耗寶貴的計算資源,而不會帶來顯著的收益。此外,最大化資源使用還需要限制訓(xùn)練錯誤。例如,并發(fā)運(yùn)行太多作業(yè)可以最大限度地利用資源,但存在內(nèi)存不足風(fēng)險,為每個作業(yè)動態(tài)分配資源(如GPU內(nèi)存)至關(guān)重要,但在調(diào)度期間預(yù)測確切的內(nèi)存需求具有挑戰(zhàn)性。ASPEN通過開發(fā)精細(xì)的模型來克服這些挑戰(zhàn),1)預(yù)測作業(yè)何時不太可能提前終止,2)估計運(yùn)行作業(yè)的內(nèi)存需求,避免內(nèi)存不足錯誤。


了評估ASPEN,我們微調(diào)了幾個LLM,包括LLaMA-7B/13B ,ChatGLM2 - 6B 和LLaMA2 7B/13B 。實(shí)驗(yàn)結(jié)果肯定了ASPEN在優(yōu)化GPU利用率、GPU內(nèi)存使用率和單個GPU訓(xùn)練吞吐量方面的效率。當(dāng)與Huggingface的PEFT(AlpacaLoRA ,QLoRA 等采用的領(lǐng)先的參數(shù)高效微調(diào)庫)相比時,吞吐量顯著增加,提升高達(dá)17%。本文貢獻(xiàn)如下:

  1. 引入了Multi-LoRA Trainer,在LLM的微調(diào)過程中,通過BatchFusion方法實(shí)現(xiàn)了預(yù)訓(xùn)練模型權(quán)重的高效共享。
  2. 提出了自適應(yīng)作業(yè)調(diào)度算法,該算法從作業(yè)中收集各種度量,能夠準(zhǔn)確估計模型的性能和資源利用率,最大限度地提高系統(tǒng)效率。
  3. 與最先進(jìn)的LoRA訓(xùn)練系統(tǒng)相比,ASPEN有效地利用了計算資源,從而提高了訓(xùn)練吞吐量并減少了訓(xùn)練延遲。在NVIDIA 100 80 GB GPU上訓(xùn)練多個LLaMA-7B模型時,節(jié)省53%的GPU內(nèi)存,并在不同GPU上使用各種預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練時,與現(xiàn)有方法相比,吞吐量提高約17%。

2. 背景和動機(jī)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖3

  • 微調(diào)預(yù)訓(xùn)練模型需要大量資源
  • 作為最先進(jìn)的PEFT技術(shù)之一,LoRA 通過完全凍結(jié)預(yù)訓(xùn)練模型并通過可訓(xùn)練的低秩分解矩陣引入權(quán)重修改來實(shí)現(xiàn)有效的微調(diào)
  • 機(jī)會:共享預(yù)訓(xùn)練模型。當(dāng)使用相同的預(yù)訓(xùn)練模型訓(xùn)練多個LoRA微調(diào)作業(yè)時,在所有作業(yè)之間共享預(yù)訓(xùn)練模型似乎可以直觀地節(jié)省保存GPU內(nèi)存。實(shí)現(xiàn)這一點(diǎn)的一種簡單方法是只交換每個作業(yè)的低秩矩陣A和B,同時將預(yù)訓(xùn)練的模型保留在GPU內(nèi)存中。通過這種方式,多個作業(yè)被單獨(dú)和順序地訓(xùn)練,同時共享相同的預(yù)訓(xùn)練模型。盡管簡單,但按順序訓(xùn)練多個LoRA作業(yè)在資源利用率和訓(xùn)練性能方面可能不是最有效的方法。我們注意到,每個矩陣乘法和加法運(yùn)算產(chǎn)生的內(nèi)核啟動成本在整個訓(xùn)練執(zhí)行時間中起著重要作用。此外,我們觀察到,如果可以并行訓(xùn)練多個LoRA作業(yè),如圖3(b)所示,通過在將其與共享的預(yù)訓(xùn)練模型權(quán)重相乘之前將各個作業(yè)的訓(xùn)練數(shù)據(jù)“合并”到一個大矩陣中,可以顯著減少矩陣乘法的數(shù)量(即降低啟動成本)。受這些啟發(fā),我們提出BatchFusion。
  • 挑戰(zhàn):最大限度地利用資源。雖然訓(xùn)練多個LoRA作業(yè)可以更有效地使用計算資源并減少訓(xùn)練開銷,但在內(nèi)存資源有限的情況下,同時運(yùn)行所有作業(yè)通常是不可能的。如何調(diào)度作業(yè)的運(yùn)行順序,以最大限度地利用計算資源,提高系統(tǒng)的性能,是一個挑戰(zhàn)。與其他作業(yè)調(diào)度算法不同,在基于lora的場景下 使用多個作業(yè)進(jìn)行調(diào)優(yōu),可以提前估計每個作業(yè)的內(nèi)存使用情況。此外,早停預(yù)測模型使作業(yè)的運(yùn)行時間可預(yù)測。這就需要一種更適合管理LoRA微調(diào)作業(yè)調(diào)度的調(diào)度。

3. 系統(tǒng)概述

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖4

如圖4所示,ASPEN由三個主要組件組成:

  • 1個可以處理多個LoRA微調(diào)作業(yè)的自監(jiān)督語言模型訓(xùn)練器,稱為Multi-LoRA Trainer
  • 1個分析器,收集正在運(yùn)行作業(yè)的各種指標(biāo),并為這些指標(biāo)生成估計結(jié)果
  • 1個作業(yè)調(diào)度程序,可以根據(jù)分析器的估計結(jié)果和用戶需求選擇調(diào)度策略

ASPEN的微調(diào)工作流程:

  • 如圖4所示,用戶向ASPEN發(fā)起請求,提供超參數(shù)配置、訓(xùn)練數(shù)據(jù)和調(diào)度目標(biāo),其中包括最小化等待時間、減少周轉(zhuǎn)時間、最大化吞吐量等,如§5所述。隨后,ASPEN基于此信息生成多個候選作業(yè),并在系統(tǒng)初始化期間在Profiler中為每個作業(yè)配置預(yù)估的基本參數(shù)。
  • 系統(tǒng)初始化后,Scheduler從候選人中選擇一個作業(yè)子集,將其與用戶定義的調(diào)度目標(biāo)相匹配,并將其提交給MultiLoRA Trainer進(jìn)行并發(fā)訓(xùn)練。Multi-LoRA Trainer 向Profiler提供訓(xùn)練作業(yè)的性能指標(biāo)以進(jìn)行估計。這些步驟的迭代構(gòu)成了一個訓(xùn)練周期,重復(fù)直到所有候選作業(yè)都完成訓(xùn)練。
  • 如果在訓(xùn)練過程中出現(xiàn)新的請求,ASPEN會根據(jù)請求中提供的信息異步生成候選作業(yè)。隨后,Profiler為每個作業(yè)配置估計的基本參數(shù)。然后在下一次迭代開始之前更新候選作業(yè)集,確保訓(xùn)練過程無縫地包含最新的輸入。

4. Multi-LoRA Trainer

4.1 Batch Fusion

本文提出了一種新的BatchFusion技術(shù),用于在訓(xùn)練多個LoRA微調(diào)作業(yè)時更有效地共享預(yù)訓(xùn)練模型,如圖3(b)所示。BatchFusion在每次訓(xùn)練迭代之前將來自多個微調(diào)作業(yè)的訓(xùn)練數(shù)據(jù)融合到一個批次中;因此,多個LoRA模塊可以共享相同的預(yù)訓(xùn)練模型,并在每次迭代中并行參與訓(xùn)練(而不是順序或單獨(dú)訓(xùn)練)。這樣有2個好處:1)它通過避免微調(diào)作業(yè)之間的頻繁交換和減輕模型切換開銷來并行化微調(diào)過程。2)它通過降低內(nèi)核啟動成本,進(jìn)一步優(yōu)化GPU資源的使用,從而提升整體計算效率。


具體來說,Multi-LoRA Trainer有助于在同一GPU上并行執(zhí)行多個微調(diào)作業(yè)。在形式上,設(shè)Fusion表示BatchFusion過程,其中,Concat表示矩陣的拼接操作,該操作與矩陣拼接類似,但是我們添加了額外的填充標(biāo)記來確保維度對齊,以及額外的信息來識別輸入數(shù)據(jù)屬于哪個LoRA模塊。


給定輸入作業(yè)的第i個作業(yè) ,輸出是?. 批次融合矩陣為 = (1,...,),它將與預(yù)訓(xùn)練的權(quán)重和所有LoRA模塊權(quán)重相乘,然后將各個結(jié)果相加以產(chǎn)生最終輸出.

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

4.2 成本分析

  • GPU內(nèi)存成本:并行運(yùn)行時,BatchFusion減少了為每個作業(yè)復(fù)制預(yù)訓(xùn)練模型權(quán)重的需要。比如訓(xùn)練k個作業(yè), 預(yù)訓(xùn)練模型大小 nGB,可以節(jié)省(k-1) nGB
  • GPU計算成本:在GPU計算中,在每個操作之前,需要啟動內(nèi)核以執(zhí)行矩陣乘法和加法,并且與此內(nèi)核啟動相關(guān)聯(lián)的開銷可能是很大的。將多個小內(nèi)核融合到一個大內(nèi)核中,可以通過節(jié)省內(nèi)核啟動成本來降低整體計算成本;它可以有效地降低大約30% - 50%的理論內(nèi)核啟動成本

4.3 數(shù)據(jù)對齊和填充

如圖2(a),其中描述了四個微調(diào)作業(yè),每個作業(yè)的批大小為2,總共有六個訓(xùn)練數(shù)據(jù)點(diǎn)。這些數(shù)據(jù)點(diǎn)的長度各不相同,最長的是六個單位。為了對齊數(shù)據(jù)長度,將填充標(biāo)記附加到較短的數(shù)據(jù)點(diǎn)。因此,這導(dǎo)致計算資源的使用效率較低。


形式上,我們引入了填充比的概念,表示為,表示一個批次中填充token的比例。對于共享相同輸入訓(xùn)練數(shù)據(jù)的微調(diào)作業(yè),例如超參數(shù)搜索場景,每個作業(yè)的訓(xùn)練輸入數(shù)據(jù)都是相同的,因此,不需要引入填充標(biāo)記,該值為0;另一方面,在涉及解決不同領(lǐng)域問題的微調(diào)作業(yè)的場景中,每個作業(yè)將使用不同的訓(xùn)練集,這些數(shù)據(jù)集可能具有不同的長度分布,每次迭代中訓(xùn)練數(shù)據(jù)的長度會有所不同,導(dǎo)致更高的填充比,我們的目標(biāo)是在提高有效吞吐量的同時,降低填充比。


我們引入了OptimalBatch算法來最小化訓(xùn)練數(shù)據(jù)集中的填充比。最優(yōu)批處理算法在訓(xùn)練過程的每次迭代中執(zhí)行以下關(guān)鍵步驟:首先,它根據(jù)訓(xùn)練數(shù)據(jù)的長度對每個作業(yè)進(jìn)行排序。接下來,它從每個作業(yè)中選擇最短或最長的訓(xùn)練數(shù)據(jù)。最后,它使用BatchFusion操作(如第4.1節(jié)所述)來組合這些選定的訓(xùn)練數(shù)據(jù)。然后,這些融合數(shù)據(jù)將被送入Multi-LoRA Trainer進(jìn)行處理。

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖5

然而,這種方法面臨兩個主要挑戰(zhàn):1)使用排序數(shù)據(jù)訓(xùn)練模型可能導(dǎo)致模型性能收斂問題。如圖5所示,可以觀察到兩條不同的損失曲線。左邊的異常曲線表現(xiàn)出波動行為,沒有顯示出明顯的收斂趨勢,與右邊的穩(wěn)定和收斂曲線形成對比。2)實(shí)現(xiàn)此方法需要將所有作業(yè)存儲在GPU內(nèi)存中,以確定最佳的GPU解決方案。在內(nèi)存受限的環(huán)境中,尤其是在管理大量作業(yè)時,可能導(dǎo)致內(nèi)存不足。


改進(jìn)方案:

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖6

圖6顯示了一個示例,其中只能容納兩個作業(yè)。雖然 FIFO 是一種常見的調(diào)度方法 ,但它在融合批次中會產(chǎn)生四個填充標(biāo)記。相比之下,MinPad算法 ( 本文方法)將其簡化為只有一個。觀察:在處理大量候選作業(yè)時,為同一批次選擇數(shù)據(jù)長度分布相似的作業(yè)可以降低填充率,從而提高有效吞吐量。


基于此,我們提出了MinPad 算法,以解決 BatchFusion 引起的填充問題:它首先確定可以同時訓(xùn)練的最大作業(yè)數(shù)M 。在每次迭代之前,它會查看每個作業(yè)的數(shù)據(jù), 并選擇 M個填充令牌最少的訓(xùn)練數(shù)據(jù)。MinPad執(zhí)行順序與訓(xùn)練數(shù)據(jù)長度的分布相關(guān)聯(lián),保證了最小填充率,最大化有效吞吐量,避免了排序?qū)е碌挠?xùn)練過程的不收斂,但不考慮作業(yè)的優(yōu)先級、周轉(zhuǎn)時間和等待時間。FIFO算法通常用于管理作業(yè)優(yōu)先級 ,但這種方法不考慮訓(xùn)練數(shù)據(jù)長度的分布,可能會增加填充率并降低吞吐量。

5 作業(yè)調(diào)度器

5.1 優(yōu)化訓(xùn)練吞吐量

見4.3

5.2 早停和吞吐量建模

在模型訓(xùn)練過程中,如果模型的性能變差或保持不變, 可以采用提前停止來提前終止訓(xùn)練 。這種方法避免 等待完成所有訓(xùn)練數(shù)據(jù),從而減少了不必要的計算成本。如圖1 所示,左下角顯示了訓(xùn)練期間四個作業(yè)的性能。在計算 J2 的損失值時,會發(fā)生NaN錯誤。如果繼續(xù)訓(xùn)練,該錯誤將再次出現(xiàn),導(dǎo)致模型性能異常,浪費(fèi)計算資源。J3 和 J4使用各種指標(biāo)來決定何時提前停止。每次迭代后,都會使用測試集評估其準(zhǔn)確性。J3的準(zhǔn)確率在訓(xùn)練過程中穩(wěn)步下降,表明進(jìn)一步的訓(xùn)練不會提高性能,只會浪費(fèi)資源。因此,可以提前停止。

5.3 微調(diào)內(nèi)存使用情況建模

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖7

如圖2(b)所示,在模型訓(xùn)練過程中,數(shù)據(jù)分布不均勻,不同的輸入數(shù)據(jù)長度會導(dǎo)致不同的 GPU 內(nèi)存要求。圖7的左列顯示,我們將每個作業(yè)的批處理大小固定為 24, 然后調(diào)整輸入數(shù)據(jù)長度,以確定在 48GB GPU 上可以運(yùn)行而不會遇到內(nèi)存不足的最大作業(yè)數(shù)。因此,假設(shè)我們知道作業(yè)在每個步驟中使用的資源量, 就可以動態(tài)調(diào)整可以并發(fā)運(yùn)行的作業(yè)數(shù)。

5.4 自適應(yīng)作業(yè)調(diào)度

  • SJF-最短工作優(yōu)先算法

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

6 評估

  • 本文建立了常用的單任務(wù)LoRA微調(diào)系統(tǒng),即Alpaca-LoRA ,作為基線方法。AlpacaSeq:在單個GPU上依次訓(xùn)練模型;Alpaca-Parallel:在單個GPU上同時訓(xùn)練多個模型。
  • 在端到端性能實(shí)驗(yàn)中,本文使用相同的數(shù)據(jù)集來訓(xùn)練四個具有不同學(xué)習(xí)率的LoRA模型,監(jiān)控每秒訓(xùn)練的token和填充token的數(shù)量,并計算有效吞吐量和無效吞吐量。

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖8(灰色-無效吞吐量:a-不同模型;b-不同參數(shù);c-不同硬件)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖9

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

圖11

  • 我們比較了四種不同的調(diào)度策略對系統(tǒng)的影響:
  • MinPad算法-M3;FIFO算法-M1;優(yōu)先級調(diào)度算法-M2;自適應(yīng)調(diào)度算法- 4

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

單GPU實(shí)現(xiàn)LLM多LoRA微調(diào)-AI.x社區(qū)

  • 感覺整體思路是不錯的,如果模型占用顯存小,利用率低的話可以同時多l(xiāng)ora訓(xùn)練 或者用不同lora配置來搜索合適的超參;作者應(yīng)該是實(shí)踐其中的一部分,不同數(shù)據(jù)集不同lora實(shí)驗(yàn)沒有,同一數(shù)據(jù)集不同lora的實(shí)現(xiàn)見 - https://github.com/TUDB-Labs/multi-lora-fine-tune


本文轉(zhuǎn)自 AI生成未來 ,作者:龜殼


原文鏈接:??https://mp.weixin.qq.com/s/zGRlay0-V88iIOKk5xkdBw??


標(biāo)簽
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦