那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹大模型高效訓練所需要的主要技術

深度學習自然語言處理 ? 來源:RUC AI Box ? 作者:陳昱碩 ? 2022-11-08 09:57 ? 次閱讀

本文分為三部分介紹了大模型高效訓練所需要的主要技術,并展示當前較為流行的訓練加速庫的統計。

引言:隨著BERT、GPT等預訓練模型取得成功,預訓-微調范式已經被運用在自然語言處理、計算機視覺、多模態語言模型等多種場景,越來越多的預訓練模型取得了優異的效果。為了提高預訓練模型的泛化能力,近年來預訓練模型的一個趨勢是參數量在快速增大,目前已經到達萬億規模。

但如此大的參數量會使得模型訓練變得十分困難,于是不少的相關研究者和機構對此提出了許多大模型高效訓練的技術。本文將分為三部分來介紹大模型高效訓練所需要的主要技術:并行訓練技術、顯存優化技術和其他技術。文章最后會展示當前較為流行的訓練加速庫的統計。歡迎大家批評指正,相互交流。

29a2d9ac-5e9c-11ed-8abf-dac502259ad0.png

預訓練模型參數量增長趨勢

一、并行訓練技術:

并行訓練技術主要是如何使用多塊顯卡并行訓練模型,主要可以分為三種并行方式:數據并行(Data Parallel)、張量并行(Tensor Parallel)和流水線并行(Pipeline Parallel)。

數據并行(Data Parallel)

數據并行是目前最為常見和基礎的并行方式。這種并行方式的核心思想是對輸入數據按 batch 維度進行劃分,將數據分配給不同GPU進行計算。

在數據并行里,每個GPU上存儲的模型、優化器狀態是完全相同的。當每塊GPU上的前后向傳播完成后,需要將每塊GPU上計算出的模型梯度匯總求平均,以得到整個batch的模型梯度。

29d30b90-5e9c-11ed-8abf-dac502259ad0.png

數據并行(圖片來自 Colossal-AI 的文檔)

目前 PyTorch 已經支持了數據并行 [1]:

https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html

張量并行(Tensor Parallel)

在訓練大模型的時候,通常一塊GPU無法儲存一個完整的模型。張量并行便是一種使用多塊GPU存儲模型的方法。

與數據并行不同的是,張量并行是針對模型中的張量進行拆分,將其放置到不同的GPU上。比如說對于模型中某一個線性變換Y=AX,對于矩陣A有按列拆解和按行拆解兩種方式:

29e8be7c-5e9c-11ed-8abf-dac502259ad0.png

我們可以將矩陣A1A2分別放置到兩塊不同的GPU上,讓兩塊GPU分別計算兩部分矩陣乘法,最后再在兩張卡之間進行通信便能得到最終的結果。

同理也可以將這種方法推廣到更多的GPU上,以及其他能夠拆分的算子上。

下圖是Megatron-LM[2] 在計算 MLP 的并行過程,它同時采用了這兩種并行方式:

29feea12-5e9c-11ed-8abf-dac502259ad0.jpg

整個MLP的輸入X先會復制到兩塊GPU上,然后對于矩陣A采取上面提到的按列劃分的方式,在兩塊GPU上分別計算出第一部分的輸出Y1Y2

接下來的 Dropout 部分的輸入由于已經按列劃分了,所以對于矩陣B則采取按行劃分的方式,在兩塊GPU上分別計算出Z1Z2。最后在兩塊GPU上的Z1Z2做All-Reduce來得到最終的Z

以上方法是對矩陣的一維進行拆分,事實上這種拆分方法還可以擴展到二維甚至更高的維度上。在Colossal-AI中,他們實現了更高維度的張量并行:

https://arxiv.org/abs/2104.05343 https://arxiv.org/abs/2105.14500 https://arxiv.org/abs/2105.14450

對于序列數據,尤洋團隊還提出了Sequence Parallel來實現并行:

https://arxiv.org/abs/2105.13120

流水線并行(Pipeline Parallel)

和張量并行類似,流水線并行也是將模型分解放置到不同的GPU上,以解決單塊GPU無法儲存模型的問題。和張量并行不同的地方在于,流水線并行是按層將模型存儲的不同的GPU上。

比如以Transformer為例,流水線并行是將連續的若干層放置進一塊GPU內,然后在前向傳播的過程中便按照順序依次計算hidden state。反向傳播也類似。下圖便是流水線并行的示例:

2a0c06b6-5e9c-11ed-8abf-dac502259ad0.png

