【文獻閱讀】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey

這篇文章發表于2024年4月

摘要

大語言模型(LLMs)的快速發展推動了多個領域的變革,重塑了通用人工智能的格局。然而,這些模型不斷增長的計算和內存需求帶來了巨大挑戰,阻礙了學術研究和實際應用。為解決這些問題,人們開發了包括算法和硬件解決方案在內的多種方法來提高大語言模型的效率。本綜述全面回顧了旨在提高大語言模型效率的算法進展。與其他通常專注于特定領域(如訓練或模型壓縮)的綜述不同,本文探討了對大語言模型端到端算法開發至關重要的多維度效率。具體而言,它涵蓋了與效率相關的多個主題,包括縮放定律、數據利用、架構創新、訓練和微調策略以及推理技術。本文旨在為研究人員和從業者提供有價值的參考,為這一關鍵研究領域的未來創新奠定基礎。我們的相關參考文獻庫維護在此處。

CCS概念:計算數學;計算機系統組織;軟件及其工程;計算理論;應用計算。

附加關鍵詞和短語:大語言模型;人工智能;計算效率;內存效率;數據利用;架構設計;訓練;微調;推理;軟件。

?1 引言

大語言模型(LLMs)[27, 113, 241, 308, 335]以其擁有數億甚至數千億參數的龐大規模為特征[12, 23, 53],已成為人工智能領域的核心焦點。以ChatGPT[201]和Claude[2]等應用為代表,這些模型在多種通用任務中展現出了令人矚目的能力,如文本摘要[309]、翻譯[101]、問答[224],甚至基礎編碼[33],這在很大程度上歸因于它們在自然語言理解方面的專長。盡管其卓越性能背后的確切機制仍不明確[348],但人們普遍認為,其大規模賦予了它們在較小模型中未觀察到的涌現能力[286],這被視為邁向通用人工智能(AGI)[4, 24]的關鍵一步。

圖 1. PaLM [53] 在不同規模(80 億、620 億、5400 億)下的能力和性能樹 [1]。每個圓形節點代表一種特定能力,其大小表示相應的性能水平 —— 圓圈越大,能力越強。隨著模型規模的增加,不僅在現有任務上的性能有所提升,還展現出新的能力。?

雖然大語言模型的大規模對于其能力至關重要(見圖1),但這也帶來了一個顯著的缺點:其部署受到高昂的計算成本和內存需求的嚴重限制[273, 301, 346, 349]。訓練這些模型所需的資源巨大,在資源分配和模型設計方面都帶來了挑戰。例如,探索不同架構或策略的成本變得高得令人卻步[335]。此外,它們的大規模使其不適合邊緣設備等資源受限的環境,從而縮小了其應用范圍[6]。這種計算負擔還將大語言模型的開發局限于擁有豐富資源的大公司[23, 200, 215]。許多關鍵細節,如數據收集流程和訓練方法,仍然是專有的,這阻礙了學術研究,并給小公司帶來了挑戰。此外,訓練這些模型對環境的影響也不容忽視,引發了對碳排放和倫理問題的關注[274, 276, 291]。因此,提高大語言模型的效率越來越受到重視。

受對更高效大語言模型這一迫切需求的推動,本綜述旨在全面、及時地闡述這一主題。在本文的背景下,“效率”被定義為在不影響模型性能的前提下對計算和內存資源的優化。我們采用整體方法,探索對大語言模型端到端開發至關重要的多個效率維度。這些維度包括數據利用、架構設計、訓練和微調策略以及推理技術,從算法軟件的角度涵蓋了模型開發的整個流程。雖然已有一些綜述關注大語言模型效率的特定方面,如數據[322]、訓練[246, 340, 349]、微調[329]或推理[301, 346],但它們往往沒有提供全面的視角。其他研究,如[273],對自然語言處理(NLP)的各種效率方面提供了有價值的見解,但大語言模型領域的快速發展需要最新、全面的綜述。相比之下,本文旨在更全面、及時地概述有助于開發高效大語言模型的關鍵方法和技術。

本綜述的其余部分組織如下,從算法角度全面理解大語言模型效率的多個方面:
- 第2節“背景”介紹大語言模型的核心概念,并概述評估其效率的相關指標。
- 第3節“預算效率”探討像縮放定律這樣的預測方法在給定資源約束下優化大語言模型性能中的作用。
- 第4節“數據效率”聚焦于優化數據利用的技術,從而在不影響性能的情況下減少資源消耗。
- 第5節“架構效率”回顧創新的架構設計,詳細探討架構對效率的影響。
- 第6節“訓練和微調效率”討論從頭開始高效訓練大語言模型以及針對特定下游任務微調預訓練模型的策略。
- 第7節“推理效率”探索旨在加速推理速度和減少內存占用的模型壓縮技術領域。
- 第8節“結論”總結本綜述的主要發現,并討論它們對推進高效大語言模型的更廣泛影響。

圖2展示了大語言模型效率各個維度的示意圖。

?2 背景

在本節中,我們將概述構成大語言模型基礎的核心概念,以及用于評估其效率的關鍵指標。

?2.1 大語言模型的核心概念

語言建模是自然語言處理領域的基石,旨在對單詞序列的生成可能性進行建模,并預測后續或缺失詞元的概率。在過去幾十年里,這一領域發生了顯著的演變。最初,它根植于統計語言模型[15, 29, 118, 227, 323],之后重點逐漸轉移到預訓練神經語言模型[130, 156, 189, 190, 207, 215],最近又發展到大語言模型(LLMs)[27, 113, 241, 308, 335]。雖然大語言模型沒有標準化的定義,但它們通常以其龐大的參數規模和非凡的學習能力為特征。在本節中,我們采用[335]中概述的標準,重點關注參數超過10億的語言模型,并詳細討論其核心概念。

架構基礎:大語言模型通常可以分為兩種主要范式:編碼器 - 解碼器模型[149, 151, 175, 207, 217, 233],以BERT[130]為代表;以及僅解碼器模型[12, 23, 53, 72, 107, 200, 214 - 216, 235, 269 - 271, 293, 331],如GPT系列[23, 200, 214, 215]。BERT使用掩碼語言建模進行訓練,使其能夠通過預測掩碼或缺失詞元在上下文理解方面表現出色。另一方面,GPT模型使用自回歸建模進行訓練,通過預測序列中的后續詞元,使其具備強大的生成能力。盡管存在這些差異,但這兩種類型的模型通常都依賴于Transformer[275]架構,其自注意力機制尤為值得關注。在自注意力機制中,每個詞元被表示為一個鍵、值和查詢。查詢衡量其他詞元(表示為鍵)在理解特定詞元時的重要性。這些權重應用于值,以創建上下文感知表示。這種機制允許序列中的每個詞元同時考慮所有其他詞元,便于對順序數據進行并行處理,并有效捕捉長序列依賴關系。因此,多頭注意力層通常堆疊形成大語言模型中的深度網絡。如今,像GPT - 4[200]和LLaMa[270, 271]這樣的僅解碼器模型越來越普遍,但自注意力的核心架構模塊在這些變體中始終存在。

訓練要點:大語言模型通過在廣泛多樣的數據集上進行初始預訓練階段來獲得通用能力[23, 308]。這些數據集涵蓋了廣泛的來源,如圖書、科學論文、代碼和網站[322]。然后,在相對較小的數據集上以監督方式對這些基礎知識進行微調,目的是使大語言模型能夠遵循人類指令,這一過程稱為指令調整[49, 54, 56, 170, 202, 257, 265, 284, 329, 338, 344, 351]。接著,對經過指令微調的大語言模型進行人類反饋強化學習,以進一步使其行為與人類偏好和指令保持一致[271]。在當前的環境中,僅解碼器模型已成為標準,特別是因為它們具有卓越的生成能力。這些模型在預訓練階段采用自回歸目標,以最大化基于先前上下文預測后續詞元的可能性。這種自回歸預訓練的擴展[107, 126]顯著增強了大語言模型的能力,如GPT和PaLM系列模型所示[12, 53]。例如,PaLM[53]在7800億詞元的數據集上進行訓練,并使用了540億參數的Transformer架構。其繼任者PaLM - 2[12]進一步推進了這一進展;其最大的變體擁有1.1萬億參數,并在包含1.5萬億詞元的更多樣化的多語言數據集上進行訓練。然而,這種擴展也帶來了一系列挑戰,需要高效的訓練基礎設施和優化策略。通常采用專注于數據并行性的分布式訓練框架,如DeepSpeed[221]和全分片數據并行(FSDP)[3],或像Gpipe[114]和PipeDream[195]這樣的流水線并行性。此外,也會使用像Megatron - LM[197, 250]和SARATHI[5]這樣的張量并行技術。還經常采用諸如混合精度訓練[65, 194, 235]和量化感知訓練[168, 176, 296]等專門技術來簡化訓練過程。這些方法不僅解決了與大語言模型規模相關的計算挑戰,還促進了能力越來越強的模型的開發。

