第7章 分布式訓(xùn)練_第1頁
第7章 分布式訓(xùn)練_第2頁
第7章 分布式訓(xùn)練_第3頁
第7章 分布式訓(xùn)練_第4頁
第7章 分布式訓(xùn)練_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

浙江省普通本科高校“十四五”重點(diǎn)教材大語言模型通識(shí)大語言模型通識(shí)周蘇教授QQ:81505050第7章分布式訓(xùn)練大語言模型的模型參數(shù)量和所需訓(xùn)練數(shù)據(jù)量的規(guī)模在過去幾年里每年持續(xù)急速增長,更大的模型進(jìn)一步提升效果,同時(shí)也展現(xiàn)出一些很有益的特性,比如解決多種不同類型的任務(wù)等。訓(xùn)練巨大的模型必然需要底層基礎(chǔ)軟件和芯片的支撐。單個(gè)機(jī)器有限的資源已無法滿足訓(xùn)練的要求,擔(dān)綱此重任的GPU在過去幾年中無論是顯存空間,或是算力增長,都在10倍數(shù)量級(jí),顯然跟不上10000倍模型規(guī)模的增長。第7章分布式訓(xùn)練硬件不夠,軟件來湊。深度學(xué)習(xí)框架的分布式訓(xùn)練技術(shù)強(qiáng)勢地支撐起了模型的快速增長。人們設(shè)計(jì)分布式訓(xùn)練系統(tǒng)來解決海量的計(jì)算和內(nèi)存資源需求問題。在分布式訓(xùn)練系統(tǒng)環(huán)境下,將一個(gè)模型訓(xùn)練任務(wù)拆分成多個(gè)子任務(wù),并將子任務(wù)分發(fā)給多個(gè)計(jì)算設(shè)備,從而解決資源瓶頸。如何才能利用數(shù)萬計(jì)算加速芯片的集群,訓(xùn)練千億甚至萬億參數(shù)量的大模型?這其中涉及到集群架構(gòu)、并行策略、模型架構(gòu)、內(nèi)存優(yōu)化、計(jì)算優(yōu)化等一系列的技術(shù)。第7章分布式訓(xùn)練01分而治之02什么是分布式處理03分布式訓(xùn)練概述04分布式并行訓(xùn)練策略目錄/CONTENTS05分布式訓(xùn)練的集群架構(gòu)PART01分而治之計(jì)算機(jī)誕生之后,一般是在單臺(tái)計(jì)算機(jī)上處理數(shù)據(jù)。但是,傳統(tǒng)的數(shù)據(jù)處理方法無法滿足大數(shù)據(jù)的處理需求,于是,將一組計(jì)算機(jī)組織到一起形成一個(gè)集群,利用集群的力量來處理大數(shù)據(jù)的工程實(shí)踐逐漸成為主流方案。這種使用集群進(jìn)行計(jì)算的方式被稱為分布式計(jì)算,當(dāng)前幾乎所有的大數(shù)據(jù)系統(tǒng)都是在集群進(jìn)行分布式計(jì)算。7.1分而治之分布式計(jì)算的概念聽起來很高深,其背后的思想十分樸素,即分而治之(見圖7-1),它是將一個(gè)原始問題分解為子問題,多個(gè)子問題分別在多臺(tái)機(jī)器上求解,借助必要的數(shù)據(jù)交換和合并策略,將子結(jié)果匯總即可求出最終結(jié)果。具體而言,不同的分布式計(jì)算系統(tǒng)所使用的算法和策略根據(jù)所要解決的問題各有不同,但基本上都是將計(jì)算拆分,把子問題放到多臺(tái)機(jī)器上,分別計(jì)算求解,其中的每臺(tái)機(jī)器(物理機(jī)或虛擬機(jī))又被稱為一個(gè)節(jié)點(diǎn)。圖7-1分而治之的算法思想7.1分而治之分布式計(jì)算已經(jīng)有很多成熟的方案,其中比較有名的有消息傳遞接口(MPI)和MapReduce。MPI是一個(gè)老牌的分布式計(jì)算框架,主要解決節(jié)點(diǎn)間的數(shù)據(jù)通信問題。在前MapReduce時(shí)代,MPI是分布式計(jì)算的業(yè)界標(biāo)準(zhǔn),現(xiàn)在依然廣泛運(yùn)行在全球各大超級(jí)計(jì)算中心、大學(xué)、政府和軍隊(duì)下屬研究機(jī)構(gòu)中,許多物理、生物、化學(xué)、能源、航空航天等基礎(chǔ)學(xué)科的大規(guī)模分布式計(jì)算都依賴MPI。7.1.1消息傳遞接口MPI分治法將問題切分成子問題,在不同節(jié)點(diǎn)上分而治之地求解,MPI提供了一個(gè)在多進(jìn)程多節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的方案,因?yàn)榻^大多數(shù)情況下,在中間計(jì)算和最終合并的過程中,需要對(duì)多個(gè)節(jié)點(diǎn)上的數(shù)據(jù)進(jìn)行交換和同步。MPI中最重要的兩個(gè)操作為數(shù)據(jù)發(fā)送(Send)和數(shù)據(jù)接收(Recv),Send表示將本進(jìn)程中某塊數(shù)據(jù)發(fā)送給其他進(jìn)程,Recv表示接收其他進(jìn)程的數(shù)據(jù)。7.1.1消息傳遞接口MPI圖7-2展示了MPI架構(gòu)在4臺(tái)服務(wù)器上進(jìn)行并行計(jì)算。在實(shí)際的代碼開發(fā)過程中,用戶需要自行設(shè)計(jì)分治算法,將復(fù)雜問題切分為子問題,手動(dòng)調(diào)用MPI庫,將數(shù)據(jù)發(fā)送給指定的進(jìn)程。