但樸素的流水線并行實現會導致GPU使用率過低(因為每塊GPU都要等待之前的GPU計算完畢才能開始計算),使流水線中充滿氣泡,如下圖所示:

2a18c856-5e9c-11ed-8abf-dac502259ad0.png

有兩種比較經典的減少氣泡的流水線并行算法:GPipe[7] 和PipeDream[8]

GPipe 方法的核心思想便是輸入的minibatch劃分成更小的 micro-batch,讓流水線依次處理多個 micro batch,達到填充流水線的目的,進而減少氣泡。GPipe 方法的流水線如下所示:

2a3136e8-5e9c-11ed-8abf-dac502259ad0.png

PipeDream 解決流水線氣泡問題的方法則不一樣,它采取了類似異步梯度更新的策略,即計算出當前 GPU 上模型權重的梯度后就立刻更新,無需等待整個梯度回傳完畢。相較于傳統的梯度更新公式:

2a573f5a-5e9c-11ed-8abf-dac502259ad0.png

PipeDream 的更新公式為:

2a653f92-5e9c-11ed-8abf-dac502259ad0.png

由于這種更新方式會導致模型每一層使用的參數更新步數不一樣多,PipeDream 對上述方法也做出了一些改進,即模型每次前向傳播時,按照更新次數最少的權重的更新次數來算,即公式變為:

2a7c79be-5e9c-11ed-8abf-dac502259ad0.png

PipeDream 方法的流水線如下所示:

2a89b5fc-5e9c-11ed-8abf-dac502259ad0.png

對比總結

下面是對這三種并行技術從通用性、計算效率、顯存開銷和通信量這幾個方面進行對比。

可以看出數據并行的優勢在于通用性強且計算效率、通信效率較高,缺點在于顯存總開銷比較大;而張量并行的優點是顯存效率較高,缺點主要是需要引入額外的通信開銷以及通用性不是特別好;流水線并行的優點除了顯存效率較高以外,且相比于張量并行的通信開銷要小一些,但主要缺點是流水線中存在氣泡。

2a989d9c-5e9c-11ed-8abf-dac502259ad0.png

二、顯存優化技術:

在模型訓練的過程中,顯存主要可以分為兩大部分:常駐的模型及其優化器參數,和模型前向傳播過程中的激活值。顯存優化技術主要是通過減少數據冗余、以算代存和壓縮數據表示等方法來降低上述兩部分變量的顯存使用量,大致可分為四大類:ZeRO技術、Offload技術、checkpoint技術以及一些節約顯存的優化器。

ZeRO 技術

ZeRO[9] 技術是微軟的 DeepSpeed 團隊解決數據并行的中存在的內存冗余問題所提出的解決方法。常駐在每塊GPU上的數據可以分為三部分:模型參數,模型梯度和優化器參數。注意到由于每張 GPU 上都存儲著完全相同的上述三部分參數,我們可以考慮每張卡上僅保留部分數據,其余的可以從其他 GPU 上獲取。

即假如有N張卡,我們可以讓每張卡上只保存其中1/N的參數,需要的時候再從其他 GPU 上獲取。ZeRO 技術便是分別考慮了上述三部分參數分開存儲的情況,下圖中的PosPos+gPos+g+p就分別對應著將優化器參數分開存儲、將優化器參數和模型梯度分開存儲以及三部分參數都分開存儲三種情況。

論文里不僅分析了三種情況可以節省的內存情況,還分析出了前兩種優化方法不會增加通信開銷,第三種情況的通信開銷只會增加50%。

2aa5d552-5e9c-11ed-8abf-dac502259ad0.png

目前Pytorch也已經支持了類似的技術:

https://engineering.fb.com/2021/07/15/open-source/fsdp/ https://pytorch.org/docs/stable/fsdp.html

Offload 技術

ZeRO-Offload[10] 技術主要思想是將部分訓練階段的模型狀態 offload 到內存,讓 CPU 參與部分計算任務。

為了避免 GPU 和 CPU 之間的通信開銷,以及 CPU 本身計算效率低于 GPU 這兩個問題的影響。Offload 的作者在分析了 adam 優化器在 fp16 模式下的運算流程后,考慮只將模型更新的部分下放至 CPU 計算,即讓 CPU 充當 Parameter Server 的角色。如下圖所示:

2aba0db0-5e9c-11ed-8abf-dac502259ad0.png

同時為了提高效率,Offload 的作者提出可以將通信和計算的過程并行起來,以降低通信對整個計算流程的影響。