提示工程的多樣能力:利用大語言模型在各種任務中的多樣性的主要機制之一是通過提示工程[172, 290, 343]。在這種情況下,提示由用戶給出的自然語言指令組成,用于指導大語言模型的行為。提示工程的藝術在于精心設計這些指令,以從模型中引出特定且上下文合適的響應。兩種突出的技術是少樣本[23, 287]和零樣本[140]提示。少樣本提示為模型提供示例任務和相應的解決方案,而零樣本提示僅依賴于任務描述。這種提示形式與上下文學習(ICL)密切相關,這一概念最早在GPT - 3[23]中被觀察到,它允許模型在不重新訓練的情況下適應新任務。當上下文學習與精心設計的提示相結合時,大語言模型的涌現能力,特別是在處理各種未見任務方面,會顯著增強。像思維鏈(CoT)[283, 287]、思維樹(ToT)[178, 299, 310]和思維圖(GoT)[19]這樣的先進提示策略從人類推理和認知結構中汲取靈感。這些策略使大語言模型能夠探索回溯、思維合并和想法消除等新能力,從而提高在算術[203]、常識推理[263]和問答[85]等復雜推理任務中的響應質量。因此,提示工程是放大大語言模型多樣性和有效性的關鍵機制。

?2.2 效率評估指標

評估大語言模型的效率需要一種多方面的方法,考慮各種性能指標。這些指標通常與準確性和多樣性的度量一起呈現,以提供對大語言模型整體效率和有效性的全面評估。在接下來的段落中,我們將探討大語言模型領域中常用于理解效率的關鍵指標。

參數數量

大語言模型中的參數數量是一個關鍵因素,它直接影響模型的學習能力和復雜性。這些參數包括權重和偏差等元素,在訓練或微調階段是可學習的。較高的參數數量通常使模型能夠掌握更復雜的數據模式,有助于各種涌現能力的發展。然而,這帶來了訓練和推理時計算需求增加的缺點。此外,參數過多可能導致過擬合,特別是在訓練數據稀缺的情況下。為了緩解這一問題,通常會使用正則化和早停等常見技術。

模型大小

模型大小定義為存儲整個模型所需的磁盤空間,在訓練新的大語言模型或使用預訓練模型時,通常是首先要考慮的因素。鑒于超大模型可能無法存儲或運行,這個指標對于實際部署尤其重要,特別是在邊緣設備等存儲受限的環境中。模型大小以千兆字節(GB)或兆字節(MB)等單位表示,受多種因素影響。雖然參數數量起著重要作用,但其他因素,如參數使用的數據類型(例如float16、int8)和特定的架構選擇也有影響。除了對存儲需求的直接影響外,模型大小還間接反映了訓練和推理所需的計算資源。

浮點運算次數(FLOPs)

浮點運算次數(FLOPs)通常用于衡量大語言模型的計算復雜性。這個指標計算諸如加法、減法、乘法和除法等浮點運算的數量,給出在單次前向傳遞中完成的計算量的估計。雖然FLOPs為計算需求和潛在的能源使用提供了有價值的見解,但它并不是一個完整的度量。其他因素,如系統并行性和架構選擇,也在決定模型的整體計算效率方面發揮作用。較高的FLOPs計數通常意味著模型的計算需求更高,這對于在資源有限的環境中部署可能是一個挑戰。因此,優化這個指標通常是開發更高效大語言模型的關鍵重點。

推理時間/每秒詞元數

推理時間,也稱為延遲或時延,衡量大語言模型在推理階段處理輸入并生成響應所需的時間。與FLOPs不同,FLOPs提供了計算需求的理論估計,而推理時間提供了實際性能的實際衡量。這是因為它是在實際部署設置中進行評估的,考慮了特定的硬件和優化。通常以毫秒(ms)或秒(s)為單位表示,這個指標對于需要快速響應或有嚴格延遲約束的實時應用至關重要。將推理時間歸一化得到每秒詞元數,它指的是語言模型在一秒內可以處理(讀取、分析、生成等)的詞元數量。這是一個關鍵的性能指標,反映了模型的速度和效率。在快速推理時間/每秒詞元數和高泛化能力之間取得平衡是開發高效大語言模型的關鍵重點。

內存占用

內存占用指的是在推理或訓練期間加載和運行模型所需的隨機存取內存(RAM)量。這個指標對于理解模型的操作需求至關重要,特別是在邊緣設備或內存容量有限的服務器等資源受限的環境中。以MB或GB為單位表示,內存占用不僅包括模型參數,還包括其他運行時必需品,如中間變量和數據結構。較大的內存占用可能會限制模型的可部署性,可能需要諸如模型剪枝或量化等優化技術來減少它。

碳排放

碳排放在大型模型的評估中越來越重要,反映了訓練和運行這些模型對環境的影響。這個指標通常以模型生命周期(從訓練到推理)中排放的二氧化碳當量千克或噸數來衡量。碳足跡受多種因素影響,包括所用硬件的能源效率、電力來源以及模型訓練和運行的持續時間。高碳排放不僅對環境有影響,還可能影響部署大語言模型的社會和倫理考量。因此,人們越來越重視優化模型以提高能源效率,從而減少其碳足跡。這通常通過硬件加速、算法改進,甚至為數據中心選擇更環保的能源來實現。

?3 預算效率:縮放定律

?3.1 引言

大語言模型(LLMs)的性能受到多種因素的顯著影響,包括訓練數據、模型大小、架構、計算資源以及訓練方法本身。訓練大語言模型需要大量資源,使得傳統的通過試錯來優化這些因素的方法既不切實際又資源密集。因此,在訓練前預測大語言模型的性能不僅有益,而且往往是必要的。這種預測方法有助于更有效地規劃和分配資源。例如,考慮一個計算資源有限的場景:如何在模型大小和訓練數據之間實現最佳平衡,以達到最小的目標函數值?提前回答這些問題可以顯著提高大語言模型訓練過程的效率和有效性。

最近對預測大語言模型(LLMs)性能的研究主要集中在理解縮放定律[126]。該定律描述了大語言模型的性能如何受到模型架構、神經模型大小、訓練計算能力以及可用數據等因素的影響。縮放定律的概念源于用于預測模型泛化的統計力學方法,其歷史可以追溯到20世紀90年代初[10, 17, 96, 240]。在現代深度學習模型的背景下,它的相關性最近得到了重新重視[9, 25, 102 - 104, 107, 126, 192, 226, 254, 266, 268]。本節將深入探討應用于大語言模型的縮放定律的最新進展和見解,突出這些模型在不同條件下的演變和性能表現。

?3.2 縮放定律

文獻[126]對基于Transformer的大語言模型的經驗縮放定律進行了全面研究。作者觀察到,模型性能(目標函數\(L\))主要取決于三個因素:模型參數數量\(N\)、數據集大小\(D\)以及訓練的計算預算。他們證明了模型性能(以目標函數\(L\)衡量)與這些因素之間存在冪律關系。例如,他們發現性能與數據集大小之間183, 186, 349];(ii)結合硬件協同設計的IO感知注意力計算[58, 60, 63, 97, 98, 108]。這兩種方法都能減少硬件加載時間,以實現高效的注意力計算。

快速注意力計算

