開設此專題,目的一是梳理文獻,目的二是分享知識。因為筆者讀研期間的研究方向是單卡上的顯存優化,所以最初思考的專題名稱是“顯存突圍:深度學習模型訓練的 GPU 內存優化之旅”,英文縮寫是 “MLSys_GPU_Memory_Opt”。本文是該專題下的第一篇文章,梳理并分享與單卡上的顯存優化相關的中英綜述論文(截至 2025 年 3 月 15 日,一共 23 篇論文),具體內容為筆者的論文閱讀筆記。說明:
- 本文二級標題的內容格式為:[年份]_[會刊縮寫]_[會刊等級/版本]_[論文標題];
- 筆者不評價論文質量,每篇論文都有自己的側重,筆者只記錄與自己研究方向相關的內容;
- 論文文件在筆者的開源倉庫 zhulu506/MLSys_GPU_Memory_Opt 中,如有需要可自行下載;
- 英文論文使用 DeepSeek 進行了翻譯,如有翻譯不準確的地方還請讀者直接閱讀英文原文;
- 本文對綜述論文的分類可能并不完全準確,部分綜述論文的內容可能會有一定交叉。
文章目錄
- AI 內存墻問題
- 1) 2024_IEEE Micro_SCI三區_AI and Memory Wall
- CNN 和 Transformer 模型
- 1) 2020_AIR_SCI二區_A survey of the recent architectures of deep convolutional neural networks
- 2) 2021_arXiv:2106.04554_v2_A Survey of Transformers
- Scaling Laws 理論
- 1) 2020_arXiv:2001.08361_v1_Scaling Laws for Neural Language Models
- 2) 2022_NeurIPS_A會_Training Compute-Optimal Large Language Models
- 深度學習框架
- 1) 2023_電子元器件與信息技術_普刊_國內外深度學習框架分析與研究
- 2) 2023_調研世界_普刊_深度學習框架發展綜述
- MLSys 訓練優化
- 1) 2020_大數據_T2刊_深度學習中的內存管理問題研究綜述
- 2) 2023_中國科學:信息科學_T1刊_并行智能訓練技術:挑戰與發展
- 3) 2023_軟件學報_T1刊_面向深度學習訓練的內存交換機制綜述
- 4) 2024_計算機工程_T2刊_GPGPU和CUDA統一內存研究現狀綜述
- 5) 2024_arXiv:2407.20018_v1_Efficient Training of Large Language Models on Distributed Infrastructures: A Survey
- 6) 2024_arXiv:2401.15347_v1_A Comprehensive Survey of Compression Algorithms for Language Models
- 7) 2025_JCST_B刊/T1刊_AI Computing Systems for Large Language Models Training
- 8) 2025_軟件導刊_T3刊_深度學習訓練性能優化:原理、技術與工具
- MLSys 推理優化
- 1) 2024_中興通訊技術_T3刊_大語言模型算法演進綜述
- MLSys 訓推優化
- 1) 2023_IEEE ComST_SCI一區_Enabling Resource-Efficient AIoT System With Cross-Level Optimization: A Survey
- 2) 2024_arXiv:2312.03863_v4_Efficient Large Language Models: A Survey
- 3) 2024_arXiv:2303.18223_v15_A Survey of Large Language Models
- 4) 2024_OJ-CS_普刊_Training and Serving System of Foundation Models: A Comprehensive Survey
- 5) 2025_大數據_T2刊_大模型時代下的存儲系統挑戰與技術發展
- 6) 2025_計算機學報_T1刊_面向深度學習的數據存儲技術綜述
- 7) 2025_TCASI_C刊_A Survey: Collaborative Hardware and Software Design in the Era of Large Language Models
AI 內存墻問題
1) 2024_IEEE Micro_SCI三區_AI and Memory Wall
這篇論文最初是一篇博客,作者較早提出了 AI 內存墻這一概念,是顯存優化領域背景與挑戰方面引用量較高的一篇論文。
摘抄:
- 受 neural scaling law 的驅動,從業者們一直在以前所未有的規模擴展訓練最新模型所需的數據量、模型規模和計算能力。
- 大型語言模型(LLM)的規模在同一時間段內每兩年以 410 倍的速度增長,超過了單個芯片上可用的內存容量。人們可能會希望,通過將訓練/服務擴展到多個加速器上,利用分布式內存并行性來避免單個硬件有限的內存容量和帶寬。然而,將工作分布到多個進程中也面臨著內存墻問題:神經網絡(NN)加速器之間數據傳輸的通信瓶頸,這甚至比芯片內部的數據傳輸更慢且效率更低。
- 這也可以使從業者在單個芯片的內存上訓練大型模型,而不必使用分布式訓練,后者通常難以設置(在大型超大規模公司之外),并且對于非專業開發人員來說難以調試。
“neural scaling law” 引用自:Hoffmann J, Borgeaud S, Mensch A, et al. Training compute-optimal large language models[C]//Proceedings of the 36th International Conference on Neural Information Processing Systems. 2022: 30016-30030.
圖表:

圖2. (a) 多年來 SOTA 模型參數數量的演變,以及 AI 加速器內存容量的變化(綠點)。大型 Transformer 模型的參數數量每兩年以 410 倍的速度呈指數增長,而單個 GPU 內存每兩年僅以 2 倍的速度增長。

圖4. 訓練不同神經網絡模型所需的內存容量。這里,計算機視覺(CV)模型使用的優化器是 SGD 加動量(SGD+Momentum),自然語言處理(NLP)模型使用的優化器是 ADAM。基于可用的 GPU 內存容量,發現/設計新模型存在一個有趣的趨勢。每當 GPU 內存容量增加時,數據科學家們就會設計出更新的模型。因此,打破所謂的 GPU 內存墻可能會進一步推動新的創新。
圖4原版來自 Jain P, Jain A, Nrusimha A, et al. Checkmate: Breaking the memory wall with optimal tensor rematerialization[J]. Proceedings of Machine Learning and Systems, 2020, 2: 497-511.
CNN 和 Transformer 模型
1) 2020_AIR_SCI二區_A survey of the recent architectures of deep convolutional neural networks
這篇綜述是關于 CNN 的,作為筆者學位論文相關內容的參考。
摘抄:
- 深度卷積神經網絡(CNN)是一種特殊類型的神經網絡,它在與計算機視覺和圖像處理相關的多項競賽中展現了卓越的性能。CNN 的一些激動人心的應用領域包括圖像分類與分割、目標檢測、視頻處理、自然語言處理以及語音識別。深度 CNN 的強大學習能力主要歸功于其使用多個特征提取階段,能夠自動從數據中學習表示。
- 典型的 CNN 架構通常由交替的卷積層和池化層組成,最后是一個或多個全連接層。在某些情況下,全連接層會被全局平均池化層替代。除了不同的映射函數外,還引入了諸如批量歸一化和 Dropout 等不同的調節單元,以優化 CNN 的性能。
- 卷積層 Convolutional layer
- 池化層 Pooling layer
- 激活函數 Activation function
- 批量歸一化 Batch normalization
- Dropout
- 全連接層 Fully connected layer
圖表:

圖 3 展示了深度 CNN 的進化歷史,從 ConvNet 到當前架構的演變過程。
深度 CNN 架構的進化歷史在圖 3 中以圖示形式呈現。CNN 架構的改進可以分為以下五個不同的階段:
- CNN 的起源:20 世紀 80 年代末至 1999 年
- CNN 的停滯期:2000 年初
- CNN 的復興:2006 年至 2011 年
- CNN 的崛起:2012 年至 2014 年
- CNN 架構創新和應用的快速增長:2015 年至今

圖 4 展示了深度 CNN 架構的分類,分為七種不同的類別。
2) 2021_arXiv:2106.04554_v2_A Survey of Transformers
這篇綜述是關于 Transformer 的,作為筆者學位論文相關內容的參考。
摘抄:
- 原始的 Transformer 是一個序列到序列模型,由編碼器和解碼器組成,每個部分由 L L L 個相同的塊堆疊而成。每個編碼器塊主要由多頭自注意力模塊和位置前饋網絡(FFN)組成。為了構建更深的模型,每個模塊周圍采用了殘差連接,隨后是層歸一化模塊。與編碼器塊相比,解碼器塊在多頭自注意力模塊和位置前饋網絡之間額外插入了交叉注意力模塊。此外,解碼器中的自注意力模塊被調整為防止每個位置關注后續位置。
圖表:

最近的研究表明,在大規模語料庫上預訓練的 Transformer 模型可以學習到對下游任務有益的通用語言表示。……預訓練后,可以直接在下游數據集上微調模型,而無需從頭開始訓練。為了說明 Transformer 在預訓練中的典型使用方式,我們列舉了一些預訓練的 Transformer 模型并將其分類如下:
- 僅編碼器:
- 僅使用編碼器,并將編碼器的輸出作為輸入序列的表示,通常用于分類或序列標注問題。
- 一些工作使用 Transformer 編碼器作為其骨干架構。BERT 是一個典型的預訓練模型,通常用于自然語言理解任務。
- 僅解碼器:
- 僅使用解碼器,同時移除編碼器-解碼器交叉注意力模塊,通常用于序列生成(例如語言建模)。
- 一些研究專注于在語言建模上預訓練 Transformer 解碼器。例如,生成式預訓練 Transformer(GPT)系列(包括 GPT、GPT-2 和 GPT-3)致力于擴展預訓練的 Transformer 解碼器,并展示了大規模預訓練模型可以通過任務和示例作為提示實現令人印象深刻的少樣本性能。
- 編碼器-解碼器:
- 使用完整的 Transformer 架構,通常用于序列到序列建模(例如神經機器翻譯)。
- 也有一些預訓練模型 (BART、T5) 采用 Transformer 編碼器-解碼器作為整體架構。使用編碼器-解碼器架構的好處是模型具備執行自然語言理解和生成的能力。
Transformer 最初是為機器翻譯設計的,但由于其靈活的架構,已廣泛應用于 NLP 以外的領域,包括 CV 和音頻處理。
- 自然語言處理:Transformer 及其變體在 NLP 任務中得到了廣泛探索和應用,例如機器翻譯、語言建模和命名實體識別。
- 計算機視覺:Transformer 也被用于各種視覺任務,例如圖像分類、目標檢測、圖像生成和視頻處理。
- 音頻應用:Transformer 可以擴展到音頻相關應用,例如語音識別、語音合成、語音增強和音樂生成。
- 多模態應用:由于其靈活的架構,Transformer 也被應用于各種多模態場景,例如視覺問答、視覺常識推理、字幕生成、語音到文本翻譯和文本到圖像生成。
Scaling Laws 理論
1) 2020_arXiv:2001.08361_v1_Scaling Laws for Neural Language Models
這篇綜述提出了 Scaling Laws 理論,作為筆者學位論文相關內容的參考。
摘抄:
- 性能主要取決于規模,而對模型結構的依賴較弱:模型性能最強烈地取決于規模,規模由三個因素組成:模型參數數量 N N N(不包括嵌入層)、數據集大小 D D D 以及訓練使用的計算量 C C C。在合理的范圍內,性能對其他架構超參數(如深度與寬度)的依賴非常弱。
- 我們的結果強烈表明,更大的模型將繼續表現更好,并且其樣本效率也將比之前認為的更高。大模型可能比大數據更為重要。
2) 2022_NeurIPS_A會_Training Compute-Optimal Large Language Models
這篇綜述豐富了 Scaling Laws 理論,提出了與上篇綜述不同的觀點,作為筆者學位論文相關內容的參考。
作者在文中對綜述 1) 的討論:
Kaplan 等人展示了自回歸語言模型(LM)的參數數量與其性能(以評估困惑度衡量)之間存在冪律關系。其中一個顯著的結論是,大型模型不應訓練到最低可能的損失以達到計算最優;他們認為,在計算預算增加的情況下,模型規模的增長速度應快于訓練集的規模。因此,該領域一直在訓練越來越大的模型,同時將訓練集規模保持在約 3000 億個 token,以期獲得性能提升。雖然我們發現模型規模和訓練集規模之間確實存在權衡,但我們估計大型模型應訓練的 token 數量應遠多于之前的建議。具體而言,在計算預算增加 10 倍的情況下,我們發現模型規模和訓練 token 數量應按相同比例擴展。
摘抄:
- 近年來,各種大型語言模型被提出。……訓練越來越大的模型的趨勢顯而易見——迄今為止,語言模型規模的增加是推動許多語言建模任務最新技術水平提升的主要原因。然而,大型語言模型面臨若干挑戰,包括其巨大的計算需求(訓練和推理成本隨模型規模增加)以及獲取更多高質量訓練數據的需求。事實上,在這項工作中,我們發現更大規模的高質量數據集將在語言模型的進一步擴展中發揮關鍵作用。
- 盡管最近有許多工作使得訓練越來越大的模型成為可能,但我們的分析表明,需要更加關注數據集的擴展。推測而言,我們預計只有當數據是高質量時,擴展到越來越大的數據集才是有益的。這要求以高質量為重點,負責任地收集更大的數據集。
深度學習框架
1) 2023_電子元器件與信息技術_普刊_國內外深度學習框架分析與研究
有助于了解深度學習框架的發展。
摘抄:
-
深度學習框架被稱作第四次技術革命的操作系統,不僅支撐著深度學習技術研發,還對相關的智能化領域的芯片設計有至關重要的影響。智能行業廣泛認為深度學習框架和AI芯片是第四次技術革命中最重要的兩項“基礎設施”。
-
隨著 TensorFlow 在全球范圍內用戶數量的劇增,其框架自身的缺點也逐漸暴露出來。
- 首先,對于初學者搭建模型是十分困難的。研究人員需要認真考慮模型的架構,正確地計算好輸入和輸出的數據的維度和數量才能著手搭建;
- 其次,框架過于復雜的系統設計和頻繁變動的接口設計也極大地降低了用戶體驗;
- 最后,框架是基于靜態圖處理編譯,用戶需要先定義圖形,再進行計算,雖然效率較高,但調試難度增大。
-
國內外主流深度學習框架的發展:
- 2002年,Torch,瑞士戴爾莫爾感知人工智能研究所,第一個機器學習庫。
- 2007年,Theano,加拿大蒙特利爾大學 MILA 小組,第一個深度學習框架。
- 2013年9月,Caffe,加州大學伯克利分校在讀博士賈揚清,12月正式開源。
- 2015年11月,TensorFlow,Google,正式開源,一款真正由工業界推出的深度學習框架。
- 2016年1月,MXNet,李沐、陳天奇等學生,測試版正式開源。
- 2016年1月,CNTK,微軟黃學東博士團隊,正式開源。
- 2016年8月,飛槳(PaddlePaddle),百度,國內首個開源深度學習框架。
- 2016年11月,Caffe2,Facebook 賈揚清,2017年4月正式開源,工業級深度學習框架。
- 2017年2月,TensorFlow 1.0,Google。
- 2018年12月,PyTorch 1.0,Facebook 在 NeurIPS 大會上正式發布,專注于模型的研究和設計。
- 2019年9月,TensorFlow 2.0,Google,默認采用動態圖處理方式。
- 2020年3月,MindSpore,華為,正式開源。
- 2020年3月,天元(MegEngine),曠世科技,正式開源。
- 2020年7月,Oneflow,一流科技,正式開源。
- 2020年4月,計圖(Jittor),清華大學計算機系胡事民教授團隊,正式開源。
- 2021年3月,飛槳2.0,百度,全面支持動態圖編譯,編程方式默認為動態圖。
2) 2023_調研世界_普刊_深度學習框架發展綜述
有助于了解深度學習框架的發展。
摘抄:
- 隨著深度學習理論與應用的快速發展,對于編程框架和平臺的需求也日漸增強。在沒有框架的情況下,開發者和使用者需要編寫大量代碼來完成復雜的計算操作,具有很高的學習成本和門檻。而框架通過將底層算法進行模塊化封裝極大提高了代碼編寫的效率并降低了使用門檻,推動了深度學習模型的發展和應用部署。深度學習框架已經成為了深度學習領域的“操作系統”。隨著我國經濟進入高質量發展階段,深度學習框架作為人工智能的基礎設施,也成為了新基建的核心之一。
- TensorFlow 在工業界占有主流地位。……其靜態圖的特性使模型的運行部署效率更高,更受工業應用歡迎。……雖然 TensorFlow 框架是當前使用最廣泛的深度學習框架,但也存在許多問題:……。第四,調試困難。由于 TensorFlow 采用了先定義再運行的靜態圖模式,故在調試上存在一定困難。為了解決這一缺點,TensorFlow 后續又推出了 Eager 模式,無需先構造計算圖,可以直接對結果進行評估。
- PyTorch 框架具有許多優點:第一,PyTorch 使用了動態圖框架。動態圖框架中計算圖在運行過程中構建,因此動態圖框架更易調試,具有更高的靈活性。……PyTorch 也存在一些不足,例如,動態圖模式雖然更易調試,但在運行效率上低于靜態圖。
圖表:

MLSys 訓練優化
1) 2020_大數據_T2刊_深度學習中的內存管理問題研究綜述
這篇綜述算是比較早對 GPU 內存優化進行總結的,分析了大規模深度學習發展面臨的內存管理挑戰,介紹了 DNN 的結構及訓練過程,關注了內存交換、重計算、內存復用和模型壓縮技術。雖然部分內容較老,但文中的很多表述還是值得引用和學習的。
摘抄:
- 近年來,深度學習已經在多個領域取得了巨大的成功。深度神經網絡向著更深更廣的方向發展,訓練和部署深度神經網絡模型都將面對巨大的內存壓力。加速設備有限的內存空間已經成為限制神經網絡模型快速發展的重要因素,如何在深度學習中實現高效的內存管理成為深度學習發展的關鍵問題。
- 深度和寬度是構建深度神經網絡最重要和有效的兩個因素。神經網絡的深度越深、功能層越多,越能有效地降低超參數選擇的復雜性,提高模型的魯棒性。與深度相比,寬度是構建網絡的另一個重要因素,它通過不同大小的卷積積累了更多的特征圖。
- 深度學習應用是一種計算密集型和內存密集型的任務。……各種專用加速設備為深度神經網絡的發展提供了強大的算力支撐。設計更深層次的深度神經網絡可以達到更高的精度,但是這也給各種加速設備帶來了極大的挑戰。……這一限制阻礙了深度學習研究者去探索更先進的模型架構。
- 神經網絡需要經過訓練才能用于推理或分類任務。訓練通過執行正向傳播算法和反向傳播算法,學習和更新神經網絡各層的權值。……正向傳播的計算是一個序列化的過程,……
- 機器學習框架極大地簡化了神經網絡的實現過程,成為幫助研究者開展研究的利器。但是這些機器學習框架在內存管理方面受到嚴重的限制。
- 現有的機器學習框架在訓練 DNN 時,DNN 所有層所需的內存空間必須能夠被放在加速設備的內存中。……內存分配策略沒有考慮到 DNN 分層訓練的特點,這對內存資源造成了極大的浪費。
- 神經網絡的輸入通常成批地訓練數據,這有助于網絡模型更好地收斂到最優解,但也將顯著增加內存占用。
- 隨著 DNN 的網絡結構向著更深、更廣的方向發展,訓練 DNN 時所需的內存空間越來越大,單個加速設備的內存已經不能滿足訓練的需求。……模型并行可以顯著地緩解單個加速設備的內存壓力。然而,由于多 GPU 之間需要頻繁地通信來更新模型參數,導致它的性能較差。因此,需要通過內存管理解決現有內存分配策略帶來的內存浪費問題,使得深度學習系統能夠充分利用加速設備的算力和有限的內存資源,保證大規模神經網絡在單個加速設備中能夠快速訓練。
- 在訓練過程中,加速設備的內存主要被 3 個部分消耗:存儲正向傳播中產生的特征映射、存儲反向傳播中的梯度映射以及卷積算法需要的額外內存空間。……在這 3 個部分中,后兩個部分是臨時內存,可以在當前計算完成后立即釋放。正向傳播和反向傳播的計算都需要特征映射,只有在反向傳播計算完成后,對應層的特征映射占用的內存空間才能夠被釋放。……特征映射在正向傳播和反向傳播中參與的兩次計算之間存在很大的時間間隔,這也為內存管理帶來很多可能。
- 降低單個設備訓練神經網絡時的內存消耗:
- 內存交換技術是指在加速設備內存和主存之間交換數據,通過在不使用變量時將其從加速設備的內存交換到主存的方式來降低加速設備的內存消耗,并在下一次訪問變量之前將其交換回加速設備內存。加速設備的內存容量相對于主存來說要小很多。……內存交換能夠交換幾乎所有的設備內存數據,因此其能夠大幅度地降低設備內存的占用率。在理想情況下,數據在主存和設備內存之間的通信可以隱藏在計算之下,從而最小化數據傳輸開銷。……通過對神經網絡訓練過程中一些特征的觀察,許多工作(vDNN、moDNN、Layrub、SuperNeurons、Capuchin)采用內存交換的方式進行訓練時的內存管理,使得有限的 GPU 內存能夠充分發揮作用,滿足更深、更廣的神經網絡模型的訓練需要。但是如何降低內存交換產生的性能損失還激勵著研究者們不斷探索新的內存交換策略,最終實現在保證訓練性能的同時大幅降低設備內存占用的目的。
- 重計算技術的思想是將特征映射這樣的中間結果在正向傳播過程中及時地釋放,在反向傳播的計算需要用到特征映射時,再通過重新計算的方式生成,進而參與到當前計算中。這是一種利用計算來換 取內存空間的思想。……任何重計算方法(Sublinear、SuperNeurons、Capuchin、Checkmate)的有效性都取決于其定義的規則:緩存哪些變量以及如何重計算其他變量。目前的研究者圍繞這一問題不斷提出新的方法,以期望用最小的性能開銷換取最大的內存空間。
- 內存復用是指在生命周期不重疊的變量之間共享同一塊內存。(Sublinear、Layrub、SuperNeurons)
- 在深度學習的訓練階段,通過壓縮算法對變量進行壓縮,能夠有效降低變量占據的內存空間,減少加速設備內存的占用。……模型剪枝、參數量化等方法會造成模型訓練精度的損失,在保持較高精度的同時減小模型占用的內存空間一直以來都是研究的熱點。
- 深度神經網絡正朝著更深、更廣的方向發展,訓練和部署這些深度神經網絡需要更大的內存空間,這對深度學習系統中的內存管理提出了新的挑戰。如何在深度學習系統中進行高效的內存管理,從而滿足更深、更廣層次的神經網絡模型的訓練需求,是當前深度學習系統研究的重要問題。
- 大多數工作通過觀察、分析 DNN 模型訓練過程中的一些特征,從數據流圖、層以及張量等不同的維度,應用上述的一種或多種技術方案,充分發揮各技術的優勢,實現有效的內存管理。
- 內存交換技術中交換單元的大小對系統的性能有較大的影響,先前的解決方案以頁面為內存交換的基本單位,但是性能較差,現在最好的解決方案是以張量為內存交換的基本單位,在虛擬內存中能夠以一個更合適的粒度對內存進行管理,從而實現更好的性能。但是以張量為粒度的方案并不一定是最優的,后續的研究也需要探索更多可能的方案。此外,內存管理策略也十分重要,內存管理策略決定了優化內存占用的效果。目前的研究都朝著這個方向努力,但是還沒有很好的內存管理策略能夠實現內存占用和計算性能的完美平衡。
2) 2023_中國科學:信息科學_T1刊_并行智能訓練技術:挑戰與發展
這篇論文是 NUDT PDL 發的,作者關注的是分布式訓練中的優化技術。我們重點學習內存交換和重計算相關的內容。
摘抄:
- 海量數據的獲得以及智能算力的提升推動人工智能迎來第三次發展浪潮。
- 伴隨人工智能技術的快速發展, 智能模型參數和訓練數據的規模呈爆炸式增長。
- 人工智能飛速發展離不開大模型、大數據、大算力的 “暴力美學”。
- 智能模型訓練過程主要包括神經網絡的前向和反向計算,其中涉及大量高維矩陣運算,通用 CPU 難以應對這類計算密集型任務,而 GPU,FPGA 等加速芯片并行計算的特性使其被廣泛用于深度學習模型訓練任務。因此,目前并行智能訓練系統通常是異構的,包含了 CPU 和專用硬件加速芯片。這種異構計算系統由 CPU 訪問主存或 I/O 設備讀取數據,將數據傳輸給硬件加速器進行模型訓練。
- 隨著異構加速設備的性能持續增長,智能模型訓練的通信頻率不斷提高,同時智能模型參數量的增加也直接加大了參數通信的數據規模。上述兩方面的因素導致了參數通信開銷在系統中占比增加,參數通信開銷成為了制約大規模并行智能訓練效率提升的性能瓶頸。……智能模型訓練中密集的參數通信嚴重影響了并行智能訓練系統的吞吐率和可擴展性。
- 按照數據劃分和模型劃分兩個計算任務劃分維度,并行智能訓練包括數據并行和模型并行兩種基礎并行訓練模式,以及混合多種并行模式的混合并行模式。根據智能模型特點,模型并行又演化出流水線并行、張量并行、專家并行等多種計算模式。
- 內存溢出(out of memory, OOM)是大型模型訓練中經常出現的錯誤。智能訓練系統中設備高速內存的總量,成為制約智能訓練系統對大型模型支撐能力的主要因素。
- 在多計算設備參與的多進程并行智能訓練中,內存優化技術有了新的空間。在數據并行訓練中,零冗余優化器(ZeRO)內存優化技術將模型的優化器狀態、梯度和參數劃分至各個工作設備上,從而消除冗余的存儲開銷。ZeRO-Offload 在 ZeRO 的基礎上,將在 GPU 上保存的優化器狀態和梯度的切分卸載至內存,并且在整個訓練階段將優化器狀態維持在內存中。ZeRO-Infinity 則進一步將 NVMe 存儲加入到數據并行訓練系統之中,使模型參數可擴展到更大規模。
- 人工智能技術發展對于國家經濟和國防建設都具有重要意義。并行智能訓練技術和框架軟件,向下依托高性能智能訓練硬件系統,向上支撐人工智能算法開發和運行,是人工智能技術持續發展的關鍵,是智能訓練軟件生態建設的核心。隨著人工智能算法的快速演進,作為底層系統支撐技術,并行智能訓練將面臨更多嚴峻挑戰,具有重要的研究價值和廣泛的應用前景。
圖表:

基于 Transformer 的預訓練模型參數量已超過十億 (billion) 數量級,而且模型規模的增長速度非常快,如圖2所示,近年發布的預訓練模型參數量增長了超過 1000 倍。
如圖2所示,與大規模模型的參數量增長速度相比,常用智能計算加速器的內存容量增長較為緩慢。因此,如何在保證訓練效率的同時高效地利用內存空間,成為大規模智能模型訓練的一大挑戰。

