1塊3090就能訓7B大模型,山東大學提出低帶寬低顯存訓練法

科技有夕小瑤 2024-06-20 14:08:56

大模型的全參數微調對資源要求非常高,當前業界更傾向于采用LoRA,Parallel Adapter等參數高效微調(PEFT)方法,通過添加只占用LLMs全部參數很小部分(例如,0.1%)的可訓練模塊,損失小部分精度以換取低資源高效率的微調。

但對于問答(QA)等知識密集型任務來說,當可訓練參數受限時,性能下降較爲顯著。如下圖所示,相比全參數微調,其他PEFT方法下降10%左右。

但我們也從中發現,在Parallel Adapter中隨著適配器參數數量的增加,答案准確率呈現出明顯的上升趨勢。大約需要更新10%的參數,可以達到全量微調的性能。但這一方案需要遠超24G的GPU內存支持,這在實際應用中仍然面臨較高的資源成本。

3.5研究測試:hujiaoai.cn4研究測試:askmanyai.cnClaude-3研究測試:hiclaude3.com

今天我們介紹一篇來自山東大學的研究,在可訓練參數增加的同時顯著降低了GPU內存使用,可實現僅需1塊3090(24G)訓練7B大模型。並且在保持相近性能的同時,相比其他PEFT方法,內存占用率下降了50%。

論文標題:MEFT: Memory-Efficient Fine-Tuning through Sparse Adapter

論文鏈接:https://arxiv.org/pdf/2406.04984

前置知識:Parallel Adapter

本文是在Parallel Adapter基礎上開展的研究,因此需要先簡單了解一下該方法。

在Transformer中,FFN(前饋神經網絡)起著關鍵值記憶的作用,其中每個鍵對應一種文本模式,每個值則指導輸出詞彙的分布。基于這一發現,Parallel Adapter通過爲下遊任務定制特定的知識記憶來擴展原始FFN。Parallel Adapter將adapter與FFN並行放置,adapter由兩個線性變換矩陣和以及ReLU非線性激活函數組成。其計算過程可以表述爲:

Parallel Adapter中並不是每一個神經元都有作用,即存在稀疏性。作者在Natural Questions數據集上訓練了一個瓶頸大小爲4096的並行適配器模型。然後在測試集(包含4000個tokens)上提取了適配器的FFNs層的激活,並計算了平均激活值與累積激活值。如下圖所示:

可以看到,適配器中的激活非常稀疏,即只有部分神經元對模型預測有重大貢獻,而大部分神經元未被激活。根據這一觀察,本文考慮在訓練時僅複制這些重要參數,從而減少CPU-GPU通信量和內存使用。

接下來,我們來看看作者是如何激活重要參數的。

方法

總的來說,本文提出的MEFT方法如上圖所示。虛線將參數分成兩部分,左側爲GPU,右側爲CPU。大多數可訓練的參數將分配給CPU。在前向傳播階段,注意力塊的輸出將被高效地傳遞給CPU,使用類似于moe的結構來檢索與當前環境高度相關的神經元,將激活神經元將傳輸到GPU。在反向傳播期間,將梯度傳輸到CPU並更新設置CPU參數。

1. 稀疏激活

FFN塊內因ReLU或GELU激活函數存在上下文稀疏性,進一步導致了稀疏梯度。因此本文探索了稀疏Adapter訓練,僅更新高激活神經元。在前向計算中,FFN層基于與中個最相似鍵進行激活:

其中, 表示所選鍵的索引,然後在CPU上使用相關的索引構建和W_B^K

W[·]表示從矩陣W中提取相應值的索引操作。目標是從W_A和W_B中分別提取相關的鍵和值。接著將W_A^K和W_B^K$ 移動到GPU作爲複制適配器,然後作爲加寬的FFNs進行計算。

在反向傳播中,僅更新激活神經元的梯度,因爲未激活神經元不參與FFNPA的計算。通過保留大部分Parallel Adapter參數在CPU內存中,並在每次FFN計算前僅將激活神經元臨時複制到GPU內存。由于K遠小于總神經元數r,且激活比例通常低于5%,這一策略非常高效,可以顯著節省GPU資源。

2. Key-Experts機制

在稀疏激活中,檢索最相似權重的TopK操作在CPU上。考慮到當r較大時,給CPU較低的TFLOPs可能成爲計算速度的瓶頸。作者進一步提出Key-Experts機制,提高計算效率。

該機制基于MoE的思想,權重和被劃分爲個專家,並使用一個路由器將輸入導向特定的專家。每個專家是一個包含和的FFN。對于輸入的token,路由器計算每個專家被選中的分數:

然後選擇得分最高的K位專家,將這些選定專家的權重連接到和上:

選取前k個鍵值對,得到,,按照下列算法所示計算FFNPA(h)。

3. 效率分析

雖然該方法通過僅將激活的神經元部分放置在GPU上,可以減少GPU內存使用,但CPU與GPU之間的通信以及CPU計算可能會導致GPU等待。作者分析了該方法的通信量和計算複雜度。

通信量

CPU與GPU之間的參數通信分爲前向傳播和反向傳播兩部分。

