10倍!微軟開源史上最大NLG模型,可訓(xùn)練1000億參數(shù)的模型
人工智能的最新趨勢(shì)是,更大的自然語言模型可以提供更好的準(zhǔn)確性,但是由于成本、時(shí)間和代碼集成的障礙,較大的模型難以訓(xùn)練。
微軟日前開源了一個(gè)深度學(xué)習(xí)優(yōu)化庫 DeepSpeed,通過提高規(guī)模、速度、可用性并降低成本,可以在當(dāng)前一代的 GPU 集群上訓(xùn)練具有超過 1000 億個(gè)參數(shù)的深度學(xué)習(xí)模型,極大促進(jìn)大型模型的訓(xùn)練。同時(shí),與最新技術(shù)相比,其系統(tǒng)性能可以提高 5 倍以上。
根據(jù)微軟的介紹,DeepSpeed 庫中有一個(gè)名為 ZeRO(零冗余優(yōu)化器,Zero Redundancy Optimizer)的組件,這是一種新的并行優(yōu)化器,它可以大大減少模型和數(shù)據(jù)并行所需的資源,同時(shí)可以大量增加可訓(xùn)練的參數(shù)數(shù)量。
研究人員利用這些突破創(chuàng)建了圖靈自然語言生成模型(Turing-NLG),這是最大的公開語言模型,參數(shù)為 170 億。
ZeRO 作為 DeepSpeed 的一部分,是一種用于大規(guī)模分布式深度學(xué)習(xí)的新內(nèi)存優(yōu)化技術(shù),它可以在當(dāng)前的 GPU 集群上訓(xùn)練具有 1000 億個(gè)參數(shù)的深度學(xué)習(xí)模型,其吞吐量是當(dāng)前最佳系統(tǒng)的 3 到 5 倍。它還為訓(xùn)練具有數(shù)萬億個(gè)參數(shù)的模型提供了一條清晰的思路。
ZeRO 具有三個(gè)主要的優(yōu)化階段,分別對(duì)應(yīng)于優(yōu)化器狀態(tài)、梯度和參數(shù)分區(qū)。
ZeRO 克服了數(shù)據(jù)并行和模型并行的局限性,同時(shí)實(shí)現(xiàn)兩者的優(yōu)點(diǎn),它通過跨數(shù)據(jù)并行進(jìn)程將模型狀態(tài)劃分為上圖所示的參數(shù)、梯度和優(yōu)化器狀態(tài)分區(qū),而不是復(fù)制它們,從而消除了數(shù)據(jù)并行進(jìn)程之間的內(nèi)存冗余。
在訓(xùn)練期間使用動(dòng)態(tài)通信規(guī)劃(dynamic communication schedule),在分布式設(shè)備之間共享必要的狀態(tài),以保持?jǐn)?shù)據(jù)并行的計(jì)算粒度和通信量。
目前實(shí)施了 ZeRO 的第一階段,即優(yōu)化器狀態(tài)分區(qū)(簡稱 ZeRO-OS),具有支持 1000 億參數(shù)模型的強(qiáng)大能力,此階段與 DeepSpeed 一起發(fā)布。
DeepSpeed 與 PyTorch 兼容,DeepSpeed API 是在 PyTorch 上進(jìn)行的輕量級(jí)封裝,這意味著開發(fā)者可以使用 PyTorch 中的一切,而無需學(xué)習(xí)新平臺(tái)。此外,DeepSpeed 管理著所有樣板化的 SOTA 訓(xùn)練技術(shù),例如分布式訓(xùn)練、混合精度、梯度累積和檢查點(diǎn),開發(fā)者可以專注于模型開發(fā)。
同時(shí),開發(fā)者僅需對(duì) PyTorch 模型進(jìn)行幾行代碼的更改,就可以利用 DeepSpeed 獨(dú)特的效率和效益優(yōu)勢(shì)來提高速度和規(guī)模。
DeepSpeed 在以下四個(gè)方面都表現(xiàn)出色:
規(guī)模:目前最先進(jìn)的大型模型,例如 OpenAI GPT-2、NVIDIA Megatron-LM 和 Google T5,分別具有 15 億、83 億和 110 億個(gè)參數(shù),而 DeepSpeed 的 ZeRO 第一階段提供系統(tǒng)支持,以運(yùn)行多達(dá) 1000 億個(gè)參數(shù)的模型,這是比當(dāng)前最先進(jìn)的模型大 10 倍。
未來計(jì)劃增加對(duì) ZeRO 第二和第三階段的支持,從而提供高達(dá) 2000 億個(gè)乃至數(shù)萬億個(gè)參數(shù)的模型的能力。
速度:在各種硬件上,目前觀察到的吞吐量比當(dāng)前最先進(jìn)技術(shù)高出 5 倍。例如,為了在 GPT 系列工作負(fù)載上訓(xùn)練大型模型,DeepSpeed 將基于 ZeRO 的數(shù)據(jù)并行與 NVIDIA Megatron-LM 模型并行相結(jié)合,在具有低帶寬互連的 NVIDIA GPU 集群上(沒有 NVIDIA NVLink 或 Infiniband),與僅對(duì)具有 15 億參數(shù)的標(biāo)準(zhǔn) GPT-2 模型使用 Megatron-LM 相比,DeepSpeed 將吞吐量提高了 3.75 倍。
在具有高帶寬互連的 NVIDIA DGX-2 集群上,對(duì)于 20 至 800 億個(gè)參數(shù)的模型,速度要快 3 到 5 倍。這些吞吐量的提高來自 DeepSpeed 更高的內(nèi)存效率以及使用較低程度的模型并行和較大的批處理量來擬合這些模型的能力。
成本:提高吞吐量意味著大大降低訓(xùn)練成本,例如,要訓(xùn)練具有 200 億個(gè)參數(shù)的模型,DeepSpeed 需要的資源是原來的 3/4。
易用性:只需更改幾行代碼即可使 PyTorch 模型使用 DeepSpeed 和 ZeRO。與當(dāng)前的模型并行庫相比,DeepSpeed 不需要重新設(shè)計(jì)代碼或重構(gòu)模型,它也沒有對(duì)模型尺寸、批處理大小或任何其它訓(xùn)練參數(shù)加以限制。
對(duì)于參數(shù)多達(dá) 60 億的模型,可以方便地使用由 ZeRO 提供的數(shù)據(jù)并行能力,而無需模型并行。而相比之下,對(duì)于參數(shù)超過 13 億的模型,標(biāo)準(zhǔn)數(shù)據(jù)并行將耗盡內(nèi)存。ZeRO 第二和第三階段將進(jìn)一步增加僅通過數(shù)據(jù)并行即可訓(xùn)練的模型大小。此外,DeepSpeed 支持 ZeRO 支持的數(shù)據(jù)并行與模型并行的靈活組合。
最后附上GitHub地址:https://github.com/microsoft/DeepSpeed