顯存交換(swap)是一種利用 CPU 內存來保存中間計算結果以節省 GPU 內存空間的方法,如圖5(a)所示,其主要思想是在前向傳播中將計算得到的激活值從 GPU 內存卸載到 CPU 內存中,在反向傳播的時候再將所需要的激活值加載到 GPU 內存中。得益于 GPU 計算任務與傳輸任務的可并行性,swap 方法有不會占用 GPU 額外的計算資源的優點,但受限于 PCIe 鏈路的帶寬,卸載與加載的時間開銷往往較大。(vDNN、moDNN、SwapAdvisor)
重計算(recomputation)是一種以時間換空間的優化方法,如圖5(b)所示,其主要思想是利用前向傳播計算的中間結果(即模型激活值)在反向傳播時才會被使用這一特點,在前向過程中將部分激活值直接丟棄,在反向傳播需要時再重新進行前向傳播的計算以獲得所需的激活值。重計算的優點是能夠立刻釋放大量內存,但是其缺點同樣也很突出,因為其在進行反向傳播時需要再進行一次前向計算,這將產生額外的計算開銷。(Sublinear、Checkmate、DTR)

深度學習框架為智能計算模型的構建、訓練、評估等開發流程提供了基礎的編程接口和運行環境。圖6展示了深度學習框架隨著深度學習的發展從工具包時代到數據流時代再到大規模并行訓練時代的發展歷程。
智能訓練框架為智能模型的開發提供編程接口和運行環境,對于深度學習發展具有重要的推動作用。然而,隨著訓練數據和模型參數規模的增長,智能訓練需要的計算設備規模越來越大,并行智能訓練方式也越來越復雜,傳統的 TensorFlow、PyTorch 等基礎深度學習框架已經不能滿足大規模智能模型的開發和訓練需求。因此,數據并行訓練框架和混合并行訓練框架先后被提出,通過對并行智能訓練方法進行封裝,抽象出簡單易用的用戶接口,降低并行智能訓練的編程難度,進一步推動深度學習技術的發展。
3) 2023_軟件學報_T1刊_面向深度學習訓練的內存交換機制綜述
這篇論文專注于分析內存交換,文中的理論分析部分很不錯,而且從多個角度對不同的內存交換工作進行了比較,寫得比較有深度,部分內容也有一些抽象。
摘抄:
- 內存交換機制是近年來應對內存管理挑戰的一種重要技術,其核心思想是利用深度學習訓練內存需求的“時變”特征,通過在某一時間點將內存數據從專用計算加速設備內存中動態移出,并在數據被訪問時從外部存儲將其重新移回專用計算加速設備內存,以瞬時內存需求替代累積內存需求,達到深度學習訓練累積內存可以超出單個專用計算加速設備的內存容量的效果,保障深度學習訓練在此設備上的可用性與性能。
- 可用性目標:降低深度學習訓練的瞬時內存需求。內存交換機制通過選擇算子數據換出內存,保障深度學習瞬時內存需求低于專用計算加速設備的內存容量,不因內存不足而崩潰。
- 性能目標:減少深度學習訓練阻塞。內存交換機制通過為每一算子確定交換內存數據的時刻,減少深度學習訓練因內存交換產生的阻塞,保障深度學習訓練性能。
- 為了實現可用性與性能目標,內存交換機制需要選擇內存不足時換出的算子數據,確定其換入內存的時刻,最終產生可行的內存交換方案。在這一過程中,內存交換機制具體面臨如下 3 方面的挑戰。
- 如何確定從內存換出的算子數據。👉 內存交換機制需要結合算子運行特征構建換出機制,確定從內存換出的算子數據,滿足可用性目標。
- 如何確定算子數據換入到內存的時刻。👉 內存交換機制需要結合數據依賴關系,構建換入機制,確定將算子數據換入到內存的時刻,滿足性能目標。
- 如何避免算子換出與換入沖突。👉 內存交換機制需要結合考慮深度學習訓練運行狀況和內存交換優化策略等運行階段因素,進行效用驅動的聯合決策,避免算子換出與換入決策沖突,以最終滿足可用性與性能目標。
- 內存交換機制可以應用于大規模深度學習訓練之中,以降低分布式深度學習訓練對于專用計算設備數量的要求。……使用深度學習框架運行的深度學習訓練可以利用內存交換機制,降低大規模深度學習訓練對于內存的瞬時需求,保障深度學習訓練的運行。
內存換出機制:
- 先出后入換出機制
- 即時換出:深度學習框架在前向傳播某一算子數據不再被使用時,換出其內存數據。(Capuchin、FlashNeuron、HALO)
- 按需換出:深度學習框架在內存不足時,通過內存換出機制釋放內存空間。
- (moDNN、SuperNeurons)使用 LRU 算法換出最近最少使用的算子數據,而最近最少使用的算子通常是最先進行前向傳播的算子。
- (Layrub、Dymem)使用引用計數描述運行階段的依賴狀況,在前向傳播算子先出后入之上,當算子的引用計數減為 0 時移出其數據,避免換出即將被訪問的內存數據。
- 大算子優先換出機制
- 觀察總結的內存占用狀況:(vDNN、SuperNeurons、Layrub、HALO)在這一機制下,深度學習框架在選擇換出的算子數據時,僅考慮算子數據的類別,而不考慮算子數據的實際數據量。
- 動態獲取的內存占用狀況:(Capuchin、FlashNeuron)算子因處于模型的不同位置,其數據量可能存在較大的差異,深度學習框架可以結合觀察總結的算子內存占用差異,限制動態選擇換出算子的范圍,在卷積等算子中選擇占用更多內存空間的算子,降低動態選擇的開銷。
- 周期性換出機制:深度學習框架基于算子迭代間的穩定性特征,在每次迭代中收集運行狀況信息,周期性換出內存數據。
- 試運行:(vDNN、FlashNeuron)
- 構建預測模型
- 運行一次迭代:(Capuchin)
- 將換出決策寫入算子計算圖:(LMS)
獲取運行時間信息(根據深度學習訓練配置的穩定性進行區分):
- 面向穩定深度學習訓練配置的監測方法:深度學習框架在深度學習參數與計算資源配置不變時,通過監測訓練階段若干迭代的運行,獲取在整個深度學習訓練階段中持續有效的算子運行時間信息。……內存使用的監測僅在深度學習訓練開始的若干個迭代運行,因此具有較低的開銷。但隨著深度學習訓練向云端的遷移,深度學習訓練可能運行于訓練集群中,由深度學習調度框架動態分配與調整訓練資源。深度學習框架可能需要在大量參數、資源配置上進行試運行,并在運行時采取其他優化方案優化深度學習的內存占用,在這些情況下,深度學習訓練的運行時間與內存需求均可能發生改變,頻繁監測將產生較大的開銷。
- 面向動態深度學習訓練配置的預測方法:深度學習框架面向深度學習訓練參數配置(批尺寸、算子實現等配置)與資源配置(GPU、內存等配置)動態變化導致的算子運行時間動態變化,通過構建分析模型,直接評估新配置下的算子運行時間,以降低頻繁監測產生的開銷。
- 基于比例的預測方法:基于比例的預測方法根據算子運行時間與運行性能與某一配置指標的線性關系,預測其他配置下的算子運行時間。
- 基于計算設備模型的預測方法:基于計算設備模型的預測方法模擬專用計算設備,預測算子的運行時間。
- 基于機器學習的預測方法:基于機器學習的預測方法通過采集算子在特定參數與資源配置下的運行時間,訓練機器學習模型,預測算子在其他配置的運行時間。
內存換入機制:
- 反饋機制在深度學習訓練需要訪問某一內存數據時,觸發數據從外部存儲的換入。NVIDIA、AMD 等主流專用計算設備廠商通過統一內存技術對此提供支持,計算設備與 CPU 內存處于同一內存地址空間,當某一換出的內存數據被訪問時,專用計算設備將產生缺頁中斷,由硬件將內存數據從 CPU 內存換入專用計算設備內存。反饋的缺陷在于缺少結合數據依賴關系的數據預取機制。
- 前饋機制在換出的數據被訪問之前,將數據從外部存儲預取回內存。
- 基于數據依賴關系的前饋機制:在計算某一算子之前,觸發其數據換入,實現訓練運行與內存交換的交疊。僅結合數據依賴關系的前饋機制可能導致數據過早或過晚換入。
- 基于數據訪問時間的前饋機制:通過對齊算子運行時間與內存交換時間,實現在深度學習訓練訪問數據的同一時刻完成數據換入,可以消除訓練的阻塞時間,最大化保障深度學習訓練性能。基于數據訪問時間的前饋需要考慮算子的計算時間與傳輸時間。……但這一機制要求深度學習框架精確獲取各算子的運行時間與算子數據交換時間,具有較高的實現難度。
換出與換入的聯合決策:
- 動態決策方法:基于一定規則,在訓練運行階段即時選擇內存數據進行交換。這一決策方法體現為候選交換數據的過濾。……動態決策不一定形成最優交換決策,但具有較低的決策開銷,支持訓練運行階段的實時決策。
- 靜態決策方法:在深度學習訓練前,形成整個深度學習訓練階段的內存交換計劃。深度學習框架通過在若干輪迭代中嘗試各種內存交換方案,并確定具有最優性能的內存交換方案。由于算子在迭代間的穩定性運行特征,深度學習框架可周期性地運用決策的內存交換方案。……靜態決策可以形成更為優化的交換決策。其缺陷為存在一定的試運行或求解開銷。
- 試運行方法通過使用若干參數與資源配置試運行深度學習訓練,記錄其運行時間與內存瞬時需求,最終確定效果最優的內存交換方案。
- 整數線性規劃決策方法將深度學習訓練性能作為目標函數,將交換約束與交換目標作為約束函數,規劃形成交換決策。
展望:
- 換出:進一步探索內存使用特征及其與換出機制結合的方法,將可能進一步降低深度學習訓練瞬時內存需求,滿足內存交換的可用性與性能目標。
- 換入:隨著深度學習框架開始運用多種運行優化機制,深度學習訓練的內存需求動態變化,深度學習框架可以進一步探索基于預測的算子運行時間獲取方法,準確高效地實現基于數據訪問時間的前饋內存換入機制,結合多種內存換入機制互為補充,在內存利用效率、訓練信息獲取開銷與訓練性能間進行均衡,滿足深度學習訓練的可用性與運行性能目標。
- 聯合決策:深度學習框架需要進一步結合訓練運行狀況,考慮特定計算資源下特定深度學習訓練任務對內存交換的影響,并利用計算資源、傳輸資源與存儲資源上交換數據與交換路徑優化策略,探索降低內存交換開銷的機遇,根據深度學習訓練因素與內存交換策略因素之間的相互影響,進一步優化內存換出與換入的聯合決策,保障深度學習訓練的可用性與性能。
圖表:

本文提出如圖1所示的研究框架。為了兼顧可用性與性能目標,保障深度學習訓練的運行,內存交換機制需要有效結合內存需求時變特征,解決換出機制、換入機制與聯合決策中所面臨的一系列挑戰。
- 基于算子運行特征的內存換出機制解決算子數據的換出選擇挑戰。內存換出機制在內存換出階段結合體現為算子運行特征的時變特征,選擇算子數據換出內存,以滿足可用性目標。
- 基于數據依賴關系的內存換入機制解決算子數據的換入時刻挑戰。內存換入機制需要在內存換入階段結合體現為換出數據間的依賴關系的時變特征,確定數據訪問時刻,通過反饋或前饋方式及時將算子數據從外部存儲換入內存,以滿足性能目標。
- 效用驅動的內存交換聯合決策解決算子數據交換的聯合決策挑戰。內存交換機制結合換出與換入機制,考慮體現時變特征的深度學習訓練因素與影響時變特征的內存交換策略因素,通過訓練效能驅動的聯合交換決策,兼顧可用性與性能目標,保障深度學習訓練的運行。