在快速注意力領域,研究人員正在開發創新策略來提高效率。一個主要關注點是注意力分解,其目的是減少在某些情況下通常不必要的注意力計算。當處理冗長的順序輸入時,這種技術特別有用,因為直接的成對注意力計算在計算上會變得非常密集。通過采用注意力分解,計算需求可以顯著降低,將二維計算轉換為更易于管理的一維格式[8, 50, 183, 319]。此外,這些分解注意力方法旨在辨別并強調相鄰位置令牌之間的注意力差異以及它們隨時間的變化。這種細致入微的方法確保計算資源集中在數據中最具影響力的元素上。另一種創新方法涉及使用基于頻率的技術,如快速傅里葉變換(FFT)和哈希表示。這些技術以一種與硬件能力相匹配的方式對注意力進行建模,使其在實際應用中更高效[62, 261, 350]。它們過濾掉接近零的注意力,并將計算精力集中在最終計算中最重要的部分。這種選擇性注意力確保資源不會浪費在處理相對不重要的數據上,進一步優化了模型的整體效率。除了直接計算成對注意力,一些方法[59, 68, 80, 169]探索了在塊級別計算注意力的可能性,這使得計算可以并行化,顯著提高了效率。例如,Monarch框架[59]及其高級版本Monarch Mixer(M2)[80]采用了一種新穎的策略。它們通過將密集注意力矩陣分解為置換矩陣和塊對角矩陣的組合來使其稀疏化。這種分解允許更高效地處理注意力計算。此外,塊級自注意力(BST)方法[169, 171]為自注意力和前饋網絡引入了塊級計算。這種技術旨在降低傳統注意力機制通常帶來的內存需求。而且,像LongNet[68]這樣的一些方法用擴張注意力代替了原始的密集注意力,使得能夠處理更長的令牌序列,從而擴展了大語言模型的能力。

與硬件相關的高效注意力

除了在軟件層面設計更高效的注意力機制,目前的一個重要關注點已轉向在硬件層面優化這些機制。該領域的一個主要挑戰是如何有效地利用GPU上的計算資源,如高帶寬內存(HBM)和靜態隨機存取內存(SRAM)。在這方面,最近出現了像FlashAttention[60]及其后繼者FlashAttention - 2[58]等進展。FlashAttention從以I/O為中心的角度重新考慮注意力計算。它最小化了HBM和SRAM之間的數據傳輸,解決了GPU處理中的一個關鍵瓶頸。這種方法將塊級softmax值計算和更新與統計信息集成在一起。這種集成消除了傳統上在確定所有注意力值之后才計算softmax函數的要求。在FlashAttention[60]的基礎上,FlashAttention - 2[58]進一步優化了工作分區,并減少了非矩陣乘法,利用了GPU對矩陣運算的優化。這些算法是根據硬件考慮而定制的,能夠在GPU機器上加速模型。基于FlashAttention,FlashDecoding[63]和FlashDecoding++[108]將鍵/值分割成更小的塊,以便對部分注意力進行并行化,而FlashDecoding++[108]進一步引入了具有統一最大值的異步softmax和具有雙緩沖的扁平通用矩陣乘法(GEMM)優化,以及適應硬件資源的啟發式數據流,以進一步提高速度。

在提升大語言模型(LLM)系統的探索中,一些研究人員從當前硬件架構中獲得了創造性靈感。一個顯著的例子是PagedAttention[147],它采用了操作系統中常用的虛擬內存和分頁技術,以克服大語言模型中的內存限制。PagedAttention通過模擬虛擬內存系統,引入了一種創新的內存管理方法。它將與請求相關的鍵值(KV)緩存分割成塊,而不是依賴于預先分配的連續內存。這種方法顯著減少了內存碎片化,這是傳統大語言模型內存分配策略中常見的問題。結果,它使大語言模型能夠在有限的內存資源約束下處理更長的序列。

?5.3 高效位置編碼

由于大語言模型可能需要處理長序列作為輸入,標準Transformer[275]中使用的絕對位置編碼(APE)無法滿足這一要求。為了提高架構的效率,研究人員正在探索新的位置編碼(PE)方法,這些方法可以通過相對位置[47, 48, 162, 212]或旋轉位置編碼[206, 256]來適應更長的序列。他們還在通過隨機位置編碼[229]甚至省略位置編碼[129]來尋求更具通用性的解決方案。在本節中,我們將討論其中一些最新進展。

基于加法的相對位置編碼

相對位置編碼方法利用兩個令牌之間的相對位置,而不是單個令牌的絕對位置。其中一些方法對相對位置進行編碼,并將編碼后的位置添加到后續的注意力中,這被稱為基于加法的相對位置編碼方法。T5[217]、TISA[288]和FIRE[162]是這種范式的代表。在這些模型中,位置嵌入應用于自注意力機制中查詢和鍵元素之間的交互,這與早期關注單個令牌的絕對位置有所不同。T5[217]中的相對位置編碼使用查找表將相對位置差異轉換為標量偏差值,并對所有分布外(OOD)序列長度使用相同的嵌入。TISA[288]結合了一個可訓練的高斯核,專注于令牌之間的位置差異。另一方面,FIRE[162]通過將令牌之間的索引差除以兩個索引中較小的一個,使用歸一化位置索引進行漸進插值。與APE相比,相對位置編碼(RPE)提供了一種更有效的方式來建模令牌之間的相對距離。這不僅增強了模型對令牌關系的理解,還便于長度外推,這是在語言處理中處理各種復雜序列的關鍵特征。

帶有衰減函數的相對位置編碼

另一個趨勢是采用使用衰減函數的可訓練相對位置編碼(RPE)。以ALiBi[212]、KERPLE[47]和Sandwich[48]等模型為代表,這種方法旨在使模型的注意力主要集中在相鄰令牌上。這些方法中衰減函數的使用確保了隨著令牌之間距離的增加,注意力會逐漸減弱。ALiBi引入了一個線性衰減函數來建模令牌之間的關系,對于捕捉隨著距離增加令牌相關性的減弱特別有效。KERPLE[47]使用兩種條件正定(CPD)核的變體:對數變體和冪變體。這些復雜的核在RPE計算過程中衰減兩個令牌之間的連接,以自適應地建模遠處令牌關系重要性的降低。同時,Sandwich[48]采用一系列余弦函數來表示令牌之間的差異。Sandwich利用余弦函數的周期性來捕捉令牌關系中的循環模式。通過減弱遠處位置之間的注意力,這些方法確保模型的注意力集中在更直接和上下文相關的令牌上,而不是遠離的令牌。

旋轉位置編碼

除了基于加法的相對位置編碼(將編碼后的位置添加到注意力計算中),還有一些RPE方法利用旋轉矩陣進行位置嵌入[34, 206, 256]。RoPE[256]引入了兩個旋轉矩陣來旋轉查詢和鍵向量。旋轉角度與它們的絕對位置成比例,然后被集成到點積注意力機制中。這種方式使RoPE能夠基于令牌之間的相對距離生成注意力,而不是直接計算它們的相對差異。然而,RoPE在推廣到超出其訓練長度的序列時存在局限性。在RoPE的基礎上,PI[34]通過位置插值(PI)擴展了其能力。在對適量數據進行微調后,PI顯示出處理非常長的上下文窗口的良好能力,解決了RoPE的主要局限性之一。YaRN[206]通過引入NTK感知插值和動態NTK插值進一步推進了這一領域。這種方法有效地解決了在有限數據集上進行微調或不進行微調的場景中高頻信息丟失的問題。YaRN的方法顯著提高了模型在無需大量微調的情況下擴展上下文大小的能力。這些方法的共同特點是在查詢和鍵向量中使用旋轉矩陣,這一技術在Transformer模型中建立更有效的RPE方面已顯示出有前景的結果。

其他位置編碼

除了相對位置編碼(RPE)方法,隨機位置編碼(Randomized PE)[229]和無位置編碼(NoPE)[129]提出了不依賴于對輸入查詢中令牌連續位置進行建模的方法。有趣的是,它們認為通過包含超出訓練分布長度的位置或完全放棄位置編碼,模型可以處理具有更長令牌長度的分布外情況,并在下游任務中表現出更強的泛化能力。隨機位置編碼[229]使用一個大于訓練期間遇到的最長序列的數字。它從一系列整數中隨機采樣,排序后將其用作索引。這種方法使模型在推理時能夠泛化到更長的序列,盡管它需要預先知道最大令牌長度。另一方面,無位置編碼在自注意力機制中完全放棄了位置編碼器。它表明模型的自注意力可以固有地學習句子中令牌之間的RPE。這種省略不僅簡化了模型架構,而且在泛化方面顯示出有前景的結果,特別是對于查詢超出訓練分布的句子。

