閱讀本文之前,建議先閱讀上一篇:什么是神經(jīng)網(wǎng)絡(luò)?
本文由gpt4輔助撰寫(gptschools.cn)
什么是大模型?
模型是指具有大量參數(shù)的深度學(xué)習(xí)或機(jī)器學(xué)習(xí)模型,這些參數(shù)可以通過訓(xùn)練過程自動(dòng)調(diào)整以捕獲輸入數(shù)據(jù)中的復(fù)雜關(guān)系。這類模型通常具有較深的網(wǎng)絡(luò)結(jié)構(gòu)和較多的神經(jīng)元,以增加模型的表示能力和學(xué)習(xí)能力。大模型在諸如自然語言處理、計(jì)算機(jī)視覺和語音識(shí)別等領(lǐng)域取得了顯著的成果。
【資料圖】
大模型使用了許多高級(jí)技術(shù),主要包括以下幾個(gè)方面:
- 深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNNs):大模型通常采用深度神經(jīng)網(wǎng)絡(luò),擁有多個(gè)隱藏層,以捕捉輸入數(shù)據(jù)中的高階特征和抽象概念。
- 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNNs):在計(jì)算機(jī)視覺任務(wù)中,大模型通常采用卷積神經(jīng)網(wǎng)絡(luò)。通過局部感受野、權(quán)值共享和池化操作等設(shè)計(jì),CNN可以有效處理圖像數(shù)據(jù),提取多尺度的視覺特征。
- 循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNNs)和長短時(shí)記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM):在序列數(shù)據(jù)處理任務(wù)(如自然語言處理和語音識(shí)別)中,大模型可能采用循環(huán)神經(jīng)網(wǎng)絡(luò)或其變體(如長短時(shí)記憶網(wǎng)絡(luò))來捕捉時(shí)序關(guān)系。
- Transformer 架構(gòu):Transformer 是一種自注意力機(jī)制(Self-Attention Mechanism)的神經(jīng)網(wǎng)絡(luò)架構(gòu),廣泛應(yīng)用于自然語言處理領(lǐng)域的大模型中。Transformer 可以并行處理輸入序列中的所有元素,大幅提高了模型的訓(xùn)練效率。
- 預(yù)訓(xùn)練與微調(diào)(Pretraining and Fine-tuning):為了充分利用大量參數(shù),大模型通常先在大規(guī)模數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,學(xué)到通用的特征表示。然后,在特定任務(wù)的數(shù)據(jù)集上進(jìn)行微調(diào),以適應(yīng)特定應(yīng)用場景。
- 分布式訓(xùn)練(Distributed Training)和混合精度訓(xùn)練(Mixed Precision Training):為了處理大模型的計(jì)算和存儲(chǔ)需求,研究者采用了一些高效訓(xùn)練策略,如分布式訓(xùn)練(將模型和數(shù)據(jù)分布在多個(gè)設(shè)備或節(jié)點(diǎn)上進(jìn)行并行計(jì)算)和混合精度訓(xùn)練(利用不同精度的數(shù)值表示以減少計(jì)算和內(nèi)存資源需求)。
這些技術(shù)和策略共同支持了大模型的開發(fā)和應(yīng)用,使其在各種復(fù)雜任務(wù)中取得了出色的性能。然而,大模型也帶來了訓(xùn)練成本、計(jì)算資源和數(shù)據(jù)隱私等方面的挑戰(zhàn)。
什么是大模型的參數(shù)?
模型參數(shù)是指在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型中可學(xué)習(xí)的權(quán)重和偏置等變量。在訓(xùn)練過程中,通過優(yōu)化算法(如梯度下降)來調(diào)整這些參數(shù),以最小化模型預(yù)測值與實(shí)際值之間的差距。參數(shù)的初始值通常是隨機(jī)的,隨著訓(xùn)練的進(jìn)行,它們會(huì)逐漸收斂到合適的數(shù)值,以捕捉輸入數(shù)據(jù)中的復(fù)雜模式與關(guān)系。
在大模型中,參數(shù)的數(shù)量通常非常龐大。舉個(gè)例子,OpenAI的GPT-3模型擁有約1750億個(gè)參數(shù),使其能夠執(zhí)行更復(fù)雜的任務(wù),如自然語言生成、翻譯、摘要等。大量參數(shù)使模型具有更強(qiáng)的表示能力,但同時(shí)也帶來了更高的計(jì)算成本和內(nèi)存需求。這也是為什么大模型通常需要特殊的硬件資源(如GPU或TPU)和優(yōu)化策略(如分布式訓(xùn)練和混合精度訓(xùn)練)來進(jìn)行有效訓(xùn)練的原因。
以一個(gè)簡單的深度學(xué)習(xí)模型為例:多層感知機(jī)(MLP,Multilayer Perceptron)。多層感知機(jī)是一種前饋神經(jīng)網(wǎng)絡(luò),由輸入層、若干隱藏層和輸出層組成。每層都包含若干個(gè)神經(jīng)元,相鄰層之間的神經(jīng)元通過權(quán)重矩陣相互連接。
假設(shè)我們的多層感知機(jī)有以下結(jié)構(gòu):
- 輸入層:2個(gè)神經(jīng)元(對應(yīng)2個(gè)特征)
- 隱藏層:第一層3個(gè)神經(jīng)元,第二層2個(gè)神經(jīng)元
- 輸出層:1個(gè)神經(jīng)元
權(quán)重矩陣參數(shù)如下:
- 首先是輸入層到第一隱藏層的權(quán)重矩陣,其形狀為(2, 3),共有2 * 3 = 6個(gè)權(quán)重參數(shù)。
- 接著是第一隱藏層到第二隱藏層的權(quán)重矩陣,其形狀為(3, 2),共有3 * 2 = 6個(gè)權(quán)重參數(shù)。
- 最后是第二隱藏層到輸出層的權(quán)重矩陣,其形狀為(2, 1),共有2 * 1 = 2個(gè)權(quán)重參數(shù)。
偏置參數(shù)如下:
- 第一隱藏層有3個(gè)神經(jīng)元,因此有3個(gè)偏置參數(shù)。
- 第二隱藏層有2個(gè)神經(jīng)元,因此有2個(gè)偏置參數(shù)。
- 輸出層有1個(gè)神經(jīng)元,因此有1個(gè)偏置參數(shù)。
將所有權(quán)重參數(shù)與偏置參數(shù)相加,該多層感知機(jī)共有6 + 6 + 2 + 3 + 2 + 1 = 20個(gè)參數(shù)。這是一個(gè)相對較小的模型。對于大模型,如GPT-3,參數(shù)數(shù)量可能達(dá)到數(shù)百億,這使得它們能夠表達(dá)更復(fù)雜的函數(shù)并執(zhí)行更高級(jí)的任務(wù)。
大模型使用哪些并行訓(xùn)練方法?
大模型采用分布式訓(xùn)練方法來提高訓(xùn)練速度和擴(kuò)展性。大體可以分為兩類:數(shù)據(jù)并行與模型并行。
數(shù)據(jù)并行
數(shù)據(jù)并行(Data Parallelism):在這種方法中,模型分布在多個(gè)計(jì)算設(shè)備(如 GPU 或 TPU)上。每個(gè)設(shè)備都有模型的一個(gè)副本,但訓(xùn)練數(shù)據(jù)會(huì)被劃分為不同的子集。每個(gè)設(shè)備使用其所分配的數(shù)據(jù)子集訓(xùn)練模型副本,然后通過通信協(xié)議(如 AllReduce 操作)同步梯度更新。
模型并行
模型并行(Model Parallelism):在模型并行中,模型被分割成多個(gè)部分,每個(gè)部分在單獨(dú)的計(jì)算設(shè)備上運(yùn)行。這種方法適用于無法放入單個(gè)設(shè)備內(nèi)存的大型模型。當(dāng)參數(shù)規(guī)模為千億時(shí),存儲(chǔ)模型參數(shù)就需要數(shù)百GB的顯存空間,超出單個(gè)GPU卡的顯存容量。顯然,僅靠數(shù)據(jù)并行無法滿足超大規(guī)模模型訓(xùn)練對于顯存的需求。為了解決這個(gè)問題,可以采用模型并行技術(shù)。在每個(gè)訓(xùn)練迭代中,設(shè)備間需要交換中間計(jì)算結(jié)果以完成前向和反向傳播過程。模型并行從計(jì)算圖的切分角度,可以分為以下幾種:
流水線并行
流水線并行(Pipeline Parallelism):將模型的不同層劃分到多個(gè)計(jì)算設(shè)備上,每個(gè)設(shè)備負(fù)責(zé)處理一部分模型層,即層間并行。在前向和反向傳播過程中,設(shè)備之間需要傳遞中間計(jì)算結(jié)果。這種方法的優(yōu)勢是可以同時(shí)處理多個(gè)輸入樣本,從而提高計(jì)算設(shè)備的利用率。
張量并行
張量并行(Tensor Parallelism):將計(jì)算圖中的層內(nèi)的參數(shù)切分到不同設(shè)備,即層內(nèi)并行,稱之為張量模型并行。以一般的矩陣乘法為例,假設(shè)我們有 C = AB。我們可以將B沿著列分割成 [B0 B1 B2 ... Bn],每個(gè)設(shè)備持有一列。然后我們將 A 與每個(gè)設(shè)備上 B 中的每一列相乘,我們將得到 [AB0 AB1 AB2 ... ABn] 。此刻,每個(gè)設(shè)備仍然持有一部分的結(jié)果,例如,設(shè)備(rank=0)持有 AB0。為了確保結(jié)果的正確性,我們需要收集全部的結(jié)果,并沿列維串聯(lián)張量。通過這種方式,我們能夠?qū)埩糠植荚谠O(shè)備上,同時(shí)確保計(jì)算流程保持正確。張量并行過程如下圖所示:
并行訓(xùn)練使用的通信原語?
上述并行訓(xùn)練方法通常使用了以下通信原語:
數(shù)據(jù)并行-通信原語
- AllReduce:AllReduce 是一種將所有參與者的數(shù)據(jù)匯總起來并將結(jié)果廣播回所有參與者的通信原語。在數(shù)據(jù)并行訓(xùn)練中,AllReduce 用于在計(jì)算設(shè)備之間同步權(quán)重梯度更新。常用的 AllReduce 實(shí)現(xiàn)有 NVIDIA NCCL、Intel MPI、OpenMPI 等。
- AllGather:AllGather 是將每個(gè)設(shè)備的數(shù)據(jù)收集在一起,并將結(jié)果發(fā)送到所有設(shè)備。這在某些數(shù)據(jù)并行任務(wù)中可能會(huì)用到,例如將不同設(shè)備產(chǎn)生的激活值或梯度拼接起來。
模型并行-通信原語
- Send/Recv 或 Point-to-Point Communication:這種原語用于在模型并行訓(xùn)練中將中間結(jié)果或梯度從一個(gè)設(shè)備傳遞到另一個(gè)設(shè)備。例如,在 Transformer 等自注意力機(jī)制的模型中,需要在計(jì)算設(shè)備之間傳遞中間張量。
- Collective Communication:這些原語(如 AllReduce、AllGather、Broadcast 等)也可能在模型并行中用到,例如在訓(xùn)練開始時(shí)同步模型參數(shù)或在訓(xùn)練過程中對某些梯度進(jìn)行匯總。
- Send/Recv 或 Point-to-Point Communication:管道并行訓(xùn)練中,每個(gè)設(shè)備負(fù)責(zé)處理模型的一個(gè)部分,因此需要將中間結(jié)果(如激活值)傳遞給下一個(gè)設(shè)備。這通常通過 Send/Recv 或其他點(diǎn)對點(diǎn)通信原語來實(shí)現(xiàn)。
- Barrier:在管道并行中,某些情況下可能需要使用 Barrier 同步操作,以確保設(shè)備之間能夠按順序處理數(shù)據(jù)。這有助于避免死鎖和數(shù)據(jù)不一致的問題。
AI Advisor 微信公眾號(hào)
參考
- 猛猿:ChatGPT技術(shù)解析系列之:GPT1、GPT2與GPT3
- 常見的分布式并行策略
- 張量模型并行詳解 | 深度學(xué)習(xí)分布式訓(xùn)練專題
關(guān)鍵詞:

營業(yè)執(zhí)照公示信息