算子運行特征1:內存先入后出特征。深度學習訓練中最先計算的算子的數據最先進入內存,最后從內存中釋放,具有最長的內存占用時間。圖2(a)展示了算子數據在前向傳播與反向傳播中的復用。在 O p 2 Op2 Op2的前向傳播中, X X X、 Y Y Y分別為算子的輸入與輸出數據, W W W為算子權重數據,其中, Y Y Y由 X X X與 W W W通過算子的前向傳播操作 o p op op計算產生;在 O p 2 Op2 Op2反向傳播 ( O p 2 ′ ) (Op2') (Op2′)中, d X dX dX與 d Y dY dY分別為算子反向傳播中的梯度數據,其中, d X dX dX由 X X X、 Y Y Y與 d Y dY dY通過算子的反向傳播操作 d o p dop dop計算產生。可以發現,算子在深度學習訓練前向傳播中的輸出數據在由下一算子使用之外,還需要在反向傳播中復用,需要保留在內存之中。圖2(b)展示了這一訓練機制對于內存占用時間的影響。前向傳播與反向傳播按相反順序進行,因此,最先前向傳播的算子最后進行反向傳播,最先被分配,而最后被釋放內存空間,因此,深度學習框架可以將這些算子的內存數據換出內存,釋放內存空間,降低深度學習訓練的瞬時內存需求。

算子運行特征2:算子內存占用差異特征。由于在深度學習模型中位于不同位置,實現不同功能,算子之間存在較大的內存占用差異。表1展示了使用華為 MindSpore 深度學習框架訓練 VGG-16 模型時部分算子權重、輸出與工作區域的內存占用。不同類別的算子具有顯著的內存占用差異,卷積算子與用于實現全連接層的矩陣乘法算子相比,占用了更多的內存空間。而且隨著對于輸入數據特征提取的不斷深入,卷積算子的內存占用逐漸減少。

算子運行特征3:迭代間穩定性特征。圖3展示了 MindSpore 框架中部分算子在迭代間的運行狀況。可以發現每次迭代中,算子在前向傳播與反向傳播階段具有穩定的運行時間與內存需求。其原因在于每次迭代中只有輸入數據內容發生變化,而影響輸入數據規模的批處理尺寸、影響計算開銷的內部實現等參數配置沒有發生變化。深度學習框架對這一特征的利用分為兩方面。當深度學習訓練的參數與資源配置不變時,深度學習框架使用這一特征通過獲取一次迭代中的算子運行狀況,用于后續數十萬次迭代中內存交換的決策。而訓練參數與資源配置改變時,深度學習框架可以快速評估算子運行狀況的變化,針對性調整內存換出機制。
4) 2024_計算機工程_T2刊_GPGPU和CUDA統一內存研究現狀綜述
這篇論文最早是筆者在 HPC CHINA 2024 看到的,有助于了解 CUDA 統一內存相關的概念和工作。
摘抄:
- GPU 最初是一種專門用于加速圖像渲染的處理器。與傳統的中央處理器單元(CPU)相比,GPU 擁有數以千計的處理核心,能夠同時執行大量的計算任務。這種并行計算的特性使得 GPU 在處理大規模數據集和計算密集型任務時表現出色。而深度學習等人工智能相關技術通常涉及大量的矩陣運算和張量操作,這些操作可高度并行化,因此 GPU 的用途被擴展到了更廣泛的計算領域,發展也更加受到重視。
- GPU 顯存容量有限且不易拓展:相比于 CPU,考慮到 GPU 功能的局限性,加之散熱、功耗、整機物理空間等因素的影響,GPU 的體積有限。此外,獨立 GPU 一般是廠商封裝好的獨立硬件,所以 GPU 的顯存容量有限且不易拓展。
- 部分工作(DeepUM、OC-DNN)對內存交換的研究將統一內存作為研究重點。
5) 2024_arXiv:2407.20018_v1_Efficient Training of Large Language Models on Distributed Infrastructures: A Survey
這是一篇極好的綜述,因為是圍繞 MLSys - LLM訓練 這個主題去寫的,對筆者的參考價值很大。內容包含單卡、多卡,并行、通信、內存、計算、容錯等。筆者重點關注單卡內存優化的內容。
摘抄:
- 在 LLM 訓練過程中,內存消耗可以分為四個關鍵部分:模型狀態(model states)、激活值(activations)、臨時緩沖區(temporary buffers)和內存碎片(memory fragmentation)。
- 模型狀態:模型狀態包括優化器狀態、梯度和模型參數所占用的內存。
- 激活值:激活值是指在前向傳播過程中生成的張量。這些張量在反向傳播階段對梯度計算至關重要。
- 臨時緩沖區:臨時緩沖區用于存儲中間結果。
- 內存碎片:內存碎片可能導致盡管有大量可用內存,但內存請求仍然失敗的情況。這是因為可用內存可能變得碎片化,無法滿足連續內存請求。
圖表:

混合并行通常結合多種手工設計的并行化策略,以劃分 LLM 的不同可并行維度。這些策略包括數據并行(data parallelism)、張量并行(tensor parallelism)、流水線并行(pipeline parallelism)和序列并行(sequence parallelism)。數據并行、張量并行和流水線并行的組合也被稱為 3D 并行(3D parallelism)。

為了解決 LLM 訓練中的內存限制,提出了多種內存高效技術。這些技術包括:
- 激活重計算策略:通過增加計算量來減少內存使用;
- 冗余減少方法:最小化訓練過程中的數據重復;
- 碎片整理技術:優化內存分配和釋放以減少碎片并提高內存利用率;
- 交換和卸載方法:利用 CPU 內存和 NVMe SSD 來補充 GPU 內存。
圖 12 概述了這些內存高效 LLM 訓練優化的分類。
6.1 激活重計算(Activation Recomputation)?
在模型訓練的反向傳播階段,激活值對于計算梯度至關重要。隨著模型規模的增加,訓練期間存儲這些激活值所需的內存可能超過 GPU 內存容量,從而限制了可訓練模型的規模。激活重計算提供了一種解決方案,即在前向傳播過程中有策略地驅逐某些激活值,并在反向傳播過程中根據需要重新計算它們。這種方法已成為減少 LLM 訓練中內存消耗的事實標準。激活重計算的關鍵在于平衡內存節省與額外計算開銷之間的關系。
我們將這些方法分為兩種主要策略:靜態驅逐(static evicting)和動態驅逐(dynamic evicting)。
- 靜態驅逐涉及在前向傳播過程中制定一個固定的計劃來驅逐激活值,并在反向傳播過程中重新計算它們。靜態驅逐方法通常涉及針對特定模型架構或模塊制定驅逐策略。盡管靜態方法需要對新模型進行修改,但大多數 LLM 的結構具有相似的架構,使得這些策略在 LLM 訓練中具有通用性。(Checkmate)
- 動態驅逐根據訓練過程的當前狀態,實時決定驅逐和重新計算哪些激活值。相比之下,動態驅逐方法在沒有模型先驗知識的情況下實時做出決策。盡管動態驅逐方法具有固有的靈活性,但它們在 LLM 訓練中并未被廣泛采用。(DTR、MegTaiChi)
6.2 冗余減少(Redundancy Reduction)
傳統的數據并行方法在所有 GPU 上復制整個模型狀態,這導致了大量的冗余內存使用。冗余減少技術通過消除或減少每個設備上的內存冗余來優化內存使用。這些技術通常尋求在內存效率和引入的通信開銷之間取得平衡,從而以可接受的成本促進更大規模或更大批量的訓練。
零冗余優化器(ZeRO)通過三個階段(ZeRO-1、ZeRO-2 和 ZeRO-3)在所有 GPU 上完全分片(Fully Sharding)模型狀態來優化內存冗余。
- ZeRO-1:在所有 GPU 上全局分布優化器狀態。
- ZeRO-2:在 ZeRO-1 的基礎上,進一步在所有 GPU 上分片梯度。
- ZeRO-3:除了優化器狀態和梯度外,還對參數進行分片。
ZeRO 被許多框架廣泛采用,例如 DeepSpeed、PyTorch-FSDP 和 ColossalAI。
6.3 碎片整理/優化(Defragmentation)
GPU 內存碎片化是指在相鄰張量之間產生的分散且不可用的 GPU 內存塊。由于不同張量的生命周期不同,以及通用深度學習框架(如 PyTorch 和 TensorFlow)的內存分配和釋放機制效率低下,這一問題在 LLM 訓練中尤為突出。此外,重計算和卸載等內存優化技術通過引入更頻繁且不規則的內存分配和釋放請求,進一步加劇了這一問題。內存碎片化可能導致高峰值內存和內存不足(OOM)錯誤,從而限制批量大小和整體訓練效率。碎片整理技術通過內存管理方法來緩解這些問題。
基于張量的碎片整理:深度學習框架通常使用帶有內存池的緩存分配器來實現快速的內存分配和釋放,而無需設備同步。基于緩存分配器中的張量分配和釋放機制,已經提出了幾種減少內存碎片化的方法。(ROAM、Imanishi、MegTaiChi、Coop)
基于虛擬內存管理(VMM)的碎片整理:通過利用底層 CUDA 驅動程序 API 的**虛擬內存管理(VMM)**功能來緩解碎片化問題。該底層 API 為開發者提供了對 GPU 虛擬內存操作(如保留、映射和管理虛擬內存地址)的直接控制。(GMLake、PyTorch 可擴展段)
6.4 卸載(Offloading)
為了在更少的 GPU 上高效訓練 LLMs,提出了多種利用交換和卸載方法的研究。這些技術將部分計算和數據從 GPU 內存轉移到外部資源(如 CPU 內存或 NVMe 存儲),這些資源雖然速度較慢但容量巨大且成本較低。
許多研究提出了高效利用 CPU 內存以增強分布式 LLM 訓練的方法。這些技術可以大致分為兩種主要方法:靜態卸載和動態卸載。
- 靜態卸載方法涉及在 GPU 和 CPU 內存之間預先分配模型組件。
- ZeRO-Offload 將模型參數保留在 GPU 上,而將優化器狀態和梯度存儲在 CPU 內存中。此外,它將優化器更新計算卸載到 CPU。
- 動態卸載方法基于內存利用率和數據傳輸的實時優化,自適應地在 GPU 和 CPU 內存之間分配模型或張量的分區。(STRONGHOLD)
- 為了促進更好的內存管理,一些研究提出了將張量分解為更細粒度單元的系統。(TSPLIT)
- SSD 卸載。為了促進萬億級 LLM 的訓練(僅依賴 CPU 卸載的方法不足以支持),一些研究提出了在訓練期間將數據卸載到 CPU 內存和 NVMe SSD 的方法。
- ZeRO-Infinity 將所有分區的模型狀態卸載到 CPU 或 NVMe 內存,并將激活值僅卸載到 CPU 內存。
- 與 ZeRO-Infinity 相比,LoHan 進一步將激活值卸載到 SSD,并將 SSD-CPU 通信作為額外的優化維度。
6) 2024_arXiv:2401.15347_v1_A Comprehensive Survey of Compression Algorithms for Language Models
這篇綜述在講預訓練語言模型的壓縮算法,筆者不是很懂這個領域,主要學習文章中對六種壓縮算法的介紹。
摘抄:
- 預訓練語言模型(PLM)壓縮的目標是降低 PLMs 的成本;我們通過減少表示、計算權重和中間激活的成本來實現這一目標,這些成本占據了 PLMs 的大部分開銷。我們根據如何減少權重和激活的成本對預訓練語言模型壓縮算法進行分類如下。
- 剪枝 (Pruning)。
- 識別并移除 PLMs 中不必要的權重。
- 剪枝算法識別并剪枝 PLMs 中的冗余組件,以生成緊湊且準確的語言模型。
- 量化 (Quantization)。
- 減少表示權重的比特長度。
- 量化算法通過減少參數的比特寬度來壓縮大規模模型,同時保持準確性。
- 知識蒸餾 (Knowledge distillation)。
- 通過轉移 PLM 的有用知識來提高壓縮模型的準確性。
- 知識蒸餾是一種訓練技術,它將知識從預訓練的教師模型轉移到較小的學生模型,使學生模型能夠模仿教師模型。
- 低秩近似 (Low-rank approximation)。
- 基于低秩假設,通過用低維矩陣的乘法替換權重來減少 PLMs 的成本。
- 低秩近似是一種模型壓縮技術,通過將高維矩陣或張量分解為低維矩陣或張量來減小模型的大小。
- 參數共享 (Parameter sharing)。
- 在 PLMs 的不同模塊中共享權重。
- 參數共享通過在不同部分使用相同的權重來壓縮預訓練模型。
- 高效架構設計 (Efficient architecture design)。
- 設計一種成本高效的架構,該架構需要較低的存儲和計算成本。
- 高效架構設計涉及設計具有高效結構的 Transformer 層或從預訓練模型中自動搜索滿足約束的模型架構的方法。
7) 2025_JCST_B刊/T1刊_AI Computing Systems for Large Language Models Training
這篇綜述圍繞 LLM 訓練智能計算系統,從算法、硬件和軟件三個方面進行總結,質量還是蠻高的,很多表述都可以學習。
摘抄:
- 與此同時,大型語言模型(LLMs)的發展已經超越了傳統的語言和文本,逐漸擴展到整合圖像和語音等多模態數據。例如,Monkey 等模型能夠處理視覺信息,GPT4o 展示了令人印象深刻的語音能力,而 OpenAI 的 Sora 則具備從文本描述生成視頻的能力。
- 大型語言模型(LLMs)的計算主要涉及兩種不同類型:訓練和推理。訓練階段進一步分為預訓練和微調階段。這兩個階段都廣泛利用了大量的數據集和相當的計算資源。預訓練涉及使用通用語料庫數據從頭開始訓練模型,而微調則使用特定領域的數據來優化模型的權重。盡管數據來源不同,但底層的計算范式是相同的。
- 訓練過程涉及前向傳播、反向傳播以及參數更新等步驟。在前向傳播過程中,數據通過網絡拓撲結構流動,而反向傳播則需要梯度信息的反向流動,并通過各種優化算法調整參數。大多數模型的訓練采用同步方法,這種方法在訓練過程中具有保持穩定性和一致性的優勢,但同時也帶來了巨大的計算負擔。例如,訓練階段需要額外的內存來存儲優化器狀態和梯度。同時,前向傳播過程中生成的激活值必須保留,以便在反向傳播期間后續使用。這些內存需求對進一步優化提出了重大挑戰。
- 隨著大型語言模型(LLMs)領域模型規模和數據量的持續擴展,傳統的深度學習編程框架(如過時的靜態圖框架和早期版本的 PyTorch)已無法滿足這些模型執行的特定需求。為了克服諸如張量并行化、內存管理和通信優化等獨特挑戰,一些針對 LLMs 的高級編程框架被引入。值得注意的是,這些框架包括微軟的 DeepSpeed、英偉達的 Megatron-LM 和 Meta 的 FSDP,以及其他衍生框架。這些高級框架主要基于 PyTorch 編程環境,并在計算系統支持的硬件平臺上運行。
- 深度學習編程框架大多基于計算圖機制。如今,動態圖模式(Define-by-Run 即“定義即運行”)框架,如 PyTorch 和 JAX,已成為主流。相反,靜態圖模式(Define-and-Run 即“先定義后運行”)框架,包括 Caffe、TensorFlow 1.x、MXNet 和 CNTK,在 LLMs 時代已被淘汰。
- 在大型語言模型(LLMs)的訓練中,一個重大挑戰是如何在加速器有限的內存容量內滿足高要求的內存需求。在訓練的前向傳播過程中,激活張量被創建,并在反向傳播過程中使用后被釋放。這種動態變化導致內存使用量的上升和下降,可能引發內存不足(OOM)問題。LLMs 龐大的參數規模顯著加劇了這一挑戰。
- 為了在不改變數據位寬的情況下減少峰值內存使用量,一種方法是重計算,即利用額外的計算來換取內存。另一種方法是將張量交換到加速器外的內存中,以釋放加速器內存。與僅限于加速器的重計算不同,卸載技術利用主機內存和 SSD 來滿足 LLMs 訓練對內存的廣泛需求,使其成為一項值得關注的技術。
- 重計算。在這種方法中,前向傳播階段僅保存選定關鍵層的輸出作為檢查點,而不保留所有層的激活值。這些檢查點隨后在反向傳播階段用于重新計算所需的激活值。……經過多年的發展,主流編程框架已內置了這一功能。……該技術的主要挑戰在于在內存消耗和計算成本之間找到合適的平衡,這可以通過多種方法實現,例如預定義設置、整數規劃、動態規劃或貪心算法。這些方法有助于確定應保留哪些中間激活值。
- 卸載(也稱為內存交換)是一種在異構計算系統中將數據從加速器轉移到主機內存的技術。該策略旨在減輕加速器的內存負載,并允許在需要時將數據重新加載到加速器中。……卸載的主要挑戰包括確定最佳數據交換內容(即交換什么、在哪里、何時以及如何),以及在不大幅減慢程序執行的情況下管理高效的數據傳輸。卸載決策可以通過多種策略實現,從預定義設置到更復雜的算法,如貪心算法、遺傳算法或整數規劃。與僅涉及加速器計算的重新計算不同,卸載還涉及主機內存和數據傳輸的管理,增加了其實現的復雜性。……考慮到 LLMs 訓練對內存的龐大需求,充分利用所有主機端資源至關重要。卸載不僅限于利用大容量主機內存,還包括使用非易失性內存選項,如 SSD。卸載的目標不僅限于激活值,還包括任何可以從異構系統中受益的數據。
- 將重新計算和卸載策略相結合,提供了一種顯著減少內存需求同時保持神經網絡訓練效率的可行方法。主要挑戰在于準確估計與這些策略相關的計算和內存成本,以及就張量釋放和重建的最佳時機做出明智的決策。
圖表:

如圖1所示,從頂部開始,大型語言應用依賴于特定模型,而這些模型又依賴于各種編程框架來執行。具體而言,LLMs 的運行依賴于先進的深度學習框架 (advanced deep learning frameworks),如 DeepSpeed、Megatron-LM 和 FSDP(完全分片數據并行),這些框架進一步調用較低級別的深度學習編程框架 (lower-level deep learning programming frameworks),主要是 PyTorch。這些低級框架利用高性能計算庫、通信庫和運行時系統來執行復雜的計算任務并控制通信網絡上的傳輸。

表1列舉了一些著名的大型語言模型(LLMs)及其相關細節,包括它們的網絡結構類型。LLMs 的發展在 2017 年取得了顯著進展,谷歌引入了注意力機制和 Transformer 架構。這一創新涉及基于該結構訓練一個包含 2.1 億參數的編碼器-解碼器模型,這成為后續 LLMs 領域工作的里程碑。OpenAI 在 2019 年發布了 GPT-2,并在 2020 年發布了 GPT-3,兩者均基于 Transformer 架構。GPT-2 擁有超過 10 億參數,而 GPT-3 則擁有數千億參數,并在約 3000 億個 token 上進行了預訓練。隨著百度推出 Ernie、谷歌發布 PaLM 和 Gemini、阿里巴巴推出 QWen,以及 Meta 提出 Llama 模型,競爭愈發激烈。這些模型通過處理更大的數據集并使用更小的模型,在相同參數下實現了更好的效果。2024 年,Meta 發布了 Llama 3 模型,其中最大版本擁有 4050 億參數。遺憾的是,近年來 LLM 技術細節的披露顯著減少。然而,DeepSeek V3 的發布為開源 LLM 社區注入了新的活力。

如圖7所示,近年來,大型語言模型(LLMs)的參數規模呈指數級增長,擴大了數個數量級。模型復雜性的快速提升與主流加速器(特別是晶體管數量和內存容量)相對較慢的技術進步形成了鮮明對比。因此,LLMs 的發展與內存技術之間的“差距”正在不斷擴大,這對在當前加速器上容納這些龐大模型提出了重大挑戰。
8) 2025_軟件導刊_T3刊_深度學習訓練性能優化:原理、技術與工具
這篇綜述的內容倒是挺全面,訓練流程的優化技術樣樣有,但樣樣都不是很深入。
摘抄:
- 當相關模型的瓶頸在于設備內存限制而導致計算吞吐不高時,可考慮使用該類方法(內存優化)增大批數據大小,以充分發揮計算加速設備的算力,從而減少訓練時間。
圖表:

MLSys 推理優化
1) 2024_中興通訊技術_T3刊_大語言模型算法演進綜述
這篇論文主要在講 LLM 推理和 LLM 模型。對筆者的重要性弱一些。
圖表:

OpenAI 從 2018 年發布 GPT-1 到 2023 年發布 GPT-4,模型的能力產生了質的飛躍。
模型的規模也在數量級地增加,參數量從 1.17 × 1 0 8 1.17×10^{8} 1.17×108 增加到 1 × 1 0 12 1×10^{12} 1×1012 以上。
大語言模型存在計算量大、存儲量大的特點。以 GPT-3 為例,GPT-3 包含 96 層 Transformer,每層有 96 個注意力頭,詞向量深度為 12288。整個模型參數量達到 1750 億個,按照 INT8 數據格式計算,總大小達到 175GB。
MLSys 訓推優化
1) 2023_IEEE ComST_SCI一區_Enabling Resource-Efficient AIoT System With Cross-Level Optimization: A Survey
這篇綜述是關注 AIoT 訓推的,寫得也蠻不錯,圖文并茂。筆者雖然只關注和單卡顯存優化相關的內容(第四章 A. On-Device DL Training),但也發現了不少亮點。文中有一些比較新穎的表述,對相關技術的總結也比較全面。
摘抄:
- 深度學習訓練采用批處理內存塊,將多個數據樣本分組。內存使用量與批量大小成比例增加。具體而言,如果未確保足夠的批量大小,計算效率將會降低。更大的批量大小可以為像 BatchNorm 這樣的操作符帶來更準確的分布統計,從而加速訓練收斂并提高準確性。
圖表:

我們首先從內存和計算需求的角度區分深度學習訓練與推理的具體差異,如圖 21 所示。
(i)深度學習訓練比推理需要更多的計算。訓練過程中更多的內存訪問也帶來了更多的內存訪問延遲。例如,GPU 設備的計算能力瓶頸通常在于內存訪問帶寬,而歷代 GPU 的升級都集中在內存帶寬上,這一點也證明了這一點。
(ii)深度學習訓練比推理需要更多的內存空間。根據反向傳播的鏈式求導規則,計算第 i i i 層權重的梯度和導數需要使用第 i + 1 i+1 i+1 層的導數以及該層的輸入。因此,在前向傳播過程中產生的中間激活值 A 1 A_1 A1?、 A 2 A_2 A2? 需要保存到反向傳播計算梯度 Δ A \Delta A ΔA、 Δ B \Delta B ΔB 并更新權重時。相比之下,模型推理過程中的 A 1 A_1 A1?、 A 2 A_2 A2? 不需要保留,它們可以在使用后立即釋放,這導致訓練過程需要更大的內存需求。
(iii)深度學習訓練需要 N N N 輪循環迭代,而推理只需要一輪。在算法層面(例如模型參數/激活量化),如果沒有精心設計,產生的微小不穩定性會在數千次迭代中被放大,甚至導致訓練崩潰。與模型推理過程的“一次性”特性相比,深度學習訓練需要考慮跨多次迭代的優化,這也對系統優化提出了挑戰。

同時優化三個關鍵性能指標——延遲、內存和準確性——對于設備端深度學習訓練來說并非易事。鑒于同時優化內存使用、延遲和準確性所面臨的挑戰,我們將設備端深度學習訓練優化技術總結為不同的系統層級,即資源友好的算法層級、模型自適應的系統調度層級以及設備間控制器。圖 20 展示了它們在系統循環中的關系。
資源友好的算法層級
- 壓縮深度學習模型結構:Efficient model architecture
- 減少參數/激活值的位寬:參數/激活量化 (Parameter/activation quantization)
- 稀疏更新 (Sparse updating)
模型自適應的系統調度層級:它在算法層級技術優化能力的基礎上,進一步最大化系統性能和資源效率,從而突破性能與資源權衡的極限。
a) 重計算 (Recomputation):在深度學習訓練中,前向傳播過程中生成的中間激活值通常會被存儲到反向傳播計算梯度時,這會導致較大的內存占用。實驗表明,模型的中間激活值比參數占用更多的內存。為此,重計算方法在前向計算后立即丟棄部分中間激活值以節省內存使用,并在反向傳播時重新計算這些激活值以用于梯度計算。
b) 中間激活值編碼 (Intermediate activation encoding):與重計算類似但不同,中間激活值壓縮并不直接丟棄中間激活值,而是在前向傳播后對激活值進行臨時編碼,然后在反向傳播時解碼以計算梯度。因此,它在計算延遲和內存節省之間取得了有價值的平衡,而不是簡單地用延遲換取內存資源。
c) 算子重排 (Operator reordering):傳統的深度學習訓練過程在反向傳播中保留每個梯度,并在計算所有梯度后統一更新權重。在反向傳播期間對計算圖中的算子進行重排可以減少峰值內存使用。
d) 算子融合 (Operator fusion):深度學習訓練中的算子融合專注于將多個算子合并為一個,以提高計算和內存訪問效率。假設計算圖中相鄰的兩層(第 i i i 層和第 i + 1 i+1 i+1 層)被合并,第 i i i 層生成的中間激活值可以直接應用于第 i + 1 i+1 i+1 層,而無需額外的內存讀寫操作。值得注意的是,算子融合技術所屬的計算圖優化 (computation graph optimization) 是一個廣泛的領域。現有研究和深度學習框架(如 TensorFlow、PyTorch、NCNN 和 MindSpore)已經深入探索了各種算子融合技術。
e) 內存分配 (Memory allocation):內存分配方法通常在編譯器后端實現,比上述優化計算圖的技術更接近硬件資源。在深度學習訓練中,張量的創建到最后訪問之間的時間被稱為張量的“生命周期”。現有深度學習框架在訓練時為每個張量分配單獨的內存空間,這遠大于大多數張量的生命周期。實際上,在張量的生命周期之外保留內存空間是無用的。通過為生命周期不重疊的兩個張量分配相同的內存來回收內存可以節省內存使用,如圖 14 所示。

f) 內存交換:在深度學習訓練中,某一模型層的中間激活值在該層的前向和反向傳播中暫時使用。將暫時未使用的中間激活值從珍貴的內存(如 GPU)交換到更大的內存(如 CPU),并在梯度更新需要時交換回來,可以加速計算并減少內存使用。?內存交換通常由操作系統支持,例如 Windows 中的虛擬地址空間和 Linux 中的交換分區。當設備的內存容量不足時,數據會暫時交換到外部內存(如磁盤)。然而,這會帶來額外的傳輸延遲,并且隨機程序的內存使用難以預測。值得注意的是,這一缺點在深度學習訓練中可以得到很好的解決,因為前向計算和反向傳播的順序是固定的(即前向計算從第一層到最后一層,反向傳播則相反),這為內存交換帶來了優化潛力。
?這里關于內存交換的討論很精彩,第一次見到把深度學習場景與傳統操作系統進行對比的。
設備內跨層級控制器:深度學習訓練任務的資源需求各不相同。這種變化性,結合 AIoT 設備的異構計算/內存資源,提供了眾多優化可能性。例如,當設備內存緊張但計算資源豐富時,可能需要頻繁采用重計算技術;而對于內存充足的設備,則可以避免此類策略以減少不必要的計算延遲。此外,同一設備上的不同訓練輪次可能產生多樣化的性能結果。因此,在資源高效的 AIoT 系統中,應采用自適應控制器 (adaptive controller),根據資源可用性和性能需求調整技術配置。上下文感知控制器 (context-aware controller)可以防止內存單元閑置或過載,從而提升效率。