?5.4 稀疏建模

在優化Transformer以提高效率的探索中,另一個關鍵研究領域是在這些基于注意力的架構中集成稀疏建模。這種方法對于降低計算需求至關重要,特別是在具有大量參數的模型中。稀疏建模出現了兩個主要方向:專家混合(MoE)[43, 72, 153, 193, 219, 244, 352]和Sparsefinder[272],它們采用了不同的方式。

專家混合(MoE)方法[43, 44, 72, 78, 248, 313]在模型中納入多個分支或“專家”,每個專家專門處理不同的子任務。在推理時,僅激活這些路徑的一個子集,在保持計算效率的同時有可能提高性能。這種設計使像GLaM這樣的模型能夠顯著擴展,盡管總共有超過1.2萬億個參數,但在推理時僅激活990億個參數。MoE的進一步發展,如稀疏MoE[43],解決了表示崩潰等問題,確保專家更均衡地被激活并實現高效的信息處理。

另一方面,Sparsefinder[272]采取了不同的方法,專注于揭示注意力機制本身的稀疏性。該方法通過注意力方案識別關鍵模式,這有助于有效地將計算資源分配到模型中最具影響力的區域

?5.5 無注意力

標準注意力機制[275]的一個顯著缺點是注意力計算的二次復雜度,這使得它在處理長序列時特別低效。盡管高效/稀疏注意力提供了一些緩解,但它的最壞情況理論復雜度仍然不變。為了解決這個問題,已經提出了各種無注意力方法,提供了避免計算二次注意力矩陣的替代方案[61, 91, 204, 210, 260, 324]。這些方法大致可以分為兩類:一類是用循環計算代替注意力機制[204, 260, 324],另一類是對狀態空間表示進行離散化[89 - 91, 95, 187, 253]。

值得注意的是,像RWKV[204]、H3[61]、Hyena[210]、RetNet[260]和Mamba[89]這些新方法實現了與標準Transformer相當的性能。RWKV[204]利用循環神經網絡(RNNs)簡化序列處理,從而降低處理長序列的復雜度。H3[61]基于狀態空間模型(SSMs),為數據表示和處理提供了一種高效的替代方案。Hyena[210]作為傳統注意力機制的直接替代品,簡化了Transformer架構。RetNet[260]引入了多尺度保留模塊與前饋網絡模塊相結合,增強了并行性和遞歸性,在訓練和推理階段都顯著提高了效率。

Mamba[89]包括基于狀態空間模型的選擇操作以進行壓縮,并通過與硬件相關的優化進一步提高效率。我們在表1中對這些方法與輸入查詢長度為\(n\)的標準Transformer進行了復雜度分析。它概述了每種方法的復雜度擴展情況,為無注意力技術的進展提供了見解。

表1. 當輸入長度為n的序列時,Transformer與無注意力方法在推理評估中的時間和內存成本比較。性能欄中“+”號越多,表示模型在域內驗證集和其他域外語料庫上的困惑度表現越好。

?6 訓練和微調效率

?6.1 引言

大語言模型訓練和微調技術的發展必須應對數據和模型規模不斷增長帶來的挑戰。本節深入探討對大語言模型的可擴展訓練和微調至關重要的效率方面,突出關鍵關注領域。

內存效率:大型Transformer模型中參數數量的快速增長,大約每兩年增長410倍,這帶來了巨大的內存挑戰。這種增長速度超過了GPU內存的擴展速度,同期GPU內存僅從16GB增加到80GB,增長了5倍。訓練期間的實際內存消耗遠遠超過了原始參數數量,包括模型狀態(參數、梯度、優化器狀態),以及中間狀態(中間激活、臨時緩沖區、內存碎片)。鑒于這些限制,單GPU設置不足以處理整個模型,因此需要像張量并行(TP)和流水線并行(PP)這樣的分布式訓練方法來進行有效的內存管理。

計算效率:雖然分布式訓練在加速大型模型的訓練方面具有潛在優勢,但它也引入了影響可擴展性的復雜性。一個顯著的觀察結果是,與單GPU設置相比,在多個GPU上進行訓練時,每個GPU的FLOPs會下降。這種下降源于有效利用越來越多計算資源的挑戰。因此,在訓練過程中,特別是在多GPU設置下,可擴展性成為提高計算效率的關鍵因素。

通信效率:這方面涉及訓練期間不同設備或層之間參數和梯度的交換。在數據并行訓練中,像全規約(all - reduce)這樣的技術用于在反向傳播結束時同步所有設備上的梯度。目標是在廣播、規約、全規約和全收集等集體操作中最小化通信數據量。

簡而言之,訓練和微調大語言模型是一項復雜的挑戰,需要全面的方法。一種綜合考慮所有這些效率方面的策略對于大語言模型的有效和可擴展訓練及微調至關重要。后續部分將詳細探討這些方面。

?6.2 可擴展訓練

穩定訓練策略

在大語言模型的預訓練過程中,確保訓練穩定性是效率的關鍵方面。訓練不穩定通常表現為梯度消失或梯度爆炸,這會嚴重阻礙訓練過程。為了減輕這些問題,仔細選擇和調整超參數至關重要。一種有效的方法是對批量大小進行策略性調整。例如,像PaLM[53]這樣的模型在訓練過程中會將批量大小從100萬個令牌逐漸增加到400萬個令牌。這種逐漸擴展有助于模型在不影響穩定性的情況下適應處理更大數據量的能力。另一個關鍵超參數是學習率,通常采用熱身余弦調度器。該調度器在訓練的早期階段(通常是總訓練步驟的0.1%到0.5%)逐漸增加學習率,然后實施余弦衰減策略。這種方法將學習率逐漸降低到其峰值的10%左右,確保在訓練過程中平衡快速學習和穩定性。優化器的選擇在穩定大語言模型的訓練中也起著關鍵作用。像Adam[135]和AdamW[179]這樣的優化器由于其利用過去梯度信息加速收斂的動量特性,是GPT - 3[23]和OPT[331]等模型的常用選擇。此外,以GPU內存效率著稱的Adafactor[245]優化器被用于PaLMT5[217]等模型。除了超參數調整,實施像權重衰減梯度裁剪這樣的穩定策略以防止梯度爆炸也很常見。然而,即使采用了這些措施,訓練損失仍可能出現尖峰,這通常受到當前模型狀態和正在處理的數據的影響。為了解決這個問題,像PaLM和OPT這樣的模型在檢測到損失尖峰時,會采用從先前檢查點重新開始訓練的策略,有效地跳過引發不穩定性的數據。這種方法不僅確保了訓練的穩定性,還通過避免長時間的無效訓練,提高了計算資源的使用效率。

混合精度訓練

在大語言模型預訓練領域,混合精度訓練成為提高內存和計算效率的關鍵策略。傳統上,神經網絡訓練涉及以全精度(FP32)格式存儲權重、梯度和激活值。然而,對于極其龐大的模型,這種方法可能資源消耗巨大。為了解決這個問題,采用了像FP16INT8這樣的低精度格式。這些格式不僅減少了內存使用,還加快了模型內部的通信過程。此外,現代GPU通常比處理FP32更擅長處理FP16計算,這進一步提高了計算速度。

盡管有這些優點,但直接從FP32轉換到FP16有時會由于FP16固有的溢出或下溢等問題導致性能下降[116, 342]。為了克服這些挑戰,開發了自動混合精度(AMP)[188]方法。AMP在以FP32格式維護權重的主副本的同時,在前向和反向傳遞中使用FP16進行計算。計算完成后,將權重轉換回FP32以更新主權重。這種方法結合了損失縮放技術以保留小梯度值,使得AMP能夠在無需大量超參數調整的情況下達到與FP32訓練相當的精度。精度降低的進一步進展導致了腦浮點(BF16)[125]的引入,這是一種新穎的半精度格式。BF16通過比FP16分配更多的位給指數部分、更少的位給尾數部分,以覆蓋與FP32相同的范圍。與FP16下的混合精度相比,BF16已展現出最先進的性能和更高的可靠性。

