给 Llama 2(羊驼)大模型剪一剪驼毛,会有怎样的效果呢?今天普林斯顿大学陈丹琦团队提出了一种名为 LLM-Shearing 的大模型剪枝法,可以用很小的计算量和成本实现优于同等规模模型的性能。
自大型语言模型(LLM)出现以来,它们便在各种自然语言任务上取得了显著的效果。不过,大型语言模型需要海量的计算资源来训练。因此,业界对构建同样强大的中型规模模型越来越感兴趣,出现了 LLaMA、MPT 和 Falcon,实现了高效的推理和微调。这些规模不等的 LLM 适用于不同的用例,但从头开始训练每个单独的模型(即使是 10 亿参数小模型)还是需要大量计算资源,这对于大多数科研机构而言仍是很大的负担。因此在本文中,普林斯顿大学陈丹琦团队试图解决以下问题:能否利用现有预训练 LLM 来构建一个规模更小、通用且在性能上有竞争力的 LLM,同时比从头开始训练需要的计算量少得多?研究者探索利用结构化剪枝来实现目标。这里的问题是,对于通用 LLM,剪枝后的模型会出现性能下降,尤其是在剪枝后没有大量计算投入的情况。他们使用的高效剪枝方法可以用来开发规模更小但仍具有性能竞争力的 LLM,并且与从头开始训练相比,训练需要的计算量也大大减少。
- 论文地址: https://arxiv.org/abs/2310.06694
- 代码地址: https://github.com/princeton-nlp/LLM-Shearing
- ModelsSheared-LLaMA-1.3B, Sheared-LLaMA-2.7B
在对 LLM 进行剪枝之前,研究者确定了两个关键技术挑战,一是如何确定最终的性能强大、推理高效的剪枝结构?LLM 目前的结构化剪枝技术没有指定的目标结构,导致剪枝后模型在性能和推理速度方面不理想;二是如何继续预训练剪枝后的模型以达到预期性能?他们观察到,与从头开始训练模型相比,使用原始预训练数据来训练会导致不同域出现不同的损失减少。针对这两个挑战,研究者提出了「LLM - shearing」算法。这种新颖的剪枝算法被称为「定向结构化剪枝」,它将源模型剪枝为指定的目标架构,该结构通过现有预训练模型的配置来确定。他们表示,该剪枝方法在源模型中搜索子结构,并在资源受限的情况下最大程度地保持性能。此外设计一种动态批量加载算法,它能根据损失减少率按比例加载每个域的训练数据,从而高效利用数据并加速整体性能的提升。最终,研究者将 LLaMA2-7B 模型剪枝成了两个较小的 LLM,分别是 Sheared-LLaMA-1.3B 和 Sheared-LLaMA-2.7B,证实了其方法的有效性。
他们仅仅使用 500 亿个 token(即 OpenLLaMA 预训练预算的 5%)进行剪枝和继续预训练,但对于 11 个代表性下游任务(如常识、阅读理解和世界知识)以及开放式生成的指令调整,这两个模型的性能仍然优于其他同等规模的流行 LLM,包括 Pythia、INCITE 和 OpenLLaMA。
不过要提到一点,在这篇论文发布 Sheared-LLaMA-3B 的时候,最强 3B 开源模型的纪录已经被 StableLM-3B 打破了。
此外,下游任務表現軌跡表明,使用更多 token 來進一步訓練剪枝後的模型,將帶來更大的收益。研究者只對最多 70 億參數的模型進行了實驗,但 LLM-shearing 具有高度通用性,可以在未來的工作中擴展到任何規模的大型語言模型。 #給定一個現有的大模型M_S(來源模型),本文目標是研究如何有效地產生一個更小、更強的模型M_T(目標模型)。研究認為這需要兩個階段來完成:
- 第一階段將M_S 剪枝為M_T,雖然這樣減少了參數數量,但不可避免地導致性能下降;
結構化剪枝可以去除模型大量參數,從而達到壓縮模型並加速推理的效果。然而,現有的結構化剪枝方法會導致模型偏離常規架構的配置。例如 CoFiPruning 方法產生的模型具有不統一的層配置,與標準的統一層配置相比,會產生額外的推理開銷。 本文對 CoFiPruning 進行了擴展,以允許將來源模型剪枝為指定的任何目標配置。例如,本文在產生 2.7B 模型時使用 INCITE-Base-3B 架構作為目標結構。 此外,本文還在不同粒度的模型參數上學習一組剪枝遮罩( pruning mask),遮罩變數如下所示:
每個遮罩變數控制是否剪枝或保留相關的子結構。例如,如果對應的 z^layer= 0,則需要刪除這個圖層。下圖 2 說明了剪枝遮罩如何控制被剪枝的結構。
剪枝之後,本文透過保留與每個子結構中的遮罩變數相關的最高得分元件來最終確定剪枝後的架構,並繼續使用語言建構模目標對剪枝後的模型進行預訓練。 #該研究認為對剪枝後的模型進行大量預訓練是很有必要的,這樣才能恢復模型效能。 受其他研究的啟發,本文提出了一種更有效的演算法,即動態批量加載,其可以根據模型性能簡單地動態調整域比例。演算法如下:
模型配置:本文將LLaMA2-7B模型作為源模型,然後進行結構化剪枝實驗,他們將LLaMA2-7B 壓縮成兩個較小的目標尺寸2.7 B 和1.3B 參數,並將剪之後的模型與相同尺寸的模型進行了性能比較,包括OPT-1.3B、Pythia-1.4B、OPT-2.7B、 Pythia-2.8B、INCITE-Base-3B、OpenLLaMA-3B-v1、OpenLLaMA-3B-v2。表 8 總結了所有這些模型的模型體系結構細節。
資料:由於 LLaMA2 的訓練資料並不是公開存取的,因此本文使用了 RedPajama 資料集 。表 1 提供了本文模型和基準模型所使用的預訓練資料。
訓練:研究者在所有實驗中最多使用了 16 個 Nvidia A100 GPU (80GB)。 本文表明,Sheared- LLaMA 明顯優於現有的類似規模的LLM,同時只使用一小部分計算預算來從頭開始訓練這些模型。 下游任務:表 2 展示了 Sheared-LLaMA 和類似大小的現有預訓練模型的零樣本和少樣本在下游任務上的表現。
指令調校:如圖 3 所示,與同等規模的所有其他預訓練模型相比,指令調優的 Sheared-LLaMA 實現了更高的獲勝率。
圖 4 顯示了 INCITEBase-3B 模型開始時的精確度要高得多,但其效能在持續的預訓練過程中趨於穩定。
#其中,研究者從以下三個方面的影響來分析動態批次載入的有效性:(1) 跨域的最終LM 損失,(2) 整個訓練過程中每個領域的資料使用情況,(3) 下游任務效能。結果均基於 Sheared-LaMA-1.3B 演算法。 跨域損失差異。動態批量載入的目的是平衡各域的損失降低率,使損失在大致相同的時間內達到參考值。圖5 中繪製了模型損耗(原始批量加載和動態批量加載)與參考損耗之間的差異,相比之下,動態批量加載能均勻地減少損失,各域的損失差異也非常相似,這表明數據使用效率更高。
資料使用。表 3 比較了 RedPajama 的原始資料比例和動態載入的域資料使用情況(圖 7 展示了整個訓練過程中域權重的變化)。與其他域相比,動態批次載入增加了 Book 和 C4 域的權重,這表明這些域更難恢復剪枝模型。
下游效能。如圖 6 所示,與在原始 RedPajama 分佈上訓練的模型相比,使用動態批量加載訓練的剪枝模型獲得了更好的下游性能。這表明,動態批量加載所帶來的更均衡的損失減少可以提高下游效能。
#此外,研究者將LLM- shearing 方法與其他剪枝方法進行了比較,並報告了驗證困惑度,它是衡量整體模型能力的一個有力指標。 由於計算上的限制,下面的實驗控制了所有比較方法的總計算預算,而不是將每種方法運行到最後。 如表4 所示,在相同稀疏度下,本文的目標剪枝模型的推理吞吐量比非均勻剪枝CoFiPruning 模型更高,但困惑度略高。
#表5 顯示,在控制token 總量的情況下,增加剪枝開銷可以持續改善困惑度。然而,由於剪枝比持續的預訓練更昂貴,研究者將 0.4B 的 token 分配給剪枝。
以上是手把手教你剪「羊駝」,陳丹琦團隊提出LLM-Shearing大模型剪枝法的詳細內容。更多資訊請關注PHP中文網其他相關文章!