圖7-2MPI并行計(jì)算示意圖7.1.1消息傳遞接口MPIMPI能夠在很細(xì)的粒度上控制數(shù)據(jù)通信,這是它的優(yōu)勢,同時(shí)也是它的劣勢,因?yàn)榧?xì)粒度控制意味著從分治算法設(shè)計(jì)到數(shù)據(jù)通信到結(jié)果匯總都需要編程人員手動(dòng)控制。有經(jīng)驗(yàn)的程序員可以對(duì)程序進(jìn)行底層優(yōu)化,取得成倍的速度提升。但如果對(duì)計(jì)算機(jī)和分布式系統(tǒng)沒有太多經(jīng)驗(yàn),編碼、調(diào)試和運(yùn)行MPI程序的時(shí)間成本極高,加上數(shù)據(jù)在不同節(jié)點(diǎn)上不均衡和通信延遲等問題,一個(gè)節(jié)點(diǎn)進(jìn)程失敗會(huì)導(dǎo)致整個(gè)程序失敗,因此,MPI對(duì)于大部分程序員來說也許就是噩夢。7.1.1消息傳遞接口MPI衡量一個(gè)程序的時(shí)間成本,不僅要考慮程序運(yùn)行,也要考慮程序員學(xué)習(xí)、開發(fā)和調(diào)試的時(shí)間。就像C語言運(yùn)算速度極快,但是Python語言卻更受歡迎一樣,MPI雖然能提供極快的分布式計(jì)算加速,但不太接地氣。7.1.1消息傳遞接口MPI為了解決分布式計(jì)算學(xué)習(xí)和使用成本高的問題,研究人員提出了更簡單易用的MapReduce編程模型。MapReduce是谷歌2004年提出的一種編程范式,比起MPI將所有事情交給程序員控制不同,MapReduce編程模型只需要程序員定義兩個(gè)操作:map(映射)和reduce(減少)。7.1.2MapReduce這里我們借用三明治的制作過程對(duì)MapReduce進(jìn)行分析(見圖7-3)。假設(shè)我們需要大批量地制作三明治,三明治的每種食材可以分別單獨(dú)處理,map階段將原材料在不同的節(jié)點(diǎn)上分別進(jìn)行處理,生成一些中間食材,shuffle(洗牌)階段將不同的中間食材進(jìn)行組合,reduce最終將一組中間食材組合成為三明治成品??梢钥吹?,這種map+shuffle+reduce的方式就是分而治之思想的一種實(shí)現(xiàn)。圖7-3使用MapReduce制作三明治7.1.2MapReduce基于MapReduce編程模型,不同的團(tuán)隊(duì)分別實(shí)現(xiàn)了自己的大數(shù)據(jù)框架:Hadoop是最早的一種開源實(shí)現(xiàn),如今已經(jīng)成為大數(shù)據(jù)領(lǐng)域的業(yè)界標(biāo)桿,之后又出現(xiàn)了Spark和Flink。這些框架提供了API編程接口,輔助程序員存儲(chǔ)、處理和分析大數(shù)據(jù)。比起MPI,MapReduce編程模型將更多的中間過程做了封裝,程序員只需要將原始問題轉(zhuǎn)化為更高層次的API,至于原始問題如何切分為更小的子問題、中間數(shù)據(jù)如何傳輸和交換、如何將計(jì)算伸縮擴(kuò)展到多個(gè)節(jié)點(diǎn)等一系列細(xì)節(jié)問題可以交給大數(shù)據(jù)框架來解決。因此,MapReduce相對(duì)來說學(xué)習(xí)門檻更低,使用更方便,編程開發(fā)速度更快。7.1.2MapReduce數(shù)據(jù)與數(shù)據(jù)流。在現(xiàn)代通信技術(shù)中,數(shù)據(jù)的容量大且產(chǎn)生速度快。從時(shí)間維度上講,數(shù)據(jù)源源不斷地產(chǎn)生,形成一個(gè)無界的數(shù)據(jù)流(見圖7-4)。