- BPTT
- 上下文:內存預算
- 控制器:動態規劃
- DTR
- 上下文:內存預算,張量滯后性
- 控制器:貪心算法,啟發式
- SwapAdvisor
- 上下文:內存預算
- 控制器:遺傳算法
- CSWAP
- 上下文:不同的 GPU 設備架構
- 控制器:貝葉斯優化
初讀“設備內跨層級控制器”容易被唬住,但根據作者分析的相關工作和表5可知,其實這就是根據設備的內存和計算資源決定具體的優化策略。
2) 2024_arXiv:2312.03863_v4_Efficient Large Language Models: A Survey
這篇綜述的內容還是很豐富的,訓推都有,涵蓋模型、數據、框架三方面,圖文并茂,思維導圖畫得不錯。筆者主要關注模型壓縮和 LLM 框架兩部分內容。
摘抄:
- LLM 框架:大型語言模型(LLMs)的出現催生了專門框架的開發,以高效處理其訓練、微調、推理和服務。盡管主流的 AI 框架(如 TensorFlow 和 PyTorch)提供了基礎支持,但它們缺乏對 LLMs 至關重要的特定優化和功能的內置支持。
圖表:

模型壓縮通過減少 LLMs 的規模和算術運算量來提高效率。……如圖4所示,LLMs 的模型壓縮技術可分為四類:量化 (Quantization)、參數剪枝 (Parameter Pruning)、低秩近似 (Low-Rank Approximation)和知識蒸餾 (Knowledge Distillation)。這四類技術相互正交,從不同角度對 LLMs 進行壓縮。

如表1所示,LLMs 的預訓練成本極高。高效的預訓練技術專注于在計算資源、訓練時間、內存和能耗方面降低 LLM 預訓練過程的成本。

如圖6所總結,通過不同的互補技術可以提升預訓練的效率,包括混合精度加速、模型擴展、初始化技術、訓練優化器以及系統級預訓練效率優化。
系統級預訓練效率優化。由于對內存和計算資源的高需求,LLMs 通常以分布式方式在多個計算節點上進行預訓練。因此,大多數系統級優化技術都是在大規模分布式訓練環境中設計的。例如,
- 零冗余數據并行(ZeRO)提供了三個優化階段,將各種訓練狀態分布到不同設備上。具體而言,ZeRO-1 僅分區優化器狀態,而 ZeRO-2 分區優化器狀態和梯度。與 ZeRO-1 和 ZeRO-2 相比,ZeRO-3 進一步將模型參數分區到設備上。盡管通過 ZeRO-3 進一步減少了運行時內存,但通信量增加了約 50%。因此,建議在節點內使用 ZeRO-3 以最小化通信時間,同時在節點間使用 ZeRO-1 和 ZeRO-2。
- 完全分片數據并行(FSDP)采用了類似的優化思路,并設計了一種混合分片策略,允許用戶定義在哪些節點或進程之間分區梯度、模型參數和優化器狀態。
- 在權重內存超過所有計算節點可提供的聚合內存的情況下,ZeRO-Offload 允許將 ZeRO 的任何階段卸載到 CPU 內存,而 ZeRO-Infinity 則提供了將數據卸載到 NVMe 驅動器和 CPU 內存的機制。然而,使用這兩種替代方案很難保持性能,因為 CPU 和 GPU 之間的數據傳輸速度較慢。

高效微調技術專注于降低 LLM 微調過程的成本。如圖8所總結,高效微調技術可分為參數高效微調(PEFT)和內存高效微調(MEFT)。

LLM 框架通常可以根據其是否支持訓練、微調和推理任務進行分類。具體而言,支持訓練和/或微調的框架旨在提供可擴展、高效且靈活的基礎設施,以提高計算效率、減少內存占用、優化通信效率并確保訓練/微調過程的可靠性。……表2總結了現有的 LLM 框架及其關鍵特性。
3) 2024_arXiv:2303.18223_v15_A Survey of Large Language Models
這篇綜述確實是涵蓋了 LLM 的方方面面,而且是一直更新的狀態,凡是研究內容與 LLM 相關的讀者都能開卷有益。筆者還是更加關注文中與顯存優化有關的內容。
摘抄:
- 由于研究人員發現模型擴展可以提高模型能力,他們通過將參數規模增加到更大的規模進一步研究了擴展效應。有趣的是,當參數規模超過某一水平時,這些擴展后的語言模型不僅實現了顯著的性能提升,還展現出一些小規模語言模型(例如 BERT)所不具備的特殊能力(例如上下文學習)。
- LLM 的快速發展正在徹底改變 AI 的研究領域。……這一新技術浪潮可能會催生一個基于 LLM 的現實應用生態系統。例如,Microsoft 365 正在通過 LLM(即 Copilot)實現辦公自動化,OpenAI 支持在 ChatGPT 中使用插件以實現特殊功能。
- 在 NLP 領域,LLM 可以作為一種通用語言任務求解器(在某種程度上),研究范式正在向使用 LLM 的方向轉變。
- 在 IR 領域,傳統搜索引擎正受到通過 AI 聊天機器人(即 ChatGPT)進行信息檢索的新方式的挑戰,New Bing 提供了一個基于 LLM 增強搜索結果的初步嘗試。
- 在 CV 領域,研究人員嘗試開發類似 ChatGPT 的視覺-語言模型,以更好地服務于多模態對話,而 GPT-4 通過整合視覺信息已支持多模態輸入。
- 通常,大語言模型(LLM)指的是包含數千億(或更多)參數的 Transformer 語言模型,這些模型在大規模文本數據上進行訓練,例如 GPT-3、PaLM、Galactica 和 LLaMA。LLM 展現出強大的自然語言理解和解決復雜任務的能力(通過文本生成)。
- 預訓練為 LLM 的能力奠定了基礎。通過在大規模語料庫上進行預訓練,LLM 可以獲得基本的語言理解和生成能力。
- 在預訓練之后,需要進一步微調 LLM 以增強模型能力,這通常涉及兩個主要步驟,即指令微調(監督微調)和對齊微調。
- 批量訓練。對于語言模型預訓練,現有工作通常將批量大小設置為較大的數值(例如 2,048 個樣本或 4M 詞元),以提高訓練穩定性和吞吐量。對于 GPT-3 和 PaLM 等 LLM,它們引入了一種新策略,即在訓練過程中動態增加批量大小,最終達到百萬規模。具體來說,GPT-3 的批量大小從 32K 逐漸增加到 3.2M 詞元。實證結果表明,批量大小的動態調度可以有效穩定 LLM 的訓練過程。
- 用于開發 LLM 的可用庫:
- Transformers 是一個開源的 Python 庫,用于使用 Transformer 架構構建模型,由 Hugging Face 開發和維護。它具有簡單且用戶友好的 API,便于使用和定制各種預訓練模型。它是一個功能強大的庫,擁有龐大且活躍的用戶和開發者社區,定期更新和改進模型與算法。
- DeepSpeed 是微軟開發的深度學習優化庫(兼容 PyTorch),已被用于訓練多個 LLM,例如 MTNLG 和 BLOOM。它提供了多種分布式訓練優化技術的支持,例如內存優化(ZeRO 技術、梯度檢查點)和流水線并行。
- Megatron-LM 是 NVIDIA 開發的深度學習庫,用于訓練大規模語言模型。它還提供了豐富的分布式訓練優化技術,包括模型和數據并行、混合精度訓練和 FlashAttention。這些優化技術可以顯著提高訓練效率和速度,支持跨 GPU 的高效分布式訓練。
- JAX 是 Google 開發的用于高性能機器學習算法的 Python 庫,允許用戶輕松在硬件加速(例如 GPU 或 TPU)下執行數組計算。它支持在各種設備上高效計算,還提供了自動微分和即時編譯等特色功能。
- Colossal-AI 是 HPC-AI Tech 開發的深度學習庫,用于訓練大規模 AI 模型。它基于 PyTorch 實現,支持豐富的并行訓練策略。此外,它還可以通過 PatrickStar 提出的方法優化異構內存管理。最近,一個類似 ChatGPT 的模型 ColossalChat 公開發布了兩個版本(7B 和 13B),它們基于 LLaMA 使用 Colossal-AI 開發。
- BMTrain 是 OpenBMB 開發的高效庫,用于以分布式方式訓練大規模參數模型,強調代碼簡潔性、低資源和高可用性。BMTrain 已將多個常見的 LLM(例如 Flan-T5 和 GLM)集成到其 ModelCenter 中,開發者可以直接使用這些模型。
- FastMoE 是專門用于 MoE(即專家混合)模型的訓練庫。它基于 PyTorch 開發,在設計上優先考慮效率和用戶友好性。FastMoE 簡化了將 Transformer 模型轉換為 MoE 模型的過程,并支持訓練期間的數據并行和模型并行。
- vLLM 是一個快速、內存高效且易于使用的庫,用于 LLM 推理和服務。為了實現快速推理,它特別優化了高服務吞吐量、使用 PagedAttention 的有效注意力內存管理、連續批處理和優化的 CUDA 內核。此外,vLLM 還支持各種解碼算法、張量并行和流式輸出。為了便于與其他系統集成,vLLM 對 HuggingFace 模型的使用友好,還提供了 OpenAI 兼容的 API 服務器。
- DeepSpeed-MII 是 DeepSpeed 開發的內存高效 Python 庫。它旨在通過優先考慮高吞吐量、低延遲和成本效益來普及 LLM 推理。DeepSpeed-MII 通過利用四項關鍵技術加速文本生成推理:分塊 KV 緩存、連續批處理、動態 SplitFuse 和高性能 CUDA 內核。它目前支持超過 13,000 個模型,涵蓋三種流行的模型架構,例如 LLaMA、Mistral 和 OPT。
- DeepSpeed-Chat 是一個快速、經濟高效且易于使用的系統框架,支持在模型訓練期間集成完整的 RLHF 過程。它具有三大功能特點:(1)簡化了類似 ChatGPT 模型的訓練和推理過程,允許使用簡單腳本實現多個訓練或推理步驟;(2)復制了 InstructGPT 的訓練模式,并提供了完整的三個訓練步驟(即 SFT、獎勵模型微調和 RLHF)的流程;(3)將 Deepspeed 的訓練引擎和推理引擎集成到統一的混合引擎(Deepspeed HE)中,用于 RLHF 訓練,支持在訓練和推理模式之間無縫切換,并利用 DeepSpeed Inference 的各種優化。
- 除了上述庫資源外,現有的深度學習框架(例如 PyTorch、TensorFlow、MXNet、PaddlePaddle、MindSpore 和 OneFlow)也提供了對并行算法的支持,這些算法通常用于訓練大規模模型。
- 隨著模型參數和數據規模的不斷擴大,在有限的計算資源下高效訓練更大的模型已成為 LLM 開發中的關鍵技術挑戰。特別是需要解決兩個主要技術問題,即提高訓練吞吐量以及將更大的模型加載到 GPU 內存中。
- 3D 并行。3D 并行實際上是三種常用并行訓練技術的組合,即數據并行、流水線并行和張量并行。接下來我們介紹這三種并行訓練技術。
- 數據并行。數據并行 (Data parallelism) 是提高訓練吞吐量的最基本方法之一。它在多個 GPU 上復制模型參數和優化器狀態,然后將整個訓練語料庫分配到這些 GPU 中。這樣,每個 GPU 只需處理分配給它的數據,并執行前向和反向傳播以獲取梯度。不同 GPU 上計算的梯度將進一步聚合,以獲得整個批次的梯度,從而更新所有 GPU 中的模型。由于梯度計算在不同 GPU 上獨立執行,數據并行機制具有高度可擴展性,能夠通過增加 GPU 數量來提高訓練吞吐量。此外,該技術實現簡單,現有大多數流行的深度學習庫(如 TensorFlow 和 PyTorch)都已實現了數據并行。
- 流水線并行。流水線并行 (Pipeline parallelism) 旨在將 LLM 的不同層分配到多個 GPU 上。特別是在 Transformer 模型中,流水線并行將連續的層加載到同一個 GPU 上,以減少在 GPU 之間傳輸計算隱藏狀態或梯度的成本。然而,流水線并行的簡單實現可能會導致 GPU 利用率降低,因為每個 GPU 必須等待前一個 GPU 完成計算,從而導致不必要的泡沫開銷。為了減少流水線并行中的這些泡沫,GPipe 和 PipeDream 提出了填充多批數據和異步梯度更新的技術,以提高流水線效率。
- 張量并行。張量并行 (Tensor parallelism) 也是一種常用技術,旨在分解 LLM 以實現多 GPU 加載。與流水線并行不同,張量并行側重于分解 LLM 的張量(參數矩陣)。對于 LLM 中的矩陣乘法操作 Y = X A Y = XA Y=XA,參數矩陣 A A A 可以按列拆分為兩個子矩陣 A 1 A_1 A1? 和 A 2 A_2 A2?,可以表示為 Y = [ X A 1 , X A 2 ] Y = [XA_1, XA_2] Y=[XA1?,XA2?]。通過將矩陣 A 1 A_1 A1? 和 A 2 A_2 A2? 放置在不同的 GPU 上,矩陣乘法操作將在兩個 GPU 上并行調用,最終結果可以通過跨 GPU 通信結合兩個 GPU 的輸出獲得。目前,張量并行已在多個開源庫(如 Megatron-LM)中得到支持,并且可以擴展到更高維度的張量。此外,Colossal-AI 已為高維張量實現了張量并行,并提出了專門用于序列數據的序列并行,可以進一步分解 Transformer 模型的注意力操作。
- 混合精度訓練。在之前的 PLM(如 BERT)中,**32 位浮點數(FP32)**主要用于預訓練。近年來,為了預訓練超大規模語言模型,一些研究開始使用 16 位浮點數(FP16),這減少了內存使用和通信開銷。此外,由于流行的 NVIDIA GPU(如 A100)的 FP16 計算單元數量是 FP32 的兩倍,FP16 的計算效率可以進一步提高。然而,現有工作發現 FP16 可能導致計算精度損失,影響最終模型性能。為了緩解這一問題,一種稱為 Brain Floating Point(BF16)的替代方案被用于訓練,它分配了比 FP16 更多的指數位和更少的有效位。在預訓練中,BF16 通常在表示精度上優于 FP16。
- 整體訓練建議。
- 在實踐中,上述訓練技術,特別是 3D 并行,通常聯合使用以提高訓練吞吐量和大型模型加載能力。目前,DeepSpeed、Colossal-AI 和 Alpa 等開源庫可以很好地支持這三種并行訓練方法。
- 為了減少內存冗余,ZeRO、FSDP 和激活重計算技術也可用于訓練 LLM,這些技術已集成到 DeepSpeed、PyTorch 和 Megatron-LM 中。
- 此外,混合精度訓練技術(如 BF16)也可用于提高訓練效率并減少 GPU 內存使用,但它需要硬件(如 A100 GPU)的必要支持。
- 在實踐中,可以進一步利用主流深度學習框架的支持訓練技術。例如,PyTorch 支持數據并行訓練算法 FSDP(即完全分片數據并行),如果需要,可以將部分訓練計算卸載到 CPU。
- 由于 LLM 包含大量模型參數,執行全參數微調的成本會很高。……在現有文獻中,參數高效微調一直是一個重要課題,旨在減少可訓練參數的數量,同時盡可能保持良好的性能。
- 四種針對 Transformer 語言模型的參數高效微調方法,包括適配器微調 (Adapter Tuning)、前綴微調 (Prefix Tuning)、提示微調 (Prompt Tuning) 和 LoRA (Low-Rank Adaptation)。
- 隨著 LLM 的興起,高效微調在開發更輕量級的下游任務適應方法方面吸引了越來越多的研究關注。特別是,LoRA 已被廣泛應用于開源 LLM(例如 LLaMA 和 BLOOM)中,以實現參數高效微調。
- 訓練 LLM 的 GPU 內存消耗:
- 模型狀態成本。模型狀態在訓練期間通常占用大部分內存,主要包括模型參數、梯度和優化器狀態。例如,訓練 LLaMA-7B(模型參數 P ≈ 6.7 × 1 0 9 P \approx 6.7 \times 10^9 P≈6.7×109)需要約 100GB 內存來存儲模型狀態。
- 激活值成本。激活值是在前向傳播期間需要存儲的中間狀態,用于反向傳播期間的梯度計算。以 LLaMA-7B( V = 32 , 000 V = 32,000 V=32,000, L = 32 L = 32 L=32, H = 4 , 096 H = 4,096 H=4,096, H ′ = 11 , 008 H' = 11,008 H′=11,008, N = 32 N = 32 N=32)為例,在 B = 1 B = 1 B=1, T = 2 , 048 T = 2,048 T=2,048 的設置下,每個設備存儲激活值需要 16GB 內存。(將批量大小記為 B B B,序列長度記為 T T T,詞匯表大小記為 V V V,注意力模塊中的頭數記為 N N N,每個頭的維度記為 D D D,隱藏層大小記為 H H H( H = N D H = ND H=ND),FFN 內部的中間層大小記為 H ′ H' H′,層數 L L L)
- 其他內存成本:
- 深度學習框架。PyTorch 框架在加載其核心功能時需要約 1GB 的 GPU 內存。這是框架運行的基本開銷。
- 分布式框架。當使用分布式訓練框架(例如 DeepSpeed)時,其 GPU 內存使用量可能在 1GB 到 4GB 之間波動。具體數量取決于優化水平和超參數設置。這部分內存主要用于優化訓練過程中的內存管理和通信效率。
- 中間結果和內存碎片。除了激活值外,還存在影響峰值內存消耗的中間結果。此外,在訓練過程中,由于內存的非連續分配和釋放,內存碎片化通常會導致額外的 0.5GB 到 1GB 內存消耗。
- 幾種優化 LLM 訓練內存使用的典型方法。
- 梯度檢查點。Gradient Checkpointing(也稱為激活重計算 Activation Recomputation)是一種用于優化反向傳播期間內存使用的技術。具體來說,在前向傳播期間需要保留激活值。然而,存儲每一層的所有激活值需要大量內存資源。為了減少內存成本,梯度檢查點在前向傳播期間僅保留一部分激活值,并在反向傳播期間重新計算這些值以節省內存,盡管這會帶來額外的計算開銷。在實現中,梯度檢查點通常涉及存儲每個 Transformer 層的輸入,并在反向傳播期間重新計算相應的激活值。
- 零冗余優化器(ZeRO)。Zero redundancy optimizer 技術由 DeepSpeed 庫提出,旨在緩解數據并行中的內存冗余問題。數據并行要求每個 GPU 存儲相同副本的模型狀態,導致每個 GPU 的內存消耗為 16P 字節。數據并行的直接副作用是內存冗余問題,因為并非所有上述數據都需要在每個 GPU 上保留。為了解決這個問題,ZeRO 技術旨在在每個 GPU 上僅保留一部分數據,而其余數據在需要時可以從其他 GPU 獲取。具體來說,ZeRO 提供了三種策略,取決于數據的三個部分如何存儲,即優化器狀態分區(ZeRO-1)、梯度分區(ZeRO-2)和參數分區(ZeRO-3)。實證結果表明,前兩種策略不會增加通信開銷,而第三種解決方案增加了約 50% 的通信開銷,但節省了與 GPU 數量成比例的內存。PyTorch 已實現了一種類似于 ZeRO 的技術,稱為完全分片數據并行(FSDP)。
- 卸載。在 GPU 資源有限的環境中,DeepSpeed 提出了 Offload 技術,通過將部分模型狀態和計算開銷卸載到 CPU 內存中,可以顯著減少訓練所需的 GPU 內存。具體來說,梯度和優化器狀態會被卸載到 CPU 內存中,而模型參數仍保留在 GPU 上。計算密集的前向和反向傳播仍需在 GPU 上執行以確保效率,而計算量相對較少的參數更新則在 CPU 上執行以減少 GPU 內存開銷。此外,Infinity 允許通過利用高速磁盤存儲(例如 NVMe)來訓練超出 GPU 內存限制的模型。
- 模型壓縮方法
- 量化方法。通常有兩種主要的模型量化方法,即**量化感知訓練(QAT)(需要額外的全模型重新訓練)**和訓練后量化(PTQ)(不需要模型重新訓練)。與小型語言模型相比,在設計或選擇 LLM 的量化方法時需要考慮兩個主要差異。首先,LLM 包含大量參數,因此 PTQ 方法更受青睞,因為其計算成本遠低于 QAT 方法。其次,LLM 表現出非常不同的激活模式(即大量異常特征),這使得量化 LLM 尤其是隱藏激活變得更加困難。
- 與模型量化不同,模型蒸餾和剪枝旨在簡化模型架構,從而減少參數總數。
- LLM 的蒸餾。通常,模型蒸餾旨在將能力較強的模型(稱為教師模型)的能力轉移到能力較弱的模型(稱為學生模型),從而實現能力模型的壓縮。
- LLM 的剪枝。模型剪枝的目標是盡量減少模型中的參數數量,同時盡可能保留其性能。
關于量化、蒸餾和剪枝,因為筆者最初有點搞不清楚他們到底是屬于訓練還是推理的技術,所以問了下 DeepSeek,下面是 DeepSeek 給出的回答:
- ?推理階段:量化(主要)
- 訓練階段:蒸餾(核心)、剪枝(核心,需微調)
- 交叉階段:量化感知訓練(訓練階段)、剪枝后微調(訓練階段)
圖表:

圖 2:從任務解決能力的角度展示了四代語言模型(LM)的演進過程。需要注意的是,每個階段的時間段可能并不十分準確,我們主要根據每個階段最具代表性研究的發表日期來設定時間。對于神經語言模型,我們通過縮寫兩篇代表性研究的論文標題來命名這兩種方法:NPLM(“一種神經概率語言模型”)和 NLPS(“幾乎從零開始的自然語言處理”)。由于篇幅限制,我們未在圖中列出所有代表性研究。
從技術上講,語言建模(LM)是提升機器語言智能的主要方法之一。總體而言,LM 旨在對詞序列的生成似然進行建模,從而預測未來(或缺失)詞元的概率。LM 的研究在文獻中受到了廣泛關注,其發展可以分為四個主要階段:
統計語言模型(SLM)。SLM 基于 20 世紀 90 年代興起的統計學習方法開發。其基本思想是基于馬爾可夫假設構建詞預測模型,例如根據最近的上下文預測下一個詞。
神經語言模型(NLM)。NLM 通過神經網絡(例如多層感知機(MLP)和循環神經網絡(RNN))來表征詞序列的概率。這些研究開創了語言模型在表示學習(超越詞序列建模)中的應用,對自然語言處理(NLP)領域產生了重要影響。
預訓練語言模型(PLM)。作為早期嘗試,ELMo 被提出用于捕捉上下文感知的詞表示,其首先預訓練一個雙向 LSTM(biLSTM)網絡(而不是學習固定的詞表示),然后根據特定的下游任務對 biLSTM 網絡進行微調。此外,基于具有自注意力機制的高度可并行化的 Transformer 架構,BERT 通過在大規模未標注語料上使用專門設計的預訓練任務預訓練雙向語言模型而被提出。這些預訓練的上下文感知詞表示作為通用語義特征非常有效,極大地提高了 NLP 任務的性能基準。這項研究激發了大量后續工作,確立了“預訓練和微調”的學習范式。遵循這一范式,大量關于 PLM 的研究被開發,引入了不同的架構(例如 GPT-2 和 BART)或改進的預訓練策略。在這一范式中,通常需要對 PLM 進行微調以適應不同的下游任務。
大語言模型(LLM)。研究人員發現,擴展 PLM(例如擴展模型規模或數據規模)通常可以提高模型在下游任務上的能力(即遵循擴展定律 scaling law)。許多研究通過訓練更大的 PLM(例如 175B 參數的 GPT-3 和 540B 參數的 PaLM)探索了性能極限。盡管擴展主要在模型規模上進行(使用相似的架構和預訓練任務),這些大規模 PLM 顯示出與較小 PLM(例如 330M 參數的 BERT 和 1.5B 參數的 GPT-2)不同的行為,并在解決一系列復雜任務時展現出令人驚訝的能力(稱為涌現能力)。例如,GPT-3 可以通過上下文學習解決少樣本任務,而 GPT-2 則表現不佳。因此,研究界將這些大規模 PLM 稱為“大語言模型(LLM)”,它們吸引了越來越多的研究關注(見圖 1)。LLM 的一個顯著應用是 ChatGPT,它適配了 GPT 系列的 LLM 用于對話,展示了與人類驚人的對話能力。我們可以觀察到,在圖 1 中,ChatGPT 發布后與 LLM 相關的 arXiv 論文數量急劇增加。

圖 1:分別展示了自 2018 年 6 月以來包含關鍵詞“language model”和自 2019 年 10 月以來包含關鍵詞“large language model”的 arXiv 論文累計數量的趨勢。統計數據通過按月查詢標題或摘要中的關鍵詞進行精確匹配計算得出。我們為這兩個關鍵詞設置了不同的 x 軸范圍,因為“language models”的研究更早開始。我們標注了與 LLM 研究進展中重要里程碑對應的點。在 ChatGPT 發布后,數量急劇增加:標題或摘要中包含“large language model”的 arXiv 論文的平均每日發表數量從 0.40 篇增加到 8.58 篇(圖 1(b))。
ChatGPT
- 2022 年 11 月,OpenAI 發布了基于 GPT 模型(GPT-3.5 和 GPT-4)的對話模型 ChatGPT。
- ChatGPT 在與人交流方面展現了卓越的能力:擁有廣泛的知識儲備,擅長數學問題的推理,在多輪對話中準確追蹤上下文,并與人類價值觀良好對齊以確保安全使用。
- 迄今為止,它似乎是 AI 歷史上最強大的聊天機器人。ChatGPT 的發布對未來 AI 研究產生了重大影響,為探索類人 AI 系統指明了方向。

圖 3:近年來現有大語言模型(規模大于 10B)的時間線。該時間線主要根據模型技術論文的發布日期(例如提交到 arXiv 的日期)建立。如果沒有相應的論文,我們將模型的日期設為其公開發布或宣布的最早時間。我們用黃色標記了具有公開可用模型檢查點的 LLM。由于圖表的篇幅限制,我們僅包含具有公開報道評估結果的 LLM。

圖 5:基于 LLaMA 的研究工作的演化圖。由于數量龐大,我們無法在圖中包含所有 LLaMA 變體,即使許多優秀的工作未被列出。為了支持增量更新,我們共享了該圖的源文件,并歡迎讀者通過在我們的 GitHub 頁面上提交拉取請求來添加所需的模型。
LLaMA 的發布極大地推動了 LLM 的研究進展。為了總結基于 LLaMA 的研究工作,我們在圖 5 中展示了一個簡短的演化圖。
LLaMA 模型家族。Meta AI 于 2023 年 2 月推出了 LLaMA 模型系列,包含四種規模(7B、13B、30B 和 65B)。自發布以來,LLaMA 吸引了研究和工業界的廣泛關注。LLaMA 模型在各種開放基準測試中取得了非常優異的性能,成為迄今為止最受歡迎的開源語言模型。大量研究人員通過指令微調或持續預訓練對 LLaMA 模型進行了擴展。特別是,由于計算成本相對較低,指令微調 LLaMA 已成為開發定制或專用模型的主要方法。