具體來說,GPU 在反向傳播階段,可以待梯度值填滿bucket后,一邊計算新的梯度一邊將bucket傳輸給CPU;當反向傳播結束,CPU基本上獲取了最新的梯度值。同樣的,CPU在參數更新時也同步將已經計算好的參數傳給GPU,如下圖所示:

2ad5942c-5e9c-11ed-8abf-dac502259ad0.png

最后作者也分析了多卡的情況,證明了他提出的方案具有可擴展性。

Checkpoint 技術

在模型前向傳播的過程中,為了反向傳播計算梯度的需要,通常需要保留一些中間變量。例如對于矩陣乘法

2b064aa4-5e9c-11ed-8abf-dac502259ad0.png

AB的梯度計算公式如下所示

2b150f4e-5e9c-11ed-8abf-dac502259ad0.png

可以看出要想計算AB的梯度就必須在計算過程中保留AB本身。這部分為了反向傳播所保留的變量會占用不小的空間。Checkpoint技術的核心是只保留checkpoint點的激活值,checkpoint點之間的激活值則在反向傳播的時候重新通過前向進行計算。可以看出,這是一個以算代存的折中方法。最早是陳天奇將這個技術引入機器學習中 [11]:

https://arxiv.org/abs/1604.06174

目前該方法也以及被 PyTorch 所支持。

https://pytorch.org/docs/stable/checkpoint.html

節約顯存的優化器

比較早期的工作是如Adafactor[12] 主要是針對 Adam 進行優化的,它取消了 Adam 中的動量項,并使用矩陣分解方法將動量方差項分解成兩個低階矩陣相乘來近似實現 Adam 的自適應學習率功能。

后來也有使用低精度量化方式存儲優化器狀態的優化器,如8 bit Optimizer[13],核心思想是將優化器狀態量化至 8 bit 的空間,并通過動態的浮點數表示來降低量化的誤差。還有更加激進的使用 1 bit 量化優化器的方法,如1-bit Adam[14] 和1-bit LAMB[15]。他們主要是使用壓縮補償方法的來減少低精度量化對模型訓練的影響。

三、其他優化技術:

大批量優化器

在目前模型訓練的過程中,直接使用大批量的訓練方式可能導致模型訓練不穩定。最早有 Facebook 的研究[16] 表明,通過線性調整學習率,并配合 warmup 等輔助手段,讓學習率隨 batch 的增大而線性增大,即可在ResNet-50上將 batch size 增大至 8K 時仍不影響模型性能。

但該方法在 AlexNet 等網絡失效,在LARS[17] 優化器這篇論文中,作者尤洋在實驗中發現不同層的權值和其梯度的 2 范數的比值差異很大,據此基于帶動量的SGD優化器提出LARS優化器。核心算法如下圖所示:

2b2834a2-5e9c-11ed-8abf-dac502259ad0.png

基于以上的思路,尤洋將上述方法擴展到Adam優化器,提出了LAMB[18] 優化器:

2b35743c-5e9c-11ed-8abf-dac502259ad0.png

FP16

FP16[19] 基本原理是將原本的32位浮點數運算轉為16位浮點數運算。一方面可以降低顯存使用,另一方面在 NVIDIA 的顯卡上 fp16 的計算單元比 fp32 的計算單元多,可以提升計算效率。在實際的訓練過程中,為了保證實際運算過程中的精度,一般還會配合動態放縮技術。目前的主流框架都已實現該功能。

算子融合

算子融合實際上是將若干個 CUDA 上的運算合成一個運算,本質上是減少了 CUDA 上的顯存讀寫次數。舉個例子,對于一個線性層 + batch norm + activation 這個組合操作來說:

2b529b48-5e9c-11ed-8abf-dac502259ad0.png

直接使用 PyTorch 實現的會在計算y1,y2,y3的過程中分別產生一次顯存的讀和寫操作,即3次讀和寫。如果將其按下面的公式合并成一個算子進行計算,那么中間的結果可以保留在 GPU 上的寄存器或緩存中,從而將顯存讀寫次數降低至1次。

2b6f8b68-5e9c-11ed-8abf-dac502259ad0.png

目前 PyTorch 可以使用 torch.jit.script 來將函數或 nn.Module 轉化成 TorchScript 代碼,從而實現算子融合。

https://pytorch.org/docs/stable/generated/torch.jit.script.html

設備通信算法