圖7-4有界與無解數(shù)據(jù)流7.1.3批處理和流處理例如每時(shí)每刻的運(yùn)動(dòng)數(shù)據(jù)都會(huì)累積到手機(jī)傳感器上,金融交易隨時(shí)隨地發(fā)生著,傳感器會(huì)持續(xù)監(jiān)控并生成數(shù)據(jù)。數(shù)據(jù)流中的某段有界數(shù)據(jù)流可以組成一個(gè)數(shù)據(jù)集。我們通常所說的對(duì)某份數(shù)據(jù)進(jìn)行分析,指的是對(duì)某個(gè)數(shù)據(jù)集進(jìn)行分析。隨著數(shù)據(jù)的產(chǎn)生速度越來越快,數(shù)據(jù)源越來越多,人們對(duì)時(shí)效性的重視程度越來越高,如何處理數(shù)據(jù)流成了大家更為關(guān)注的問題。7.1.3批處理和流處理批處理。這是對(duì)一批數(shù)據(jù)進(jìn)行處理。我們身邊批量計(jì)算比比皆是,最簡單的批量計(jì)算例子有:微信運(yùn)動(dòng)每天晚上有一個(gè)批量任務(wù),把用戶好友一天所走的步數(shù)統(tǒng)計(jì)一遍,生成排序結(jié)果后推送給用戶;銀行信用卡中心每月賬單日有一個(gè)批量任務(wù),把一個(gè)月的消費(fèi)總額統(tǒng)計(jì)一次,生成用戶月度賬單;國家統(tǒng)計(jì)局每季度對(duì)經(jīng)濟(jì)數(shù)據(jù)做一次統(tǒng)計(jì),公布季度GDP增速??梢?,批量任務(wù)一般是對(duì)一段時(shí)間的數(shù)據(jù)聚合后進(jìn)行處理。對(duì)于數(shù)據(jù)量龐大的應(yīng)用,如微信運(yùn)動(dòng)、銀行信用卡等情景,一段時(shí)間內(nèi)積累的數(shù)據(jù)總量非常大,計(jì)算非常耗時(shí)。7.1.3批處理和流處理批量計(jì)算的歷史可以追溯到計(jì)算機(jī)剛剛起步的二十世紀(jì)60年代,當(dāng)前應(yīng)用最為廣泛的當(dāng)屬數(shù)據(jù)倉庫的ETL(提取-轉(zhuǎn)換-加載)數(shù)據(jù)轉(zhuǎn)化工作,如以O(shè)racle為代表的商業(yè)數(shù)據(jù)倉庫和以Hadoop/Spark為代表的開源數(shù)據(jù)倉庫。7.1.3批處理和流處理流處理。數(shù)據(jù)其實(shí)是以流方式持續(xù)不斷地產(chǎn)生著,流處理就是對(duì)數(shù)據(jù)流進(jìn)行分析和處理,時(shí)間對(duì)流處理獲取實(shí)時(shí)數(shù)據(jù)價(jià)值越發(fā)重要。個(gè)人用戶每晚看一次微信運(yùn)動(dòng)排名覺得是一個(gè)比較舒適的節(jié)奏,但是對(duì)于金融界來說,時(shí)間是以百萬、千萬甚至上億為單位的金錢。電商大促銷中管理者要以秒級(jí)的響應(yīng)時(shí)間查看實(shí)時(shí)銷售業(yè)績、庫存信息以及與競品的對(duì)比結(jié)果,以爭取更多的決策時(shí)間;股票交易要以毫秒級(jí)的速度來對(duì)新信息做出響應(yīng);風(fēng)險(xiǎn)控制要對(duì)每一份欺詐交易迅速做出處理,以減少不必要的損失;網(wǎng)絡(luò)運(yùn)營商要以極快速度發(fā)現(xiàn)網(wǎng)絡(luò)和數(shù)據(jù)中心的故障等等。7.1.3批處理和流處理以上這些場景,一旦出現(xiàn)故障,造成服務(wù)延遲,損失都難以估量,因此,響應(yīng)速度越快,越能減少損失,增加收入。而物聯(lián)網(wǎng)和5G通信的興起將為數(shù)據(jù)生成提供更完美的底層技術(shù)基礎(chǔ),海量的數(shù)據(jù)在IoT設(shè)備上采集生成,并通過更高速的5G通道傳輸?shù)椒?wù)器,更龐大的實(shí)時(shí)數(shù)據(jù)流將洶涌而至,流式處理的需求肯定會(huì)爆炸式增長。7.1.3批處理和流處理PART02什么是分布式處理分布式處理和并行處理是為了提高并行處理速度采用的兩種不同的體系架構(gòu)。并行處理是利用多個(gè)功能部件或多個(gè)處理機(jī)同時(shí)工作來提高系統(tǒng)性能或可靠性的計(jì)算機(jī)系統(tǒng),這種系統(tǒng)至少包含指令級(jí)或指令級(jí)以上的并行。分布式處理則是將不同地點(diǎn)的,具有不同功能的,或擁有不同數(shù)據(jù)的多臺(tái)計(jì)算機(jī)通過通信網(wǎng)絡(luò)連接起來,在控制系統(tǒng)的統(tǒng)一管理控制下,協(xié)調(diào)地完成大規(guī)模信息處理任務(wù)的計(jì)算機(jī)系統(tǒng)。7.2什么是分布式處理并行處理系統(tǒng)的研究與發(fā)展涉及計(jì)算理論、算法、體系結(jié)構(gòu)、軟硬件多個(gè)方面,但它與分布式處理系統(tǒng)有密切的關(guān)系,隨著通信技術(shù)的發(fā)展,兩者的界限越來越模糊。廣義上說,分布式處理也可以認(rèn)為是一種并行處理形式。而分布式處理系統(tǒng)是將不同地點(diǎn)的或具有不同功能的或擁有不同數(shù)據(jù)的多臺(tái)計(jì)算機(jī)用通信網(wǎng)絡(luò)連接起來,在控制系統(tǒng)的統(tǒng)一管理控制下,協(xié)調(diào)地完成信息處理任務(wù)的計(jì)算機(jī)系統(tǒng)。7.2.1分布式處理的特點(diǎn)一般認(rèn)為,集中在同一個(gè)機(jī)柜內(nèi)或同一個(gè)地點(diǎn)的緊密耦合大規(guī)模多處理機(jī)系統(tǒng)是并行處理系統(tǒng),而用局域網(wǎng)或廣域網(wǎng)連接的計(jì)算機(jī)系統(tǒng)是分布式處理系統(tǒng),松散耦合并行計(jì)算機(jī)中的并行操作系統(tǒng)有時(shí)也被稱為分布式處理系統(tǒng)。7.2.1分布式處理的特點(diǎn)簡單來說,分布式處理就是多臺(tái)相連的計(jì)算機(jī)各自承擔(dān)同一工作任務(wù)的不同部分,在人的控制下,同時(shí)運(yùn)行,共同完成同一件工作任務(wù)。由多個(gè)自主的、相互連接的信息處理系統(tǒng),在一個(gè)高級(jí)操作系統(tǒng)協(xié)調(diào)下共同完成同一任務(wù)的處理方式。利用網(wǎng)絡(luò)技術(shù)能把許多小型機(jī)或微機(jī)連接成具有高性能的計(jì)算機(jī)系統(tǒng),使其具有解決復(fù)雜問題的能力。7.2.1分布式處理的特點(diǎn)在上個(gè)世紀(jì)70年代計(jì)算機(jī)網(wǎng)絡(luò)出現(xiàn)之前,信息處理采用集中式處理或分散式處理。集中式處理把各信息包括遠(yuǎn)程信息都傳輸?shù)浇y(tǒng)一的信息處理系統(tǒng)中進(jìn)行處理。采用集中式處理可以達(dá)到設(shè)備利用率高的目的,并能保證被處理信息的完整性和有效性。一個(gè)下設(shè)許多工廠的公司采用集中式信息處理可以得到整個(gè)公司的最佳結(jié)果,不像各工廠分散處理那樣,考慮的只是每個(gè)工廠的優(yōu)化。集中處理需要的設(shè)備比分散處理所用的設(shè)備復(fù)雜得多,但它可為大部分工廠所共享,避免設(shè)備的重復(fù)。7.2.2分布式處理發(fā)展過程分散式處理的最大優(yōu)點(diǎn)是簡單,能就地提取數(shù)據(jù)、變換格式并進(jìn)行加工,最后輸出決定。要把這些工作集中于統(tǒng)一的程序中是非常困難和代價(jià)昂貴的。分散程度越大,滿足部門的特殊信息處理要求的可能性也越大,但統(tǒng)一和控制信息流的困難也越大。由于要求在數(shù)據(jù)產(chǎn)生場所進(jìn)行局部處理的數(shù)據(jù)比重不斷增加,要求應(yīng)答時(shí)間縮短和計(jì)算機(jī)的處理能力不可能無限增強(qiáng)等原因,常把分散設(shè)置的各計(jì)算機(jī)組合成計(jì)算機(jī)網(wǎng),形成分布式處理系統(tǒng)。這樣既能克服分散處理的缺點(diǎn),又可避免集中的困難。7.2.2分布式處理發(fā)展過程二十世紀(jì)70年代以來,隨著計(jì)算機(jī)日益廣泛地應(yīng)用于各個(gè)領(lǐng)域,全國性與國際性的計(jì)算機(jī)網(wǎng)相繼出現(xiàn),這種信息處理系統(tǒng)的功能和結(jié)構(gòu)也越來越復(fù)雜。分布式處理將裝備從集中的處理系統(tǒng)中分散開來,便能直接從信息源取得信息并進(jìn)行相互協(xié)調(diào)的處理。這種處理方式適應(yīng)計(jì)算機(jī)網(wǎng)發(fā)展的需要。7.2.2分布式處理發(fā)展過程一般信息處理系統(tǒng)的硬件、控制點(diǎn)和數(shù)據(jù)庫有多種構(gòu)成方式。從硬件組成來看屬于分布式系統(tǒng)的有兩種:(1)系統(tǒng)由多個(gè)處理機(jī)組成,但是有統(tǒng)一的輸入輸出系統(tǒng);(2)多計(jì)算機(jī)系統(tǒng),有多個(gè)輸入輸出系統(tǒng)。7.2.3分布式構(gòu)成方式從控制點(diǎn)的設(shè)置方式來看屬于分布式處理的有3種:(1)多個(gè)系統(tǒng)在子任務(wù)一級(jí)上協(xié)同操作執(zhí)行某一任務(wù);(2)多個(gè)相同的控制系統(tǒng)協(xié)同執(zhí)行同一任務(wù);(3)多個(gè)不同的控制系統(tǒng)協(xié)同執(zhí)行同一任務(wù)。從數(shù)據(jù)庫來看屬于分布式的有3種:(1)只有部分?jǐn)?shù)據(jù)庫在主結(jié)點(diǎn)中有復(fù)制本;(2)只有部分?jǐn)?shù)據(jù)庫在主結(jié)點(diǎn)中有目錄;(3)數(shù)據(jù)庫全部分散存放,沒有主結(jié)點(diǎn)。7.2.3分布式構(gòu)成方式分布式處理系統(tǒng)必須有能力在短時(shí)間內(nèi)動(dòng)態(tài)地組合成面向不同服務(wù)對(duì)象的系統(tǒng)。對(duì)用戶來說系統(tǒng)是透明的,用戶只需指定系統(tǒng)干什么而不必指出哪個(gè)部件可以提供這一服務(wù)。系統(tǒng)各組成部分是自主的,但不是無政府狀態(tài),而是遵循某個(gè)主計(jì)劃由高級(jí)操作系統(tǒng)進(jìn)行協(xié)調(diào)工作。在一個(gè)計(jì)算機(jī)網(wǎng)中有多臺(tái)主機(jī)不一定都是分布式處理。如果這樣的系統(tǒng)不具備動(dòng)態(tài)組合及任務(wù)再指派的能力,那么它們?nèi)匀皇羌惺教幚?。高?jí)操作系統(tǒng)是分布式處理的關(guān)鍵。7.2.3分布式構(gòu)成方式在分布式系統(tǒng)中不再使用完整的信息,各個(gè)組成部分提供自己的狀態(tài)信息,高級(jí)操作系統(tǒng)根據(jù)這些狀態(tài)信息進(jìn)行任務(wù)協(xié)調(diào)和資源再分配,各組成部分之間沒有層次關(guān)系而是自主的。7.2.3分布式構(gòu)成方式分布式處理系統(tǒng)與并行處理系統(tǒng)是計(jì)算機(jī)體系結(jié)構(gòu)中的兩類。并行處理系統(tǒng)是利用多個(gè)功能部件或多個(gè)處理機(jī)同時(shí)工作來提高系統(tǒng)性能或可靠性的計(jì)算機(jī)系統(tǒng),這種系統(tǒng)至少包含指令級(jí)或指令級(jí)以上的并行。分布式處理系統(tǒng)包含硬件,控制系統(tǒng),接口系統(tǒng),數(shù)據(jù),應(yīng)用程序和人等六個(gè)要素。而控制系統(tǒng)中包含了分布式操作系統(tǒng),分布式數(shù)據(jù)庫以及通信協(xié)議等。7.2.4分布式處理系統(tǒng)分布式計(jì)算環(huán)境是在具有多地址空間的多計(jì)算機(jī)系統(tǒng)上進(jìn)行計(jì)算和信息處理的軟件環(huán)境。而分布式軟件系統(tǒng)是支持分布式處理的軟件系統(tǒng),它包括分布式操作系統(tǒng),分布式程序設(shè)計(jì)語言及其編譯系統(tǒng),分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)等。而CORBA,COM+等是設(shè)計(jì)分布式軟件系統(tǒng)的一些技術(shù)。通俗地講,分布式處理就是多臺(tái)相連的計(jì)算機(jī)各自承擔(dān)同一工作任務(wù)的不同部分,在人的控制下,同時(shí)運(yùn)行,共同完成同一件工作任務(wù)。7.2.4分布式處理系統(tǒng)PART03分布式訓(xùn)練概述分布式訓(xùn)練是指將機(jī)器學(xué)習(xí)或深度學(xué)習(xí)模型訓(xùn)練任務(wù)分解成多個(gè)子任務(wù),并在多個(gè)計(jì)算設(shè)備上并行地進(jìn)行訓(xùn)練。圖7-5給出單個(gè)計(jì)算設(shè)備和多個(gè)計(jì)算設(shè)備的示例,這里的計(jì)算設(shè)備可以是中央處理器(CPU)、圖形處理器(GPU)、張量處理器(TPU),也可以是神經(jīng)網(wǎng)絡(luò)處理器(NPU)。

