突破AI性能瓶頸!揭秘LLaMA-MoE模型的高效神經(jīng)元分配策略
本文介紹了一種名為“LLaMA-MoE”的方法,通過將現(xiàn)有的大型語言模型(LLMs)轉(zhuǎn)化為混合專家網(wǎng)絡(luò)(MoE),從而解決了訓(xùn)練MoE時遇到的數(shù)據(jù)饑餓和不穩(wěn)定性問題。該方法基于著名的LLaMA-2 7B模型,并將其參數(shù)分為多個專家,然后對轉(zhuǎn)換后的MoE模型進行持續(xù)預(yù)訓(xùn)練以進一步提高性能。實驗結(jié)果表明,在使用200B個標記進行訓(xùn)練后,LLaMA-MoE-3.5B模型在激活參數(shù)相似的情況下顯著優(yōu)于密集模型。
下載地址和項目代碼見文末
圖1:構(gòu)建LLaMA-MoE模型的主要框架。(a)LLaMA中的原始ffn被分為不同的專家。(b)在轉(zhuǎn)換后的LLaMA-MoE中,隱藏狀態(tài)是由部分選擇的專家而不是所有的專家進行處理的。
專家構(gòu)建
1. 概述
專家構(gòu)建是將原始Feed-Forward Networks (FFNs)的參數(shù)劃分為多個專家。傳統(tǒng)的FFN層包含大量參數(shù),這些參數(shù)可以被分解為多個子集,每個子集稱為一個專家。通過這種方法,可以減少每次計算所需的激活參數(shù)數(shù)量,從而在保證模型性能的同時顯著降低計算成本。
2. 參數(shù)劃分方法
在構(gòu)建專家時,常用的兩種方法是獨立神經(jīng)元劃分和共享神經(jīng)元劃分。
- 獨立神經(jīng)元劃分:這種方法將FFN中的神經(jīng)元均勻地劃分為多個子集,每個子集獨立組成一個專家。例如,可以通過隨機劃分或基于聚類的方法來實現(xiàn)這種劃分。隨機劃分是將所有神經(jīng)元隨機分配給不同的專家,而聚類方法則基于神經(jīng)元的特征將其分配給不同的專家。
- 共享神經(jīng)元劃分:與獨立神經(jīng)元劃分不同,共享神經(jīng)元劃分允許多個專家共享部分神經(jīng)元。這種方法可以通過評估神經(jīng)元的重要性來決定哪些神經(jīng)元需要共享。共享神經(jīng)元的目標是保留模型的表示能力,同時減少計算資源的消耗。
3. 實踐案例
在LLaMA-MoE模型的構(gòu)建過程中,研究人員嘗試了多種參數(shù)劃分方法,最終發(fā)現(xiàn)隨機劃分方法(IndependentRandom)在保持模型性能方面效果最佳。這種方法簡單而高效,有助于平衡不同專家之間的負載,避免某些專家過度頻繁使用而其他專家很少被激活的問題。
持續(xù)預(yù)訓(xùn)練
1. 必要性
由于轉(zhuǎn)換后的MoE模型在結(jié)構(gòu)上與原始的密集模型(dense model)有所不同,直接使用轉(zhuǎn)換后的模型可能會導(dǎo)致性能下降。為了恢復(fù)和提升模型的語言建模能力,必須對轉(zhuǎn)換后的MoE模型進行持續(xù)預(yù)訓(xùn)練。
2. 預(yù)訓(xùn)練策略
在持續(xù)預(yù)訓(xùn)練階段,研究人員使用了兩種主要的數(shù)據(jù)采樣策略:靜態(tài)數(shù)據(jù)采樣和動態(tài)數(shù)據(jù)采樣。
- 靜態(tài)數(shù)據(jù)采樣:使用固定的采樣權(quán)重,從預(yù)定義的數(shù)據(jù)集中提取訓(xùn)練數(shù)據(jù)。這種方法簡單直接,但可能無法充分適應(yīng)不同訓(xùn)練階段的需求。
- 動態(tài)數(shù)據(jù)采樣:根據(jù)模型在訓(xùn)練過程中的表現(xiàn)動態(tài)調(diào)整采樣權(quán)重,以更好地優(yōu)化模型性能。盡管這種方法可以提高訓(xùn)練效率,但也增加了計算復(fù)雜度。
3. 數(shù)據(jù)過濾
為了提高訓(xùn)練數(shù)據(jù)的質(zhì)量,研究人員在預(yù)訓(xùn)練前對數(shù)據(jù)進行了過濾,去除了約50%的廣告內(nèi)容和約15%的非流利文本。這一策略有助于加快模型的收斂速度,提高訓(xùn)練效果。
增強推理能力
1. 激活部分模型參數(shù)
在處理具體任務(wù)時,MoE模型通過激活部分模型參數(shù)來提高推理能力。每個輸入token僅激活與其最相關(guān)的幾個專家,從而減少了不必要的計算。這種稀疏激活方式不僅提高了計算效率,還能在保持高性能的同時降低推理成本。
2. 性能提升
實驗證明,經(jīng)過200B tokens的預(yù)訓(xùn)練后,LLaMA-MoE-3.5B模型在多個下游任務(wù)上顯著優(yōu)于具有相同激活參數(shù)的密集模型。這一結(jié)果表明,通過適當(dāng)?shù)膶<覄澐趾统掷m(xù)預(yù)訓(xùn)練,MoE模型能夠在保持語言能力的同時顯著提升推理性能。
提高可解釋性
1. 部分參數(shù)激活
由于每次僅有部分參數(shù)被激活,MoE模型在決策過程中的激活路徑更加清晰。這使得研究人員能夠更容易地追蹤和解釋模型的行為,了解模型是如何處理和響應(yīng)不同輸入的。
2. 實例分析
在實驗中,研究人員觀察到深層網(wǎng)絡(luò)層比淺層網(wǎng)絡(luò)層有更強的路由偏好,這意味著深層網(wǎng)絡(luò)層捕捉更多任務(wù)特定的特征,而淺層網(wǎng)絡(luò)層則更關(guān)注通用特征。這一發(fā)現(xiàn)有助于進一步優(yōu)化專家劃分策略,提高模型的整體性能。
降低計算成本
MoE(Mixture-of-Experts)模型相比傳統(tǒng)的密集模型,通過只激活部分參數(shù)來處理輸入,可以顯著降低計算成本。傳統(tǒng)的密集模型在處理每一個輸入時都需要使用所有參數(shù),這樣隨著模型容量的增加,計算成本也會急劇上升。而MoE模型則通過引入專家網(wǎng)絡(luò)和門控網(wǎng)絡(luò),只激活一部分專家,從而降低了計算成本。
例如,LLaMA-MoE模型在構(gòu)建過程中,將原始LLaMA模型的FFN(Feed-Forward Network)分割成多個專家網(wǎng)絡(luò)。這種分割方法在維持模型性能的前提下,顯著減少了需要激活的參數(shù)量,進而減少了計算開銷。通過訓(xùn)練200B tokens,LLaMA-MoE-3.5B模型在激活參數(shù)量相當(dāng)?shù)那闆r下,顯著優(yōu)于類似的密集模型。
工程應(yīng)用
MoE模型在需要高效推理的實際應(yīng)用中展現(xiàn)出巨大的潛力。例如,在實時翻譯和智能助手等場景中,計算成本的降低和推理效率的提高尤為重要。MoE模型可以根據(jù)輸入動態(tài)選擇合適的專家,從而實現(xiàn)快速而準確的推理。
以實時翻譯為例,傳統(tǒng)模型可能需要大量計算資源來處理復(fù)雜的語言轉(zhuǎn)換,而MoE模型則能夠通過激活少量專家,快速處理翻譯任務(wù),降低延遲并提高響應(yīng)速度。同樣地,在智能助手中,MoE模型可以根據(jù)用戶的不同需求,動態(tài)分配計算資源,從而提供更加個性化和高效的服務(wù)。
理論研究
在模型架構(gòu)設(shè)計和優(yōu)化方面,MoE模型提供了新的思路和方法。傳統(tǒng)模型在擴展過程中面臨著計算成本急劇上升的挑戰(zhàn),而MoE模型通過稀疏激活部分參數(shù),為解決這一問題提供了有效的途徑。
研究表明,通過將密集模型的FFN參數(shù)隨機分割成多個專家,并在每一層引入MoE模塊,可以在保持模型性能的同時,減少計算開銷。例如,獨立隨機拆分方法在實驗中取得了最佳性能。與其他方法相比,該方法在專家和門控網(wǎng)絡(luò)同時訓(xùn)練時,可以減少偏差,快速恢復(fù)模型的語言能力。
非重疊隨機拆分法
非重疊隨機拆分法通過隨機拆分原始FFN的參數(shù)來構(gòu)建專家,這種方法在實踐中取得了顯著效果。具體而言,給定一個包含所有中間神經(jīng)元索引的集合U,通過將U隨機分割成等大小的子集,從而構(gòu)建出多個專家網(wǎng)絡(luò)。這種方法能夠在保持模型原有表示能力的基礎(chǔ)上,減少計算復(fù)雜度。
在LLaMA-MoE模型的構(gòu)建中,采用了非重疊隨機拆分法,將FFN層中的中間神經(jīng)元均勻分割成多個子集,每個子集對應(yīng)一個專家網(wǎng)絡(luò)。實驗結(jié)果表明,該方法不僅在減少計算成本方面表現(xiàn)出色,還能夠在持續(xù)預(yù)訓(xùn)練階段快速恢復(fù)模型的語言能力。研究還發(fā)現(xiàn),對專家輸出進行重新縮放操作,可以顯著提升MoE模型的性能。
通過這些研究和實踐,MoE模型不僅在理論上提供了新的研究方向,還在實際應(yīng)用中展現(xiàn)出了顯著優(yōu)勢,為未來的大規(guī)模語言模型發(fā)展提供了重要參考。
共享神經(jīng)元方法
共享神經(jīng)元方法通過結(jié)構(gòu)化裁剪來保留模型的部分表示能力,這種方法主要分為內(nèi)部共享和外部共享兩種策略。
1. 內(nèi)部共享
內(nèi)部共享策略主要是通過對神經(jīng)元的重要性進行排序,并根據(jù)排序結(jié)果選擇部分神經(jīng)元進行共享。具體來說,首先對每個神經(jīng)元進行重要性評估,可以使用一階泰勒展開來度量每個神經(jīng)元對損失變化的影響。然后,根據(jù)這些重要性分數(shù),將最重要的神經(jīng)元在不同的專家間共享,而其余神經(jīng)元則分配給特定的專家。這種方法可以在不顯著降低模型表示能力的情況下,實現(xiàn)有效的參數(shù)裁剪和共享。
2. 外部共享
外部共享策略則是在不同專家間直接共享部分神經(jīng)元,而不進行重要性排序。這種方法通過預(yù)先定義的規(guī)則,將一些神經(jīng)元設(shè)定為共享神經(jīng)元,并將其余神經(jīng)元分配給特定專家。這種方法的優(yōu)點在于實現(xiàn)簡單且計算開銷較小,但可能在某些情況下無法達到內(nèi)部共享策略所帶來的性能提升。
數(shù)據(jù)采樣權(quán)重
在訓(xùn)練過程中,數(shù)據(jù)采樣權(quán)重的選擇對模型的收斂速度和最終性能有重要影響。我們研究了靜態(tài)和動態(tài)兩種數(shù)據(jù)采樣策略,以期獲得最快的收斂速度和最佳的性能提升。
1. 靜態(tài)采樣
靜態(tài)采樣策略是指在訓(xùn)練過程中使用固定的采樣權(quán)重,不隨時間變化。這種方法的優(yōu)點在于實現(xiàn)簡單且計算開銷較小,但可能無法適應(yīng)數(shù)據(jù)分布的動態(tài)變化。
2. 動態(tài)采樣
動態(tài)采樣策略則會在訓(xùn)練過程中不斷調(diào)整采樣權(quán)重,以適應(yīng)當(dāng)前模型的訓(xùn)練需求和數(shù)據(jù)分布變化。具體來說,可以每隔一段時間(例如每2.5B tokens)調(diào)整一次采樣權(quán)重,根據(jù)當(dāng)前模型在不同數(shù)據(jù)域上的表現(xiàn)進行調(diào)整。這種方法雖然計算開銷較大,但可以顯著提升模型的收斂速度和性能。
數(shù)據(jù)過濾
為了加快模型的收斂速度,我們對訓(xùn)練數(shù)據(jù)進行了嚴格的質(zhì)量過濾。具體來說,我們過濾掉了低質(zhì)量的文本數(shù)據(jù),如廣告和不流暢的文本。
1. 廣告過濾
廣告通常包含大量冗余和無關(guān)信息,對模型的訓(xùn)練效果影響較大。我們通過特定的規(guī)則和算法,過濾掉了大約50%的廣告數(shù)據(jù),從而提升了數(shù)據(jù)集的整體質(zhì)量。
2. 不流暢文本過濾
不流暢的文本通常表現(xiàn)為語法錯誤、拼寫錯誤或邏輯不連貫。我們使用自然語言處理技術(shù),過濾掉了大約15%的不流暢文本數(shù)據(jù),從而進一步提升了模型的訓(xùn)練效率和效果。
實驗設(shè)置
我們的實驗在112個A100 (80G) GPU上進行訓(xùn)練,最大學(xué)習(xí)率為2e-4。訓(xùn)練數(shù)據(jù)集采用了SlimPajama,該數(shù)據(jù)集經(jīng)過清洗和去重處理,包含627B tokens的數(shù)據(jù)。訓(xùn)練過程中,我們設(shè)置了全局批次大小為15M tokens,最大上下文長度為4096。在經(jīng)過100步的熱身訓(xùn)練后,學(xué)習(xí)率逐步下降到2e-5,采用余弦調(diào)度策略。整個訓(xùn)練過程中,我們對每個模型進行了13.6k步(約200B tokens)的訓(xùn)練。
通過以上方法和設(shè)置,我們成功構(gòu)建并訓(xùn)練了LLaMA-MoE模型,并在多項任務(wù)中顯著超越了同類模型。
實驗結(jié)果
LLaMA-MoE-3.5B在多個下游任務(wù)上的表現(xiàn)顯著優(yōu)于其他具有相似激活參數(shù)的開源模型,如Sheared-LLaMA和Open-LLaMA-3B-v2。具體來說,LLaMA-MoE-3.5B(4/16)在各種任務(wù)中的平均分數(shù)超過了最具競爭力的模型Sheared-LLaMA 1.3分。此外,LLaMA-MoE-3.0B與Open-LLaMA-3B-v2表現(xiàn)相當(dāng)。
在ARC-c和HellaSwag數(shù)據(jù)集上的表現(xiàn)顯示,隨著訓(xùn)練過程的推進,模型的性能穩(wěn)步提升。盡管ARC-c的結(jié)果波動較大,但HellaSwag提供了較為平滑的結(jié)果。訓(xùn)練損失方面,LLaMA-MoE-3.0B和LLaMA-MoE-3.5B分別收斂到1.95和1.90,這兩個模型激活的參數(shù)較少,因此損失較LLaMA-2 7B略高。
專家構(gòu)建方法對比
在實驗中,我們比較了四種不同的專家構(gòu)建方法。結(jié)果顯示,非重疊隨機拆分法(IndependentRandom)表現(xiàn)最佳。這種方法在訓(xùn)練200B tokens后,表現(xiàn)出最佳的平均分數(shù)。相比之下,共享神經(jīng)元構(gòu)建方法(SharingInter和SharingInner)在初始階段表現(xiàn)良好,但隨著訓(xùn)練的進行,其性能顯著下降。
我們還進行了專家輸出重新縮放的消融研究,結(jié)果表明,重新縮放操作顯著提高了MoE模型的性能。這表明,專家構(gòu)建方法對模型最終性能有著重要影響,而重新縮放操作則進一步提升了專家的表現(xiàn)能力。
數(shù)據(jù)采樣策略
在數(shù)據(jù)采樣策略的比較中,靜態(tài)采樣權(quán)重策略(StaticSheared)在性能上優(yōu)于動態(tài)采樣策略。盡管StaticSheared在訓(xùn)練損失上并不是最低的,但其在下游任務(wù)上的表現(xiàn)最佳。動態(tài)采樣權(quán)重策略(DynamicUniform和DynamicLLaMA)在訓(xùn)練損失上波動較大,顯示出不穩(wěn)定性。
在數(shù)據(jù)采樣權(quán)重的變化中,我們發(fā)現(xiàn)不同策略對不同領(lǐng)域的數(shù)據(jù)有不同的權(quán)重分配。靜態(tài)采樣策略的權(quán)重在整個訓(xùn)練過程中保持不變,而動態(tài)采樣策略的權(quán)重則隨著訓(xùn)練的進行逐漸變化。這表明,數(shù)據(jù)采樣策略的選擇對模型的訓(xùn)練效率和最終性能有著重要影響。
數(shù)據(jù)過濾策略
數(shù)據(jù)過濾策略在提高模型性能方面也起到了關(guān)鍵作用。通過過濾掉廣告和不流暢文本,訓(xùn)練損失顯著降低。具體而言,過濾掉廣告數(shù)據(jù)的方法在下游任務(wù)上的表現(xiàn)不如過濾不流暢文本的方法。這可能是由于廣告數(shù)據(jù)中的知識和信息較多,被過濾掉的數(shù)量較大,從而影響了模型的性能。
基于這些結(jié)果,我們最終選擇使用過濾掉不流暢文本的數(shù)據(jù)集進行訓(xùn)練。盡管沒有引入新的數(shù)據(jù)集,但通過過濾部分低質(zhì)量數(shù)據(jù),我們加快了模型的收斂速度,并提高了模型的整體表現(xiàn)。
地址:https://arxiv.org/pdf/2406.16554
代碼:https://github.com/pjlab-sys4nlp/llama-moe
本文轉(zhuǎn)載自 AI論文解讀,作者:柏企