在之前介紹的模型分布式訓練中,通常需要在不同 GPU 之間傳輸變量。在 PyTorch 的 DataParallel 中,使用的是Parameter Server架構,即存在一個中心來匯總和分發數據:

2b8043fe-5e9c-11ed-8abf-dac502259ad0.png

但上述方式的缺點是會導致 Parameter Server 成為通信瓶頸。之后PyTorch的Distributed DataParallel則使用了Ring All-Reduce[20] 方法,將不同的GPU構成環形結構,每個GPU只用與環上的鄰居進行通信:

2b8f3904-5e9c-11ed-8abf-dac502259ad0.png

稀疏attention

稀疏Attention技術最開始是運用在長序列的Transformer建模上的,但同時也能有效的降低模型計算的強度。稀疏Attention主要方法可以分為以下五類 [21]:

2b9e74be-5e9c-11ed-8abf-dac502259ad0.png

目前DeepSpeed已經集成了這個功能:

https://www.deepspeed.ai/tutorials/sparse-attention/

自動并行

目前并行訓練技術在大模型訓練中已被廣泛使用,通常是會將前面介紹的三種并行方法結合起來一起使用,被稱之為 3D 并行。

但這些并行方式都有不少的訓練超參數,之前的一些研究者是使用手動的方式來設置這些超參數。目前也出現了不少自適應的方法來設置超參數,被稱為自動并行技術。

這些方法包括動態規劃、蒙特卡洛方法、強化學習等。下面的 GitHub 倉庫整理了一些自動并行的代碼和論文:

https://github.com/ConnollyLeon/awesome-Auto-Parallelism

四、訓練加速庫概覽

下面是本人對當下比較流行的訓練加速庫的統計,可供大家進行參考。

2bceabde-5e9c-11ed-8abf-dac502259ad0.png





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4774

    瀏覽量

    129350
  • GPT
    GPT
    +關注

    關注

    0

    文章

    360

    瀏覽量

    15505
  • MLP
    MLP
    +關注

    關注

    0

    文章

    57

    瀏覽量

    4287
  • 大模型
    +關注

    關注

    2

    文章

    2545

    瀏覽量

    3163