圖7-5單個(gè)計(jì)算設(shè)備和多個(gè)計(jì)算設(shè)備的示例7.2分布式訓(xùn)練概述由于同一個(gè)服務(wù)器內(nèi)部的多個(gè)計(jì)算設(shè)備之間的內(nèi)存可能并不共享,因此,無論這些計(jì)算設(shè)備是處于一個(gè)服務(wù)器還是多個(gè)服務(wù)器中,其系統(tǒng)架構(gòu)都屬于分布式系統(tǒng)范疇。一個(gè)模型訓(xùn)練任務(wù)往往會(huì)有大量的訓(xùn)練樣本作為輸入,可以利用一個(gè)計(jì)算設(shè)備完成,也可以將整個(gè)模型的訓(xùn)練任務(wù)拆分成多個(gè)子任務(wù),分發(fā)給不同的計(jì)算設(shè)備,實(shí)現(xiàn)并行計(jì)算。此后,還需要對(duì)每個(gè)計(jì)算設(shè)備的輸出進(jìn)行合并,最終得到與單個(gè)計(jì)算設(shè)備等價(jià)的計(jì)算結(jié)果。由于每個(gè)計(jì)算設(shè)備只需要負(fù)責(zé)子任務(wù),并且多個(gè)計(jì)算設(shè)備可以并行執(zhí)行,因此,可以更快速地完成整體計(jì)算,并最終實(shí)現(xiàn)對(duì)整個(gè)計(jì)算過程的加速。7.2分布式訓(xùn)練概述機(jī)器學(xué)習(xí)模型快速發(fā)展,模型參數(shù)規(guī)模迅速增大的同時(shí),對(duì)訓(xùn)練數(shù)據(jù)量的要求也呈指數(shù)級(jí)增長,加劇了對(duì)算力的需求。然而,近年來,雖然計(jì)算設(shè)備(如GPU、TPU等)提供了大量的算力,但是其增長速度仍然沒有突破每18個(gè)月翻倍的摩爾定律,只有通過分布式訓(xùn)練系統(tǒng)才可以匹配模型不斷增長的算力需求,滿足機(jī)器學(xué)習(xí)模型的發(fā)展需要。分布式訓(xùn)練的總體目標(biāo)就是提升總的訓(xùn)練速度,減少模型訓(xùn)練的總體時(shí)間。7.2分布式訓(xùn)練概述對(duì)單設(shè)備訓(xùn)練效率進(jìn)行優(yōu)化,主要的技術(shù)手段有混合精度訓(xùn)練、算子融合、梯度累加等。在分布式訓(xùn)練系統(tǒng)中,隨著計(jì)算設(shè)備數(shù)量的增加,理論上峰值計(jì)算速度會(huì)增加,然而受通信效率的影響,計(jì)算設(shè)備數(shù)量增多會(huì)造成加速比急速降低;多設(shè)備加速比是由計(jì)算和通信效率決定的,需要結(jié)合算法和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行優(yōu)化,分布式訓(xùn)練并行策略的主要目標(biāo)就是提升分布式訓(xùn)練系統(tǒng)中的多設(shè)備加速比。大模型參數(shù)量和所使用的數(shù)據(jù)量都非常大,因此都采用了分布式訓(xùn)練架構(gòu)完成訓(xùn)練。7.2分布式訓(xùn)練概述通過使用分布式訓(xùn)練系統(tǒng),大模型的訓(xùn)練周期可以從單計(jì)算設(shè)備花費(fèi)幾十年,縮短到使用數(shù)千個(gè)計(jì)算設(shè)備花費(fèi)幾十天。分布式訓(xùn)練系統(tǒng)需要克服計(jì)算墻、顯存墻、通信墻等挑戰(zhàn),以確保集群內(nèi)的所有資源得到充分利用,從而加速訓(xùn)練過程并縮短訓(xùn)練周期。·計(jì)算墻:單個(gè)計(jì)算設(shè)備所能提供的計(jì)算能力與大模型所需的總計(jì)算量之間存在巨大差異?!わ@存墻:單個(gè)計(jì)算設(shè)備無法完整存儲(chǔ)一個(gè)大模型的參數(shù)。·通信墻:分布式訓(xùn)練系統(tǒng)中各計(jì)算設(shè)備之間需要頻繁地進(jìn)行參數(shù)傳輸和同步。由于通信的延遲和帶寬限制,這可能成為訓(xùn)練過程的瓶頸。7.2分布式訓(xùn)練概述計(jì)算墻和顯存墻源于單計(jì)算設(shè)備的計(jì)算和存儲(chǔ)能力有限,與模型所需龐大計(jì)算和存儲(chǔ)需求存在矛盾。這個(gè)問題可以通過采用分布式訓(xùn)練的方法解決,但分布式訓(xùn)練又會(huì)面臨通信墻的挑戰(zhàn)。在多機(jī)多卡的訓(xùn)練中,這些問題逐漸顯現(xiàn)。隨著大語言模型參數(shù)的增大,對(duì)應(yīng)的集群規(guī)模也隨之增加,這些問題變得更加突出。同時(shí),當(dāng)大型集群進(jìn)行長時(shí)間訓(xùn)練時(shí),設(shè)備故障可能會(huì)影響或中斷訓(xùn)練,對(duì)分布式系統(tǒng)的問題處理也提出了很高的要求。7.2分布式訓(xùn)練概述PART04分布式并行訓(xùn)練策略分布式訓(xùn)練系統(tǒng)的目標(biāo)是將單節(jié)點(diǎn)模型訓(xùn)練轉(zhuǎn)換成等價(jià)的分布式并行模型訓(xùn)練,對(duì)大模型來說,訓(xùn)練過程就是根據(jù)數(shù)據(jù)和損失函數(shù),利用優(yōu)化算法對(duì)神經(jīng)網(wǎng)絡(luò)模型參數(shù)進(jìn)行更新的過程。單個(gè)計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的結(jié)構(gòu)如圖7-6所示,主要由數(shù)據(jù)和模型兩個(gè)部分組成,訓(xùn)練過程會(huì)由多個(gè)數(shù)據(jù)小批次完成。