前向傳播。對于每一層,隱藏狀態h需要從GPU傳輸到CPU,這導致了B×l×d的通信開銷。在參數選擇後,大小爲2×d×β×K的激活參數會從CPU傳輸到GPU。這裏,B表示批次大小,l表示批次中序列的長度,β是一個與l相關的稀疏因子。反向傳播。對于每一層,GPU上計算得到的激活參數的梯度被移動到CPU,用于更新CPU端的對應參數。因此,通信量大小等于激活參數的大小,即 2 × d × β ×K。

因此,模型訓練的總通信開銷爲:

計算複雜度

在CPU上的額外計算包括路由器上的計算和TopK操作。根據提出的Key-Experts機制,CPU上的複雜度爲 。因此,當 N 接近時,能達到最優計算複雜度 , 顯著降低了計算量,非常適合在CPU上執行。

實證結果

當使用LLaMA-7B作爲基礎模型,配置爲6144的鍵值對大小、批量大小爲2、序列長度爲256時,每批的雙向通信量約爲0.56M次(M代表LLaMA-7B的總可訓練參數數)。相比之下,采用deepspeed-offload的Parallel Adapter在相同規模下,每次叠代需要2M的通信量。因此,本文方法在GPU-CPU通信上減少了3.57倍。

在訓練效率方面,本文方法相比排除額外通信和CPU計算時間的基線,實證結果顯示至少提高了63%的效率。

主要實驗結果

下表列出了主要結果。在知識密集型任務(如NQ、SQuAD和Tool)中,MEFT方法在24GB GPU內存限制下顯著優于其他PEFT方法。這一提升得益于在有限GPU容量內有效利用了更高的可訓練參數比例(即10%)

此外,MEFT在性能上與其他同樣包含10%可訓練參數的PEFT方法相當,但僅消耗50%的GPU內存,甚至可與全參數模型微調媲美,顯著提高了資源利用效率。對于非知識密集型任務如GSM8k,MEFT的稀疏訓練策略也展現出不減損性能的穩健性。

▲VRAM代表訓練所需的GPU內存。Param顯示模型中可訓練參數的百分比。Base Model表示原始模型在任務上的zero-shot性能。

稀疏激活機制是否真的有用?

爲了減輕CPU的計算負擔,本文中使用類似MoE機制。但實驗結果表明,這種機制並不是性能提升的主要原因。如下圖所示:

參數對知識密集型任務影響甚微,甚至在SQuAD和ToolBench上提高了性能。brutal offload指的是CPU和GPU之間參數的直接交換。然而,在邏輯成分較強的GSM8k任務上,性能略有下降。這表明邏輯任務可能並不需要大量的參數。

效率分析

下圖展示了在RTX 3090 GPU和32核CPU(支持AVX)的服務器上每批次訓練的延遲。

圖中通過消融研究比較了數據傳輸、CPU計算和GPU計算的訓練時間。其中,“"MEFT w/o both”代表將所有可訓練參數移至CPU計算,導致了最高延遲;“MEFT w/o Sparse”移除了稀疏激活,但通過PCIe優化傳輸必要神經元,降低了數據傳輸時間,提高了GPU效率;“MEFT w/o KE”采用MoE方法管理參數,減少計算負載但涉及完整參數傳輸;而“Parallel Adapter”則在GPU上執行所有操作,實現最低延遲。

超參數選擇

由于下遊任務的性能可能受到衆多參數的影響,本文在模型上測試了各種超參數設置。

額外鍵值對的數量

前文面對知識密集型任務時,通常需要增加額外的參數數量。作者SQuAD和ToolBench數據集上測試了Parallel Adapter的性能,如下表所示,結果顯示不同數據集對額外參數的需求存在差異。

在SQuAD上,隨著參數數量的增加,性能穩步提升;然而,在NQ上,每層添加3072個鍵值對時性能最佳,而ToolBench的最佳性能則出現在每層僅添加1024個鍵值對時。

激活的鍵值對數量。

作者研究了限制token可以激活的鍵值對的數量對模型最終性能的影響。如下圖所示:

當選擇適當的 K 值時,訓練過程中人爲添加稀疏約束並未顯著影響模型性能。而且,當單個token激活的參數比例低于3%時,顯示出合格的性能。

Key-Experts的數量

這裏指的是的分區。當每層的Key-Experts數量等于額外的鍵值對數量時,每個神經元屬于獨立的專家,相當于不使用MoE分區。

下圖所示的結果與這一理論相符:專家數量越多(即分區越多),結果越好。

同時,我們發現即使專家數量較少也能獲得良好的結果。例如,當專家數量爲1時,檢索相關神經元的過程可以看作是與路由器的第一次點乘。此時,所有的神經元都處于專家狀態E0,在某種程度上相當于有r個分區。

結論

本文發現隨著參數的增加,Parallel Adapter可以提升在知識密集型任務上的性能,但伴隨著較高資源消耗。爲了節約資源,本文提出一種利用稀疏激活和MoE的內存高效訓練方法,顯著降低了對GPU內存的需求,並減輕其計算壓力。這一創新不僅降低了訓練成本,也爲大模型的高效微調提供了新的可能性。

0 阅读:29

科技有夕小瑤

簡介:感謝大家的關注