另一種創新方法是激活壓縮訓練(ACT)[32],它專注于將多個任務中的激活值平均壓縮到2位。ACT在反向傳播過程中使用壓縮后的激活值計算梯度,這顯著減少了激活值的內存需求。這種壓縮使得訓練時的批量大小可比傳統方法大6.6到14倍。總體而言,混合精度訓練體現了大語言模型訓練領域的不斷發展,通過創新技術持續平衡效率和性能。

基于并行性的技術

大語言模型訓練中的并行性是一種將計算負載分布到多個加速器(如GPU或TPU)上的策略。這種方法對于管理大語言模型訓練所需的大量數據和復雜計算至關重要,有助于開發更先進、能力更強的模型。在本節中,將討論各種并行訓練模式。

數據并行(DP):數據并行[76, 160, 163, 300]是一種簡單而有效的分布式訓練形式。在這種方法中,數據集被劃分為較小的子集,然后在多個加速器上并行處理。模型在這些設備上進行復制,每個副本在各自的子集上獨立執行前向和反向計算。DP的一個關鍵方面是在每個訓練步驟結束時同步梯度。每個設備上計算的梯度被平均,得到代表整個批次的梯度。這個過程確保了盡管是并行處理,但模型在所有數據子集上的學習是一致的。DP尤其以其最大化GPU利用率的能力而聞名。然而,它需要高帶寬互連來有效處理設備之間的通信需求。通過利用DP,訓練大規模大語言模型變得更加可行,能夠實現更快的開發周期并探索更復雜的模型架構。?

模型并行(MP):模型并行是DP的替代方法,側重于將模型本身分布到多個加速器上。這種方法對于處理參數數量多、規模大的模型特別有用,尤其是當單個GPU無法存儲整個模型時。模型并行可以進一步分為兩種類型:張量并行(TP)和流水線并行(PP)。?

?? 張量并行(TP)[243, 250, 303]是一種層內模型并行形式。它涉及將單個層的張量劃分到多個加速器上,允許訓練比單個GPU內存容量更大的模型。Megatron - LM[250]是這種方法的一個顯著例子,它提供了對Transformer參數(如MLP層、自注意力層和輸出嵌入層)的不同組件進行切片的策略。這種切片可以水平或垂直進行。最初,TP主要關注二維矩陣的劃分,但現在已經發展到包括多維劃分。像Colossal - AI[20, 278, 302]這樣的框架已經將TP擴展到更高維度,并引入了序列并行[142, 161]來處理序列數據。雖然TP在內存使用方面效率較高,但它需要高互連帶寬來實現有效的層間通信。

??? 流水線并行(PP)[114, 120, 133, 143, 195 - 197, 306]是一種層間模型并行形式。它涉及將模型的層以流水線配置劃分到多個加速器上。每個加速器負責計算不同的層,然后將其輸出傳遞給下一個加速器,就像裝配線一樣。這種設置允許對前向和反向傳遞進行順序但并發的處理。當模型的一個部分處理一部分數據時,其他部分可以同時處理不同的數據部分。PP的效率關鍵在于其保持模型所有部分都處于活動和高效狀態的能力,盡管這需要仔細的調度以最小化GPU的空閑時間。Gpipe[114]是最早提出的PP方案之一,它將PP與小批量劃分相結合。它將大型模型劃分到多個GPU上,并將輸入小批量處理為更小的微批量。這種方法允許高效訓練非常大的模型。Gpipe還使用一種稱為重計算[42]的策略,通過在反向傳播期間重新計算激活值而不是存儲它們來減少內存使用。然而,由于在反向計算期間需要緩存激活值,Gpipe仍然存在內存效率問題。PipeDream[99, 195]通過其一前向一后向(1F1B)策略進一步改進了PP方法。這種方法允許微批量在前向傳遞后立即進行反向傳播,使流水線的早期階段能夠更快地開始其反向計算。PipeDream還使用不同版本的權重進行異步梯度更新,并優化流水線階段的內存分配以實現更高效的處理。BPipe[133]引入了一種在整個流水線中平衡內存使用的技術。它利用后面階段的空閑內存來支持前面階段,與Megatron - LM相比,顯著加快了像GPT - 3 96B和GPT - 3 134B這樣的大型模型的訓練速度,提速1.25到2.17倍。TeraPipe[?]解決了訓練具有長序列長度的大型模型時的挑戰,長序列長度可能導致更小的微批量和流水線中更多的空閑時間。在Transformer架構中,一些層的計算不依賴于未來的隱藏狀態。TeraPipe利用這一事實,通過劃分輸入序列實現并行處理。它使用動態規劃在令牌之間的最佳點有效地分割序列,提高了并行處理的效率。

自動化并行:自動化并行已成為擴展現代大語言模型的關鍵方法,它結合了多種并行方法以實現最佳性能。像DeepSpeed[221]、Megatron - LM[250]和Colossal - AI[302]這樣的系統采用了3D并行方法,涉及將訓練數據均勻分布到工作節點上,手動劃分模型,并在每個流水線階段分配層。然而,這種手動編排并行類型的方式很復雜,并且不容易適應不同的模型和計算環境。

為了簡化這個過程,正在開發自動化并行化解決方案。這些解決方案旨在加快模型部署并確保對不同模型的適應性。隨著模型和計算集群的增長,并行配置的復雜性也在增加。Tofu[281]使用動態規劃算法來優化數據流圖劃分,以應對這一挑戰。Dapple[76]專注于通過最優劃分策略最小化流水線延遲。然而,由于不同并行策略之間的復雜交互,這些解決方案目前僅限于將數據并行與僅一種模型并行類型相結合。Alpa[337]采取了更全面的方法,將數據、模型和流水線并行組織成層次結構。它使用整數線性規劃來制定模型并行計劃,使用動態規劃來制定流水線并行計劃。在訓練GPT模型時,Alpa與Megatron - LM等專業系統相當,證明了其在處理復雜并行化挑戰方面的有效性。FlexFlow[120]擴展了3D并行的概念,提出了一種在不同維度(樣本、操作、屬性、參數)上劃分操作輸出張量的方法。計算圖中的每個操作都被分配一個特定的并行配置。為了找到最佳的并行策略,FlexFlow使用一個執行模擬器來預測在給定設備拓撲上運行操作符圖所需的時間。然后,它使用馬爾可夫鏈蒙特卡羅采樣系統地搜索最優策略,同時考慮操作符圖和設備拓撲。

內存優化

在訓練規模不斷增大的大語言模型時,存儲模型參數、梯度和優化狀態所需的內存顯著增加。在DP中,這個問題尤為嚴重,因為每個GPU傳統上都存儲模型參數的完整副本,導致大量內存冗余。高效的內存優化策略對于在有限的硬件資源上訓練更大的模型至關重要,它可以平衡訓練基礎設施不同組件之間的內存負載。

ZeRO[220]通過在GPU之間劃分內存負載來解決數據并行中的內存冗余問題。與每個GPU存儲整個模型參數、梯度和優化器狀態不同,ZeRO將這些元素進行劃分,使每個GPU僅持有部分數據。其余數據可以根據需要從其他GPU檢索。這種方法包括三個關鍵策略:參數劃分、梯度劃分和優化器狀態劃分,每個策略都針對模型內存需求的特定方面。在ZeRO的基礎上,ZeRO offload[223]擴展了這些概念,允許利用CPU和GPU的能力進行訓練,將一些計算和存儲卸載到CPU以減輕GPU的內存負擔。然而,這種卸載會增加CPU和GPU之間的通信,如果管理不當,可能會成為瓶頸。該策略將訓練過程視為一個數據流圖,將不同的計算節點分配到不同的設備上。前向和反向過程由GPU處理,而參數更新和精度轉換由CPU管理。這種方法旨在最小化CPU計算并減少通信開銷,確保在訓練過程中高效使用CPU和GPU資源。