圖7-6單個(gè)計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的結(jié)構(gòu)7.4分布式并行訓(xùn)練策略圖中數(shù)據(jù)表示一個(gè)數(shù)據(jù)小批次,訓(xùn)練系統(tǒng)會(huì)利用數(shù)據(jù)小批次根據(jù)損失函數(shù)和優(yōu)化算法生成梯度,從而對(duì)模型參數(shù)進(jìn)行修正,針對(duì)大模型多層神經(jīng)網(wǎng)絡(luò)的執(zhí)行過程,可以由一個(gè)計(jì)算圖表示,這個(gè)圖有多個(gè)相互連接的算子,每個(gè)算子實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)層,而參數(shù)則代表了這個(gè)層在訓(xùn)練中所更新的權(quán)重。7.4分布式并行訓(xùn)練策略計(jì)算圖的執(zhí)行過程可以分為前向計(jì)算和反向計(jì)算兩個(gè)階段。前向計(jì)算的過程是將數(shù)據(jù)讀入第一個(gè)算子,計(jì)算出相應(yīng)的輸出結(jié)構(gòu),然后重復(fù)前向過程,直到最后一個(gè)算子結(jié)束處理。反向計(jì)算過程是根據(jù)優(yōu)化函數(shù)和損失,每個(gè)算子依次計(jì)算梯度并更新本地參數(shù)。在反向計(jì)算結(jié)束后,該數(shù)據(jù)小批次的計(jì)算完成,系統(tǒng)就會(huì)讀取下一個(gè)數(shù)據(jù)小批次,繼續(xù)下一輪的模型參數(shù)更新??偟膩碚f,支撐模型規(guī)模發(fā)展的關(guān)鍵分布式訓(xùn)練技術(shù)解決的核心問題是如何在保障GPU能夠高效計(jì)算的同時(shí),降低顯存的開銷。7.4分布式并行訓(xùn)練策略根據(jù)單個(gè)計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的流程,可以看到,如果進(jìn)行并行加速,可以從數(shù)據(jù)和模型兩個(gè)維度進(jìn)行考慮??梢詫?duì)數(shù)據(jù)進(jìn)行切分,并將同一個(gè)模型復(fù)制到多個(gè)設(shè)備上,并行執(zhí)行不同的數(shù)據(jù)分片,這種方式通常被稱為數(shù)據(jù)并行。還可以對(duì)模型進(jìn)行劃分,將模型中的算子分發(fā)到多個(gè)設(shè)備分別完成處理,這種方式通常被稱為模型并行。當(dāng)訓(xùn)練大語言模型時(shí),往往需要同時(shí)對(duì)數(shù)據(jù)和模型進(jìn)行切分,從而實(shí)現(xiàn)更高程度的并行,這種方式通常被稱為混合并行。7.4分布式并行訓(xùn)練策略數(shù)據(jù)并行性關(guān)注的問題是在大批量下,如何降低顯存的開銷。模型在前向和后向的中間計(jì)算過程都會(huì)有中間狀態(tài),這些中間狀態(tài)通常占用的空間和批量大小成正比。在數(shù)據(jù)并行系統(tǒng)中,每個(gè)計(jì)算設(shè)備都有整個(gè)神經(jīng)網(wǎng)絡(luò)模型的模型副本,進(jìn)行迭代時(shí),每個(gè)計(jì)算設(shè)備只分配一個(gè)批次數(shù)據(jù)樣本的子集,并根據(jù)該批次樣本子集的數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)模型的前向計(jì)算。7.4.1數(shù)據(jù)并行性圖7-7給出了由3個(gè)GPU計(jì)算設(shè)備組成的數(shù)據(jù)并行訓(xùn)練系統(tǒng)樣例。通過將大的批量切分到n個(gè)GPU上,每個(gè)GPU上部分狀態(tài)的空間開銷能降到1/n,而省下的空間可以用來保存模型的參數(shù),優(yōu)化器狀態(tài)等,因此可以提高GPU上容納的模型規(guī)模。