LLM 的應用
- LLM 在研究社區中的應用
- LLM 在經典 NLP 任務中的應用:詞級任務、句子級任務、序列標注任務、關系抽取任務和文本生成任務;
- LLM 在**信息檢索 (IR)**中的應用:LLM 作為 IR 模型和 LLM 增強的 IR 模型;
- LLM 在推薦系統中的應用:LLM 作為推薦模型、LLM 增強的推薦模型和 LLM 作為推薦模擬器;
- 多模態模型主要指能夠處理和整合來自輸入的各種模態信息(例如文本、圖像和音頻),并進一步在某些模態中生成相應輸出的模型;
- 知識圖譜 (KG) 增強的 LLM:檢索增強的 LLM 和協同增強的 LLM;
- LLM 在特定領域中的應用:醫療保健、教育、法律、金融、科學研究輔助、心理學和軟件開發。
4) 2024_OJ-CS_普刊_Training and Serving System of Foundation Models: A Comprehensive Survey
這篇綜述也是關于 LLM 訓推的,通信、存儲和計算,但整體缺少一些亮點。
摘抄:
- 微軟開發了一種稱為**零冗余優化(ZeRO)**的技術,作為 DeepSpeed 分布式訓練框架的核心。
- ZeRO 的核心思想是通過犧牲部分通信開銷來減少 GPU 內存占用。ZeRO 將模型參數、梯度和優化器狀態分成多個部分,每個 GPU 在訓練期間僅維護其中一部分,并在需要時通過 All-Gather 操作獲取其余部分。
- 在 ZeRO 的基礎上,ZeRO-Offload 利用異構深度學習訓練的思想,通過有效利用 CPU 內存來緩解 GPU 內存的壓力。它將模型參數分為兩部分:一部分參數保留在 GPU 內存中,用于前向和反向傳播中的高效計算;另一部分參數則卸載到 CPU 內存中,并在需要時訪問。
- 進一步推進這些概念,ZeRO-Infinity 與 ZeRO-Offload 類似,利用 GPU、CPU 和 NVMe 內存,在有限資源上訓練基礎模型,而無需代碼重構。在 ZeRO-Infinity 中,模型參數和梯度仍在 GPU 上計算,而優化器狀態和激活值則分別卸載到更適合的 NVMe 內存和 CPU 中。
5) 2025_大數據_T2刊_大模型時代下的存儲系統挑戰與技術發展
這篇綜述講了 LLM 訓推存儲系統,就是介紹的相關工作太少了,重點看看前兩章和訓練相關的內容吧~
摘抄:
- GPU 的存算資源具有強耦合的特點。在大模型訓練過程中,模型數據(如模型參數等)需存儲在高讀寫帶寬的 GPU 顯存中,以匹配高吞吐的計算資源。然而,GPU 的存儲資源增長與大模型存儲需求增長不匹配,這使得 GPU 的計算資源受存儲資源限制,導致其計算資源難以被充分利用。
圖表:

如圖2所示,大模型訓練主要包括前向傳播、反向傳播和參數更新 3 個階段。
- 首先,在前向傳播階段,訓練數據依次通過模型的各層進行計算,并產生激活量。激活量不僅作為下一層的輸入,還會被保存以供反向傳播使用。
- 其次,前向傳播結束后,計算結果與訓練數據的標簽比對,生成損失(即誤差)用于反向傳播。在反向傳播階段,誤差以與前向傳播相反的方向,與各層參數以及前向傳播中保存的該層激活量進行計算,并產生每一層參數對應的梯度。當某層的梯度計算完成后,其激活量可被釋放,而梯度數據需要被保留用于參數更新。
- 最后,在參數更新階段,優化器根據保存的梯度以及其自身的參數(如學習率、動量等)更新模型的參數。同時,優化器的內部參數也會根據當前的梯度信息進行更新。參數更新完成后,上一版本的模型參數、梯度數據以及優化器參數被釋放。
訓練模型會使用更新后的模型參數與新的訓練數據重復上述過程,逐步提升模型的性能。
大模型的訓練模式導致臨時數據使用率低,降低了 GPU 有限顯存空間的利用率。例如,
- 梯度數據需等待反向傳播計算結束后才被用于參數更新;
- 前向傳播時每一層計算得到的激活量需要在反向傳播計算后才能被釋放。
這些臨時數據會在產生較長時間后再次被使用,導致 GPU 有限的存儲資源長期被占用。

除顯存外,GPU 服務器里還有 DRAM、SSD 等其他的存儲介質,這些存儲介質的容量更大且價格更低,并且其擴展更加靈活,可以與 GPU 計算資源擴展解耦。在大模型訓練過程中使用 DRAM 或 SSD 可以支持更大規模的模型。
受限于鏈路帶寬或存儲介質的讀寫帶寬,GPU 讀寫 DRAM 與 SSD 的帶寬遠低于 GPU 讀寫顯存的帶寬。如表1所示,GPU 讀寫本地顯存的帶寬為 TB/s 級別,而 GPU 讀寫 DRAM 與 SSD 的帶寬為 10 GB/s 級別。然而,大模型訓練對數據的讀寫帶寬要求高,直接使用異構存儲介質會影響 GPU 的計算。
直接使用異構存儲介質會導致數據傳輸開銷遠高于計算開銷,使數據通信成為瓶頸,進而導致 GPU 計算資源無法被充分利用。
6) 2025_計算機學報_T1刊_面向深度學習的數據存儲技術綜述
這篇綜述主要在講 Storage for AI 這個話題,內容很全面,涉及深度學習訓練的多個環節。筆者重點關注“5.1 模型狀態存儲技術”一節關于內存交換和重計算相關的內容。
摘抄:
- 在過去的十幾年中,數據集規模呈現指數級增長,新的數據集越來越大。……隨著大模型的流行,模型的參數量越來越多,表達能力越來越強,需要的訓練數據還在不斷變大。
- 以 LLM 為例,模型參數規模平均每年增長 14.1 倍,而 GPU 等加速器的存儲容量平均每年僅增長 1.3 倍。
- 在模型訓練階段,預處理后的數據將被喂到模型中。該階段涉及大量的矩陣運算,通常在 GPU 等加速器中完成。具體來說,模型訓練可以劃分為三個步驟:
- ?前向傳播:即使用模型 f f f計算輸入數據的預測值;
- ?反向傳播:即根據輸入數據 x x x的預測值 y ′ y' y′、真實標簽 y y y和損失函數 L L L,計算每層中可學習參數 w w w的梯度值(Gradient);
- ?參數更新:即根據計算出的梯度值 Δ w \Delta w Δw,使用相應的優化器(Optimizer)來更新模型的參數值。
- 在執行訓練時,訓練任務并不會一次處理完所有的數據,而是每次處理部分數據。這稱為一個小批量或者小批次(mini-batch),通常包含 32-512 條數據。當一個小批量的所有數據均被處理完時,我們就稱執行了一次迭代(Iteration)。而當訓練集中的所有數據均被處理一次時,我們就稱完成了一輪訓練(Epoch)。一輪訓練包含多次迭代,而一個訓練任務通常會執行多輪訓練,比如 100 次。在達到指定的訓練輪數或者訓練損失的變化小于指定閾值之后,模型已經收斂,訓練過程結束。
- 隨著數據集規模和模型參數規模的不斷增長,使用單塊 GPU 來執行訓練,不僅耗時長、效率低,而且顯存容量也難以滿足模型參數的存儲需求。為了解決該問題,常見的做法是執行分布式訓練。
- 隨著算力的不斷提高,模型的參數規模也在不斷變大,從百億到千億,再到萬億,甚至百萬億。……此外,不同類型的大模型也相繼出現,例如,大語言模型、大視覺模型(Large Vision Models, LVMs)以及同時支持語言和視覺等的多模態大語言模型(Multi-Modal Large Language Models, MM-LLM)。
- 深度學習應用使用張量(Tensor)來表示數據。具體來說,
? 只包含一個數字的張量稱為 0 階張量,即標量;
? 由多個數字組成的數組是 1 階張量,即向量,例如,[0, 1, 2, 3];
? 由多個向量組成的數組是 2 階張量,即矩陣;
? 由多個矩陣組成的數組稱為 3 階張量;
? 由多個 3 階張量組成的數組就是 4 階張量,其余高階張量依次類推。
圖表:

數據集規模呈現指數級增長,但未經處理前,數據集主要由小文件組成。

隨著深度學習模型的參數量越來越多,模型參數、中間數據(包括梯度和激活數據等)以及優化器狀態等模型狀態的大小經常會超過 GPU 等加速器的存儲容量,該問題稱為內存墻。為了解決該問題,現有的研究提出了許多模型狀態存儲技術。
異構存儲優化:當前,GPU 顯存容量的增長速度遠遠低于模型參數規模的增長速度,簡單地聚合多塊 GPU 的顯存難以支持模型規模的持續增長。為了解決該問題,一些研究提出使用 DRAM(vDNN、SuperNeurons、SwapAdvisor、Capuchin、ZeRO-Offload)、非易失性內存(Non-volatile Memory, NVM)以及固態硬盤(Solid State Drive, SSD)(FlashNeuron、ZeRO-Infinity、StrongHold)等異構存儲來增強 GPU 的存儲容量,將部分模型狀態卸載到這些存儲設備中。
7) 2025_TCASI_C刊_A Survey: Collaborative Hardware and Software Design in the Era of Large Language Models
這篇綜述也比較全面,LLM 訓練和推理的內容都有,從硬件到軟件再到算法都有介紹,但訓練相關的內容稍微少了一些,更多還是在講推理,而且圖表比較少,閱讀的體驗感稍差。
摘抄:
- LLM 訓練可分為兩類:1)預訓練和 2)微調。預訓練需要大規模數據集、大量步驟和大批量大小,因此成本非常高。根據文獻報道,訓練一個 6000 億參數的模型可能需要超過 196,000 個 TPUv3 核心小時。更優化的模型則需要更高的訓練成本。研究表明,在 NVIDIA 80GB A100 GPU、400W 功耗的條件下,預訓練 Llama2-7B 需要超過 184,000 GPU 小時,而預訓練 Llama2-70B 則需要超過 1,720,000 小時。僅訓練 Llama2 所有四個變體的電力成本就約為 158,000 美元。相比之下,微調可以使用較小的數據集、較少的步驟和較小的批量大小來完成。
- 在 LLM 模型規模下,每步的計算時間和能耗都非常顯著。即使在這些領域取得微小的改進,也可能帶來巨大的成本節約和環境影響減少。
- 與性能和能耗挑戰相伴的是,LLMs 對硬件有更嚴格的要求。首先,它需要大容量內存。與推理階段僅存儲參數不同,訓練需要存儲參數、梯度、優化器狀態和激活值。
- 為了緩解大型模型訓練中對 GPU 內存的高需求,提出了**零冗余優化器(ZeRO)**及其后續工作。
- ZeRO 專注于減少 GPU 上數據的冗余副本,并提出了三個主要優化階段,分別對優化器狀態、梯度和參數進行分區。
- ZeRO-Offload 通過將優化器狀態和優化器更新卸載到 CPU,在可訪問性和效率之間取得平衡,從而支持更大模型的訓練。
- ZeRO-Infinity 認識到模型規模的增長速度遠快于 GPU 內存的增長速度,因此探索了更多以效率換取訓練超大模型能力的方法。除了之前的工作外,它還利用 NVMe 內存進行卸載以獲得更多存儲空間,并卸載參數、梯度和激活檢查點,因為隨著模型規模的增大,這些數據的大小已無法在 GPU 上容納。此外,它還管理算子以進一步減少緩沖區大小需求。
- ZeRO++ 回歸到 ZeRO 的設計,并更專注于大型 GPU 集群的通信效率。雖然卸載可以促進大模型的訓練,但它顯著增加了 GPU 和 CPU 之間的通信開銷。這是因為這些組件之間的連接(例如大多數系統中的 PCIe)通常提供的帶寬有限,與 GPU 的峰值性能和內存帶寬相比,這一瓶頸可能導致訓練過程中的顯著減速。
- 重計算是一種用于訓練 LLMs 的技術,通過犧牲計算資源來更高效地管理內存使用。在前向傳播過程中,僅存儲一部分中間激活值,其選擇基于一種策略,旨在最小化內存使用,同時保持可管理的計算開銷。在反向傳播過程中,未存儲的必要中間激活值會從之前存儲的激活值中動態重新計算。通過將重新計算的激活值與存儲的激活值結合,可以實現更新模型參數所需的梯度計算。重計算顯著減少了內存使用,使得在不超出硬件內存限制的情況下訓練更大模型或使用更大批量大小成為可能。主要的代價是由于重新計算而增加的計算成本,但這通常是可接受的,因為能夠訓練更復雜的模型。
- LLM 訓練和微調需要大量的計算資源。傳統的 CPU 雖然功能多樣,但往往無法滿足 LLM 大規模并行處理的需求。這促使人們采用并創新了專門設計的硬件加速器,以提高訓練和微調過程的效率和速度。……GPU(圖形處理單元)已成為現代深度學習基礎設施的基石。最初設計用于圖形渲染,其高度并行的架構使其非常適合神經網絡訓練中基礎的矩陣和張量運算。與 CPU 相比,如 NVIDIA 的 A100 和 H100 等 GPU 在訓練時間上提供了顯著的加速,使其成為學術研究和工業應用的熱門選擇。
圖表:

表1. 對于一個具有 N 參數和批量大小為 B 的模型,訓練中涉及的每種數據類型的大小。x 是一個依賴于模型架構的變量。