原文標題:Huge and Efficient! 一文了解大規模預訓練模型高效訓練技術

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在SAM時代下打造高效的高性能計算大模型訓練平臺

    在一起,從而顯著提升模型的泛化能力。SAM 的設計初衷是簡化圖像分割的過程,減少對專業建模知識的依賴,并降低大規模訓練所需的計算資源。
    的頭像 發表于 08-21 04:02 ?2567次閱讀
    如何在SAM時代下打造<b class='flag-5'>高效</b>的高性能計算大<b class='flag-5'>模型</b><b class='flag-5'>訓練</b>平臺

    芯耀輝DDR PHY訓練技術簡介

    DDR接口速率越來越高,每一代產品都在挑戰工藝的極限,對DDR PHY的訓練要求也越來越嚴格。本文從新銳IP企業芯耀輝的角度,談談DDR PHY訓練所面臨的挑戰,介紹芯耀輝DDR PHY訓練
    的頭像 發表于 01-05 10:27 ?1719次閱讀
    芯耀輝DDR PHY<b class='flag-5'>訓練</b><b class='flag-5'>技術</b>簡介

    【大語言模型:原理與工程實踐】核心技術綜述

    我也不打算把網上相關的信息在總結一下,這樣的話,工作量很大。 我主要看了-大語言模型基礎技術這節 大語言模型(Large Language Models,LLMs)的核心
    發表于 05-05 10:56

    【大語言模型:原理與工程實踐】大語言模型的基礎技術

    全面剖析大語言模型的核心技術與基礎知識。首先,概述自然語言的基本表示,這是理解大語言模型技術的前提。接著,詳細介紹自然語言處理預
    發表于 05-05 12:17

    【大語言模型:原理與工程實踐】大語言模型的預訓練

    訓練數據時,數量、質量和多樣性三者缺一不可。 數據的多樣性對于大語言模型至關重要,這主要體現在數據的類別和來源兩個方面。豐富的數據類別能夠提供多樣的語言表達特征,如官方知識型數據、口語化表達的論壇
    發表于 05-07 17:10

    Pytorch模型訓練實用PDF教程【中文】

    本教程以實際應用、工程開發為目的,著重介紹模型訓練過程中遇到的實際問題和方法。在機器學習模型開發中,主要涉及三大部分,分別是數據、
    發表于 12-21 09:18

    醫療模型訓練系統是什么?

    醫療模型訓練系統是為滿足廣大醫學生的需要而設計的。我國現代醫療模擬技術的發展處于剛剛起步階段,大部分仿真系統產品都源于國外,雖然對于模擬人仿真已經出現一些產品,但那些產品只是就模擬人
    發表于 08-19 08:32

    如何進行高效的時序圖神經網絡的訓練

    訓練過程與數據傳輸過程進行流水線化處理。具體來說,我們將GPU的顯存劃分為三部分:第一部分存儲固定的數據(神經網絡參數以及源點的特征向量),第二部分存儲當前神經網絡訓練所需的數據( 包括邊數據和匯點
    發表于 09-28 10:37

    基于速度追蹤原理實現目標模擬訓練系統的設計

    軍隊靶場訓練基地用于跟蹤高速運動目標的主要手段是光電跟瞄設備。對于光電跟瞄系統而言,操作訓練需要外部目標環境的緊密配合,因此,訓練所需的目標
    的頭像 發表于 08-13 09:04 ?2802次閱讀
    基于速度追蹤原理實現目標模擬<b class='flag-5'>訓練</b>系統的設計

    探究超大Transformer語言模型的分布式訓練框架

    模型的預訓練計算。 上篇主要介紹了大模型訓練的發展趨勢、NVIDIA Megatron的
    的頭像 發表于 10-20 09:25 ?2500次閱讀

    DGX SuperPOD助力助力織女模型高效訓練

      “強悍的織女模型在京東探索研究院建設的全國首個基于 DGX SuperPOD 架構的超大規模計算集群 “天琴α” 上完成訓練,該集群具有全球領先的大規模分布式并行訓練技術,其近似線
    的頭像 發表于 04-13 15:13 ?1083次閱讀

    深度學習如何訓練出好的模型

    算法工程、數據派THU深度學習在近年來得到了廣泛的應用,從圖像識別、語音識別到自然語言處理等領域都有了卓越的表現。但是,要訓練出一個高效準確的深度學習模型并不容易。不僅需要有高質量的數
    的頭像 發表于 12-07 12:38 ?1175次閱讀
    深度學習如何<b class='flag-5'>訓練</b>出好的<b class='flag-5'>模型</b>

    人臉識別模型訓練流程

    人臉識別模型訓練流程是計算機視覺領域中的一項重要技術。本文將詳細介紹人臉識別模型訓練流程,包括
    的頭像 發表于 07-04 09:19 ?1128次閱讀

    ai模型訓練需要什么配置

    AI模型訓練是一個復雜且資源密集的過程,它依賴于高性能的硬件配置來確保訓練的效率和效果。 一、處理器(CPU) CPU是計算機的核心部件,負責處理各種計算任務。在AI模型
    的頭像 發表于 10-17 18:10 ?1914次閱讀

    訓練AI大模型需要什么樣的gpu

    訓練AI大模型需要選擇具有強大計算能力、足夠顯存、高效帶寬、良好散熱和能效比以及良好兼容性和擴展性的GPU。在選擇時,需要根據具體需求進行權
    的頭像 發表于 12-03 10:10 ?204次閱讀
    sz新全讯网网址2290| 巴黎百家乐官网地址| 大发888游戏平台df888| 百家乐娱乐网会员注册| 专业百家乐分析| 百家乐官网百家乐官网视频游戏世界 | 百家乐平玩法lm0| 德晋百家乐官网的玩法技巧和规则| 娱乐城百家乐官网打不开| 皇冠国际现金投注网| 澳门百家乐门路| 做生意店铺风水好吗| 芝加哥百家乐官网的玩法技巧和规则 | 百家乐玩法说明| 玩百家乐官网怎么能赢呢| 贵族百家乐官网的玩法技巧和规则| 百家乐官网大轮转| 百家乐官网技巧-百家乐官网开户指定代理网址 | 澳门百家乐几副牌| 真钱百家乐哪里最好| 百家乐扑克桌| 百家乐五式缆投法| 新澳博百家乐现金网| 百家乐最佳注码法| 百家乐分析仪有真的吗| 百家乐真人斗地主| 百家乐网页游戏| 大发888官方中文网址| 大发888线上娱乐| 单机棋牌游戏下载| 博雅德州扑克| 百家乐官网的路怎样看| 百家乐官网21点| 百家乐官网2号死机| 百家百家乐官网视频游戏世界| 属龙人与属虎人做生意| 百家乐庄闲局部失| 威尼斯人娱乐城网上赌场| 单机棋牌游戏| 泸定县| 百家乐官网8点|