圖7-7大批量數(shù)據(jù)的切分7.4.1數(shù)據(jù)并行性數(shù)據(jù)并行訓(xùn)練系統(tǒng)可以通過增加計(jì)算設(shè)備,有效提升整體訓(xùn)練吞吐量,即每秒全局批次數(shù)。與單個(gè)計(jì)算設(shè)備訓(xùn)練相比,其最主要的區(qū)別在于反向計(jì)算中的梯度需要在所有計(jì)算設(shè)備中進(jìn)行同步,以保證每個(gè)計(jì)算設(shè)備上最終得到的是所有進(jìn)程上梯度的平均值。常見的神經(jīng)網(wǎng)絡(luò)框架中都有數(shù)據(jù)并行方式的具體實(shí)現(xiàn)。由于基于Transformer結(jié)構(gòu)的大模型中每個(gè)算子都依賴單個(gè)數(shù)據(jù)而非批次數(shù)據(jù),因此數(shù)據(jù)并行并不會(huì)影響其計(jì)算邏輯。一般情況下,各訓(xùn)練設(shè)備中前向計(jì)算是獨(dú)立的,不涉及同步問題。數(shù)據(jù)并行訓(xùn)練加速比最高,但要求每個(gè)設(shè)備上都備份一份模型,顯存占用比較高。7.4.1數(shù)據(jù)并行性數(shù)據(jù)并行簡單易用,幾乎所有的訓(xùn)練框架都支持這種方法,其極限在于兩個(gè)方面:(1)當(dāng)批量大小=1時(shí),傳統(tǒng)方法無法繼續(xù)切分。(2)經(jīng)典數(shù)據(jù)并行主要切分的是批量大小正比的部分中間狀態(tài)。但是對(duì)于參數(shù),優(yōu)化器狀態(tài)等與批量大小無關(guān)的空間開銷是無能為力的。7.4.1數(shù)據(jù)并行性模型并行用于解決單節(jié)點(diǎn)內(nèi)存不足的問題,可以從計(jì)算圖角度,用以下兩種形式進(jìn)行切分。(1)按模型的層切分到不同設(shè)備,即層間并行或算子間并行,也稱為流水線并行。7.4.2模型并行性(2)將計(jì)算圖層內(nèi)的參數(shù)切分到不同設(shè)備,即層內(nèi)并行或算子內(nèi)并行,也稱為張量并行。兩節(jié)點(diǎn)模型并行訓(xùn)練系統(tǒng)樣例如圖7-8所示,圖7-8(a)為流水線并行,模型的不同層被切分到不同的設(shè)備中;圖7-8(b)為張量并行,同一層中的不同參數(shù)被切分到不同的設(shè)備中進(jìn)行計(jì)算。