結合這些進展,像DeepSpeed[221]這樣的系統提供了不同級別的內存優化。第一階段是ZeRO - DP(數據并行),它僅通過在GPU之間劃分優化器狀態來優化內存。第二階段是ZeRO - R(歸約和劃分),通過劃分梯度和優化器狀態進一步減少內存使用。第三階段是ZeRO - Infinity,它將內存優化擴展到GPU可用內存之外,利用CPU和NVMe內存來支持訓練極其大型的模型。

?6.3 可擴展微調

在大量多樣的數據集上訓練的大語言模型已經展示出了卓越的通用問題解決能力。然而,通過有針對性的適配,它們在特定領域或任務中的性能可以顯著提升。近年來,出現了一系列技術來促進這一適配過程。本節將討論兩種對預訓練大語言模型進行高效適配的主要方法:(i)參數高效微調,包括整合適配器層或微調預訓練模型的現有參數;(ii)通過提示工程整合任務特定上下文。這些方法是使大語言模型適應特定應用的關鍵策略,確保它們在各種自然語言處理任務中的通用性和有效性。

參數高效微調(PEFT)

預訓練大語言模型的巨大規模使得為下游任務或應用領域對整個模型進行全面微調既昂貴又不切實際。為了避免直接對完整的大語言模型進行微調,出現了一系列參數高效的調優方法。這些方法專注于通過調整或引入少量可訓練參數來優化大語言模型,同時保持大部分或所有原始預訓練參數不變。這些方法通常能取得不錯的性能,并且與全參數微調相比,顯著減少了可訓練參數的數量。它們在內存和計算效率方面都有所提升,為使大語言模型適應特定任務提供了更實際的解決方案。

部分參微調

一種簡單而有效的適配大語言模型的方法是部分參數微調,即僅對預訓練參數的選定部分進行微調,其余部分保持不變。這種方法已得到廣泛驗證。例如,文獻[144, 150]僅對最后幾層進行微調,就達到了全模型微調性能的90%。Xie等人在文獻[297]中根據隱藏狀態的可變性選擇部分層進行微調,尤其適用于分類任務。此外,BitFit[320]提出了一種替代策略,僅調整基于Transformer的大語言模型中的偏差項,也取得了有競爭力的性能。這些例子強調了部分參數微調作為一種資源高效的方式,使大語言模型能夠適應各種應用的潛力。然而,這些方法通常缺乏指導如何選擇特定參數子集進行進一步微調的詳細原則。

?模型 - 適配器微調

為了解決選擇特定參數進行微調的問題,引入了適配器微調技術,該技術涉及在預訓練模型中添加額外的小規模可學習模塊,即適配器[109]。這種方法保持了預訓練模型的完整性,但在預訓練大語言模型的一個或多個模塊中嵌入適配器塊。這些適配器通常采用緊湊的瓶頸層形式,例如由一個具有非線性函數和少量隱藏層神經元的兩層MLP(多層感知器)組成。適配器可以與Transformer架構的注意力層和前饋層串聯[109]或并聯[209]集成,也可以在Transformer架構之外集成[205]。為了進一步提高適配器的可重用性和通用性,開發了AdapterHub[208]。這個框架允許動態集成預訓練的適配器,以適應各種任務和大語言模型。盡管使用適配器加速了微調過程并減少了存儲需求,但它確實通過在每個Transformer層增加深度或寬度來修改計算圖。正如研究[228]中所觀察到的,這種修改會導致推理延遲略有增加,推理速度大約慢4 - 6%。

?參數 - 適配器微調

另一種相關方法是直接在模型參數中添加適配器。將預訓練網絡參數表示為\(\theta\),這類技術將模型參數擴展為\(\theta+\Delta \theta\),其中\(\theta\)保持固定,\(\Delta \theta\)通過低秩近似學習得到。diff - pruning[94]就是這種技術的一個實現,它在微調過程中通過添加稀疏促進正則化來學習任務特定的稀疏參數\(\Delta \theta\)。LoRA[111]為每個線性層學習低秩變換。具體來說,LoRA將權重矩陣重新參數化為\(\theta+\Delta \theta ≈\theta+BA\),其中預訓練權重矩陣\(\theta\)固定,而低秩矩陣\(B\)和\(A\)是可學習的。在LoRA中,所有權重矩陣的每個低秩子矩陣都共享一個恒定的內在秩,而沒有考慮不同模塊之間的重要性差異。AdaLoRA[328]通過根據重要性分數動態分配參數預算給權重矩陣來解決這一限制。它為更關鍵的增量矩陣分配更高的秩,以捕獲更詳細的任務特定信息,同時降低不太重要矩陣的秩以避免過擬合并節省計算資源。SoRA[69]引入了一個可優化的門,使用近端梯度法動態調整增量矩陣的秩。在QLoRA[66]中,預訓練模型首先被量化為4位。隨后,添加一組可學習的低秩適配器權重,并通過對量化權重的反向傳播梯度進行微調。QLoRA即使使用16位、8位或4位的適配器,也能達到與16位全參數微調相當的性能。

數據高效微調

數據高效微調是指為下游任務更新有限的提示參數,而不是對預訓練的大語言模型進行微調。它通常通過提示調優來實現,在提示調優中,預訓練模型的權重保持固定,僅調整添加的提示令牌。這種方法能夠更高效地使用數據,并且隨著模型參數規模的增加,往往能帶來性能的提升。

提示調優

提示調優是一種用于在有監督的下游任務中提升大語言模型性能的技術。它將下游任務構建為一個掩碼語言問題,并將原始token輸入轉換為一個模板,對某些token進行掩碼處理,讓大語言模型來完成。通過修改可調整的模板嵌入,提示調優旨在通過減少預訓練任務和特定下游任務之間的分布差異來提高下游任務的性能。這種方法還使大語言模型能夠進行少樣本甚至零樣本學習,在監督數據有限的場景中特別有用,因為它可以生成新的提示模板。

傳統方法需要手動設計提示模板和 verbalizers,這往往導致效果敏感且不穩定。然而,提示學習的最新進展帶來了提示構建的自動化和優化。AutoPrompt[249]引入了一種基于梯度的方法來自動搜索有效的模板。LMBFF[83]通過在離散提示空間中搜索標簽詞并使用基于T5的模板生成方法,提供了一種更高效的自動提示生成解決方案。為了解決離散優化的挑戰,Prefix - Tuning[165]推薦參數化提示,即僅對提示進行微調,而大語言模型保持不變。P - tuning[174]突破了模板必須由自然語言組成的傳統限制,將模板構建轉化為一個連續參數優化問題。CP - tuning[304]主張使用對比學習來自動學習嵌入的分布,以替代手動設計verbalizer。UPT[280]引入了提示 - 選項 - verbalizer范式,促進跨多種自然語言處理任務的聯合提示學習,并鼓勵大語言模型獲取任務不變的提示知識。

?7 推理效率

?7.1 引言

大語言模型(LLMs)中龐大的參數數量給在云服務和資源受限設備上的部署帶來了巨大挑戰,導致推理支持的維護成本高昂。因此,加速推理已成為一個緊迫的問題,受到了工業界和學術界的廣泛關注。一種常見的方法是構建性能與完整模型相當的緊湊模型,相關方法大致可分為四類:剪枝、知識蒸餾、量化和低秩分解。剪枝技術旨在識別和消除深度神經網絡(DNNs)算子中的冗余,從而創建更精簡的版本。知識蒸餾涉及將更大、更復雜的“教師”模型的知識轉移到更小、更高效的“學生”模型中,有助于在縮小模型規模的同時保持高性能。量化通過使用更少的比特表示大語言模型中的浮點數,降低了計算負載和存儲需求。低秩分解通過低秩矩陣近似大語言模型中的重權重矩陣,進一步節省計算資源。值得注意的是,其中一些方法需要專門的計算庫和硬件,才能實現實際的資源節省和加速。

?7.2 剪枝

剪枝技術旨在識別大語言模型算子內部的冗余。現有的剪枝技術大致可分為非結構化剪枝、半結構化剪枝和結構化剪枝。

非結構化剪枝