圖7-8兩節(jié)點(diǎn)模型并行訓(xùn)練系統(tǒng)樣例7.4.2模型并行性關(guān)于數(shù)據(jù)并行的極限提到,當(dāng)批量大小=1時(shí),數(shù)據(jù)并行難以進(jìn)一步的提高模型規(guī)模的上限。另外,傳統(tǒng)數(shù)據(jù)并行僅僅是從數(shù)據(jù)的層面切分,降低顯存空間壓力。而我們知道每個(gè)GPU上依然需要一份完整的參數(shù)等副本。模型并行性的基本含義是把模型本身進(jìn)行切分,使得每個(gè)GPU卡只需要存模型的一部分。多個(gè)GPU配合起來完成一個(gè)完整的小批量。7.4.2模型并行性按這個(gè)比較寬泛的定義,模型并行性的使用方式就比較多樣,比如:(1)對(duì)一個(gè)算子進(jìn)行拆分,把參數(shù)和計(jì)算切分到多個(gè)GPU上,通過通信完成原子計(jì)算。(2)單純把模型參數(shù)切分到多個(gè)GPU上,在使用時(shí)通過數(shù)據(jù)驅(qū)動(dòng)的方式,每個(gè)GPU從其他GPU上拉取需要的那部分。比如大的嵌入?yún)?shù)如果有100GB,可以切分成8份放在8個(gè)GPU上。每個(gè)小批量計(jì)算時(shí),嵌入層僅需要收集100GB中很少的一部分。7.4.2模型并行性(3)簡單地把模型橫向切分幾份,分別放在不同的GPU上。比如一個(gè)1000層的組合每個(gè)GPU放其中100層的參數(shù)。當(dāng)一個(gè)小批量進(jìn)來后,依次通過10個(gè)GPU完成1000層的計(jì)算。TensorFlow是支持模型并行性的典型框架,通過將設(shè)備放置暴露給用戶,開放了幾乎所有的做法。但弊端就是大部分用戶其實(shí)并不能合理的使用,達(dá)到一個(gè)比較好的效果。反而是經(jīng)常因?yàn)榕渲缅e(cuò)誤導(dǎo)致性能急劇下降。導(dǎo)致TensorFlow的開發(fā)團(tuán)隊(duì)不得不投入許多時(shí)間幫用戶調(diào)優(yōu)。7.4.2模型并行性模型并行性的做法很多,可以在數(shù)據(jù)并行的基礎(chǔ)上顯著降低單個(gè)GPU上的顯存壓力。但是模型并行性的問題也很多,使用起來遠(yuǎn)比數(shù)據(jù)并行更復(fù)雜:(1)模型切分可選項(xiàng)太多,次優(yōu)解會(huì)導(dǎo)致較高通信開銷,明顯降低硬件利用率和訓(xùn)練速度。(2)模型并行性在一些應(yīng)用場景中計(jì)算一個(gè)小批量時(shí),硬件是依次激活的,其他硬件都在等待,硬件的利用率會(huì)非常的低。模型并行性的一個(gè)比較大的問題是GPU利用率低。當(dāng)沒有計(jì)算到某個(gè)GPU上的模型分片時(shí),這個(gè)GPU常常是閑著的。7.4.2模型并行性流水線并行性的思想也比較簡單,使用了經(jīng)典的管道思想。在模型計(jì)算流水線上,每個(gè)GPU只負(fù)責(zé)模型的一個(gè)分片,計(jì)算完就交給下一個(gè)GPU完成下一個(gè)模型分片的計(jì)算。當(dāng)下個(gè)GPU在計(jì)算時(shí),上一個(gè)GPU開始算下一個(gè)小批量屬于它的模型分片。

圖7-9流水線并行7.4.3流水線并行性這里需要注意到不同模型分片使用的參數(shù)分片是否同步的問題(防止流水線更新參數(shù)的問題)。從數(shù)學(xué)上,一個(gè)小批量數(shù)據(jù)訓(xùn)練使用的所有模型參數(shù)都需要是同步的(不完全一定)。因此,在優(yōu)化時(shí),整個(gè)流水線并行性需要進(jìn)行某種形式的同步。流水線并行性依然沒有完全解決部分硬件時(shí)間空閑的問題。同時(shí)使用模型并行性的復(fù)雜性和調(diào)優(yōu)依然是個(gè)問題。7.4.3流水線并行性混合并行將多種并行策略如數(shù)據(jù)并行、流水線并行和張量并行等混合使用。通過結(jié)合不同的并行策略,混合并行可以充分發(fā)揮各種并行策略的優(yōu)點(diǎn),最大限度地提高計(jì)算性能和效率。針對(duì)千億規(guī)模的大模型,通常,在每個(gè)服務(wù)器內(nèi)部使用張量并行策略,由于該策略涉及的網(wǎng)絡(luò)通信量較大,因此需要利用服務(wù)器內(nèi)部的不同計(jì)算設(shè)備之間的高速通信帶寬。通過流水線并行,將模型的不同層劃分為多個(gè)階段,每個(gè)階段由不同的機(jī)器負(fù)責(zé)計(jì)算。這樣可以充分利用多臺(tái)機(jī)器的計(jì)算能力,并通過機(jī)器間的高速通信傳遞計(jì)算結(jié)果和中間數(shù)據(jù),以提高整體的計(jì)算速度和效率。7.4.4混合并行性最后,在外層疊加數(shù)據(jù)并行策略,以增加并發(fā)數(shù)量,加快整體訓(xùn)練速度。通過數(shù)據(jù)并行,將訓(xùn)練數(shù)據(jù)分發(fā)到多組服務(wù)器上進(jìn)行并行處理,每組服務(wù)器處理不同的數(shù)據(jù)批次。這樣可以充分利用多臺(tái)服務(wù)器的計(jì)算資源,并增加訓(xùn)練的并發(fā)度,從而加快整體訓(xùn)練速度。7.4.4混合并行性PART05分布式訓(xùn)練的集群架構(gòu)分布式訓(xùn)練需要使用由多臺(tái)服務(wù)器組成的計(jì)算集群完成,而集群的架構(gòu)也需要根據(jù)分布式系統(tǒng)、大模型結(jié)構(gòu)、優(yōu)化算法等綜合因素進(jìn)行設(shè)計(jì)。分布式訓(xùn)練集群屬于高性能計(jì)算集群,其目標(biāo)是提供海量的計(jì)算能力。在由高速網(wǎng)絡(luò)組成的高性能計(jì)算上構(gòu)建分布式訓(xùn)練

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論