非結構化剪枝產生細粒度的稀疏性,其中零元素隨機分布在可訓練參數中[35, 38, 70, 71, 117, 146, 234, 242, 259, 294, 333]。這些非結構化剪枝方法表明,大語言模型可以在單次剪枝中至少達到50%的稀疏度,且(不)經過重新訓練,精度損失最小。同時,較大的大語言模型在非結構化剪枝方式下更具可壓縮性。盡管非結構化剪枝在理論上可以帶來推理加速,但由于稀疏操作中的連續性問題,這種加速在實際中并不容易體現。加速具有高細粒度稀疏性的深度神經網絡通常需要專門設計的軟件和硬件支持。存在一些計算庫,如FSCNN[119],在足夠高的非結構化稀疏度下,其性能優于標準的深度神經網絡運行時,但在很大程度上尚未擴展到Transformer架構。
?半結構化剪枝:為了緩解非結構化剪枝的問題,最近提出了半結構化剪枝,其中以N:M稀疏性為示例[339]。N:M稀疏性介于非結構化剪枝和結構化剪枝之間,即每M個連續元素中恰好包含N個非零元素。英偉達[51]推出了安培張量核心GPU架構(例如A100 GPU),并提出了2:4細粒度結構化稀疏性方案,使得稀疏神經網絡在推理時能夠在該硬件上加速。該方案對允許的稀疏模式施加了約束:對于每四個連續的權重數組,修剪其中兩個,得到一個50%稀疏的網絡。權重矩陣的這種規則結構使得可以有效地壓縮它,并通過僅對非零權重進行操作來減少內存存儲和帶寬需求。重要的是,英偉達目前僅考慮2:4的比例,其他比例尚未實現加速。

結構化剪枝

結構化剪枝會移除整個神經元、通道或其他有意義的結構,從而保留剩余深度神經網絡的功能,使其便于高效計算[37, 41]。先前的結構化剪枝方法需要手動干預來確定移除的結構,這很不方便。最近的工作,如OTO[37, 39, 40]和torch - pruning[77],提出了依賴圖分析來自動找出可以移除的結構。然而,它們在大語言模型上的應用面臨重大挑戰,這是由于大規模計算資源的需求以及預訓練和指令微調數據集的訓練數據不可用[23]。因此,大語言模型上的結構化剪枝范式在很大程度上可分為有限資源或全資源下的剪枝。對于有限資源設置,LLM - Pruner[181]提供了模塊化的重要性得分計算器來對移除結構進行排序。重要性得分通常基于完整的梯度計算,對于完整模型來說,這可能是資源密集型的。隨后會進行一個使用有限指令微調數據的快速訓練后階段,以在一定程度上恢復丟失的知識。LoRAPrune[327]在剪枝階段使用低秩適配器(LoRA)[111]來減少資源需求,但與完整的大語言模型相比,仍然面臨顯著的性能下降。為了更有效地恢復和保留知識,最近在有限資源設置中提出了LoRAShear[36]。LoRAShear利用一種名為LoRA半空間投影梯度(LHSPG)的新型結構稀疏優化器進行漸進式結構化剪枝和知識轉移。與僅使用指令微調數據的先前工作不同,LoRAShear應用了多階段知識恢復機制,以有效縮小完整模型和壓縮模型之間的性能差距。對于全資源設置,Sheared - LLaMA[295]對原始大語言模型進行結構化剪枝,創建出性能優于同等規模從頭訓練的大語言模型的緊湊模型。然而,它需要大量的GPU算力和數據資源,這對于普通用戶來說可能不可行。與在結構上修剪中小規模深度神經網絡相對成熟的領域相比,大語言模型上的結構化剪枝仍處于早期階段,有待進一步探索。

?7.3 知識蒸餾

知識蒸餾的概念是利用來自更大、能力更強的“教師”模型的監督信號來訓練緊湊的“學生”模型。這種方法通常會使學生模型的性能超過類似規模但未經過這種指導訓練的模型[105]。知識蒸餾大致可分為基于響應的知識蒸餾、基于特征的知識蒸餾和基于關系的知識蒸餾[88]。基于響應的知識聚焦于教師模型的最終輸出層。其假設是學生模型將學習模仿教師模型的預測[14, 105]。訓練有素的教師模型還在其中間層捕獲數據的基于特征的知識,這對于深度神經網絡尤為重要[225, 318]。捕獲特征圖之間關系的知識也可用于訓練學生模型,這被稱為基于關系的知識蒸餾[314]。自然語言處理領域的早期研究主要集中在特定任務模型的蒸餾上[134]。后來,更多的研究轉向了對預訓練模型的蒸餾,這些預訓練模型隨后可以針對特定的下游任務進行微調[123, 173, 233]。最近,出現了針對大語言模型的蒸餾方法[11, 30, 46, 92, 110, 122, 159, 230, 282, 292, 325]。當前大語言模型知識蒸餾方法的一個主要關注點在于如何生成和利用具有挑戰性的(指令性)樣本[46, 122, 292],以便更有效地將知識從教師模型轉移到學生模型,這與第4節中的數據欠采樣方法有一些重疊。思維鏈提示通常用于蒸餾方法[110, 159]中來完成數據生成。然而,當前大語言模型的知識蒸餾方法缺乏標準化的目標函數,該函數通常是特定任務的,需要進行調整。此外,最近采用學生生成輸出來減輕訓練和推理之間差異的策略導致了計算成本的大幅增加。為了解決這些挑戰,最近引入了DistiLLM[138],它由兩個關鍵組件組成。(i)具有適度偏斜值的偏斜Kullback - Leibler(KL)散度損失,與其他替代方法(包括廣義Jensen - Shannon散度)相比,它提供了更穩定的梯度和更低的近似誤差。(ii)一種自適應離策略技術,旨在提高使用學生生成輸出的效率和有效性。

?7.4 量化

量化方法可以根據是否需要重新訓練進行劃分[86]。量化感知訓練(QAT)要求對模型進行重新訓練,調整其權重以在量化后恢復精度[16, 131, 247, 332]。相比之下,訓練后量化(PTQ)在不進行任何重新訓練的情況下實現量化[26, 164, 199, 312, 317]。雖然QAT通常能產生更高的精度,但由于重新訓練的成本過高,并且通常無法訪問原始訓練數據和處理基礎設施,因此對于大語言模型(LLMs)來說往往不切實際。因此,大多數關于大語言模型量化的研究都傾向于PTQ技術。

從另一個角度來看,量化方法大致可分為均勻量化和非均勻量化[86]。像SPQR[67]、GPTQ[79]以及其他一些工作[115, 131]中探索的均勻量化,是將權重范圍劃分為大小相等的區間。這種方法因其能夠通過允許以量化精度而不是全精度進行算術運算來加速計算而受到歡迎。此外,在大語言模型中經常觀察到權重分布不均勻的情況,此時均勻量化可能不是最優選擇。相比之下,非均勻量化為這些挑戰提供了解決方案。正如在SqueezeLLM[132]中所研究的,這種方法非均勻地分配量化區間,提供了更大的靈活性,并且在處理非均勻權重分布時可能具有更好的性能。

與結構化剪枝相比,量化需要特定的硬件來實現低比特精度的實際優勢,以降低內存成本和加速推理。對于大語言模型,由于缺乏訓練數據或計算資源,在高壓縮比下,結構化剪枝通常難以有效地恢復丟失的知識。然而,量化通常可以有效地保持大語言模型的性能。因此,目前量化在大語言模型壓縮中更受歡迎且更為成熟。這與中小模型規模的場景形成鮮明對比,在該場景中,結構化剪枝和量化通常(聯合)使用[37, 307]。

?7.5 低秩分解

深度神經網絡中的權重矩陣通常是低秩的,這表明模型權重存在冗余[231, 341, 347]。因此,一個自然的想法是將權重矩陣分解為兩個或更多較小的矩陣,以節省參數。在大語言模型中,權重矩陣存在于包括自注意力層和MLP層的線性層以及嵌入層中。已有研究對這些權重矩陣進行分解,以節省參數數量并加速推理。
?線性層分解:多線性注意力[182]使用塊項張量(BTT)分解[64]來分解多頭注意力。奇異值分解(SVD)[64]也常用,并且通常分兩個階段進行。第一階段進行分解,第二階段通過知識蒸餾對低秩權重進行微調[198]。此外,作為BTT和SVD的替代方法,Kronecker分解保留矩陣的秩,并且在壓縮BERT和GPT - 2時已顯示出改進[73, 262]。
?嵌入層分解:ALBERT[148]對嵌入層進行分解,嵌入層是模型參數的最大消耗者之一。由于Transformer的能力主要來自其上下文學習能力,因此令牌嵌入層中的參數效率不高。通過分解嵌入矩陣來減少這些參數在直觀上是合理的。自注意力分解嵌入(SAFE)[222]研究了在Transformer中通過在線性投影的基礎上添加一個小的自注意力層來共享權重的方法,以實現比其他方法更好的性能。LightFormer[180]更有效地利用了訓練良好的Transformer的參數知識,并通過對嵌入層的分解加速了模型的收斂。

?8 結論

總之,大語言模型(LLMs)的發展是通用人工智能領域的一個重要里程碑,為各個領域帶來了變革性的變化。然而,這些模型的快速擴展在計算需求和內存要求方面帶來了巨大挑戰,給學術研究和實際部署都設置了障礙。本綜述全面概述了旨在提高大語言模型效率的算法創新,涵蓋了截至2023年9月的大部分研究進展。與現有通常專注于訓練或模型壓縮等孤立方面的綜述不同,本綜述深入探討了對大語言模型整體算法開發至關重要的多個效率維度。它涵蓋了廣泛的與效率相關的主題,包括縮放定律、數據利用、架構設計以及訓練、微調與推理策略。這里呈現的見解和分析旨在為該領域的研究人員和從業者提供有價值的總結。通過奠定當前知識和方法的堅實基礎,本文為大語言模型效率這一關鍵研究領域的未來突破和持續創新奠定了基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72544.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Github上面上傳本地文件夾

前言 直接在GitHub網址上面上傳文件夾是不行的,需要一層一層創建然后上傳,而且文件的大小也有限制,使用Git進行上傳更加方便和實用 1.下載和安裝Git Git - Downloads 傻瓜式安裝即可 2.獲取密鑰對 打開自己的Github,創建SSH密鑰&…

kafka-web管理工具cmak

一. 背景: 日常運維工作中,采用cli的方式進行kafka集群的管理,還是比較繁瑣的(指令復雜?)。為方便管理,可以選擇一些開源的webui工具。 推薦使用cmak。 二. 關于cmak: cmak是 Yahoo 貢獻的一款強大的 Apac…

python之爬蟲入門實例

鏈家二手房數據抓取與Excel存儲 目錄 開發環境準備爬蟲流程分析核心代碼實現關鍵命令詳解進階優化方案注意事項與擴展 一、開發環境準備 1.1 必要組件安裝 # 安裝核心庫 pip install requests beautifulsoup4 openpyxl pandas# 各庫作用說明: - requests&#x…

Redis的CPU高達90%時如何處理

Redis的CPU高達90%時如何處理 1. 分析和優化2. 擴展和分片3. 緩存策略調整4. 資源提升5. 負載均衡6. 進程調整7. 代碼層面改進8. 其他 當Redis的CPU使用率高達90%時,說明Redis服務器可能處于過載狀態,這可能會導致響應時間變長甚至服務中斷。要處理這種…

Faster R-CNN 算法詳解

Faster R-CNN 是在 R-CNN 和 Fast R-CNN 的基礎上進一步優化的一種目標檢測算法。它通過引入 Region Proposal Network (RPN) 將區域建議和目標檢測整合到一個統一的框架中,大幅提高了檢測效率。以下是對 Faster R-CNN 算法的詳細解析: 1. 概述 Faster R-CNN 主要由三部分組…

數據結構:八大排序(冒泡,堆,插入,選擇,希爾,快排,歸并,計數)詳解

目錄 一.冒泡排序 二.堆排序 三.插入排序 四.選擇排序 五.希爾排序 六.快速排序 1.Lomuto版本(前后指針法) 2.Lomuto版本的非遞歸算法 3.hoare版本(左右指針法) 4.挖坑法找分界值: 七.歸并排序 八.計數排序…

【商城實戰(2)】商城架構設計:從底層邏輯到技術實現

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配&#xf…

Mac mini M4安裝nvm 和node

先要安裝Homebrew(如果尚未安裝)。在終端中輸入以下命令: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根據提示操作完成Homebrew的安裝。 安裝nvm。在終端中輸入以下命令&#xf…

FOC無感開環啟動算法

FOC無感開環啟動排除掉高頻注入這種直接識別當前轉子dq軸的位置直接閉環啟動,大部分的常規啟動方式就是三段式啟動,對齊-強拖-觀測器介入-觀測器誤差穩定后平滑過渡-閉環。 這里就只寫出I/F(V/F)啟動的角度輸出的代碼&#xff0c…

Android 自定義View 加 lifecycle 簡單使用

前言 本文是自定義view中最簡單的使用方法,分別進行 ‘onMeasure’、‘onDraw’、‘自定義樣式’、‘lifecycle’的簡單使用,了解自定義view的使用。 通過lifecycle來控制 動畫的狀態 一、onMeasure做了什么? 在onMeasure中獲取view 的寬和…

《挑戰你的控制力!開源小游戲“保持平衡”開發解析:用HTML+JS+CSS實現物理平衡挑戰》?

📌 大家好,我是智界工具庫,致力于分享好用實用且智能的軟件以及在JAVA語言開發中遇到的問題,如果本篇文章對你有所幫助請幫我點個小贊小收藏吧,謝謝喲!😘😘😘 博主聲…

淺淺初識AI、AI大模型、AGI

前記:這里只是簡單了解,后面有時間會專門來擴展和深入。 當前,人工智能(AI)及其細分領域(如AI算法工程師、自然語言處理NLP、通用人工智能AGI)的就業前景呈現高速增長態勢,市場需求…

服務器時間同步

方法一 [rootbogon hwh-ansible]# cat time-sync.sh #!/bin/bash # NTP 服務器信息 NTP_SERVER"192.168.42.12" PASSWORD"123456" # 多個 IP 地址 HOSTS("192.168.42.8" "192.168.42.9" "192.168.42.10" "192.168.42…

Android Studio安裝與配置詳解

Android Studio安裝與配置詳解 前言 作為一名Android開發者,Android Studio是我們日常開發中最重要的工具。本文將詳細介紹Android Studio的安裝配置過程,幫助你搭建一個高效的開發環境。 一、Android Studio下載與安裝 1.1 下載Android Studio 訪問…

在PyCharm開發環境中,如何建立hello.py文件?

李升偉 整理 一、分析 首先,用戶可能是剛接觸PyCharm或者Python的新手,所以需要從打開軟件開始講起。不過用戶可能已經安裝好了PyCharm,但也許需要確認是否已經正確安裝。不過問題重點在創建文件,可能不需要深入安裝步驟。 接下…

es6常見知識點

官方文檔:[https://es6.ruanyifeng.com/](https://es6.ruanyifeng.com/) 一、Class 1、Class Class只是一個語法糖,其功能用es5也能實現,但是比es5更符合類的期待 定義: constructor代表構造方法,而this指向new 生成的實例 定義類方法時,可以不使用function 注…

國內外優秀AI外呼產品推薦

在數字化轉型浪潮中,AI外呼系統憑借其高效率、低成本、精準交互的特點,成為企業客戶觸達與服務的核心工具。本文基于行業實踐與技術測評,推薦國內外表現突出的AI外呼產品,重點解析國內標桿企業云蝠智能,并對比其他代表…

【無標題】FrmImport

文章目錄 前言一、問題描述二、解決方案三、軟件開發(源碼)四、項目展示五、資源鏈接 前言 我能抽象出整個世界,但是我不能抽象你。 想讓你成為私有常量,這樣外部函數就無法訪問你。 又想讓你成為全局常量,這樣在我的…

給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配

給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配 FesianXu 20250304 at Wechat Search Team 前言 如果給定了計算預算 C C C,如何分配LLM的模型尺寸 N N N和訓練的數據量 D D D,才能使得模型的效果 L L L最好呢?筆者在此介紹一篇經典的文…

青訓營:簡易分布式爬蟲

一、項目介紹 該項目是一個簡易分布式爬蟲系統,以分布式思想為基礎,通過多節點協作的方式,將大規模的網頁抓取任務分解,從而高效、快速地獲取網絡數據 。 項目地址:https://github.com/yanchengsi/distributed_crawle…