微軟發佈史上最大NLG模型:基於Transformer架構,170億參數加持

  • 2020 年 2 月 21 日
  • 筆記

作者 | 叢末、蔣寶尚

編輯 | 賈 偉

近年來,BERT、GPT-2等深度學習語言模型,極大地提高了問答、摘要、人機對話等下游自然語言處理任務的性能。

而今天,微軟研究院重磅發佈了有史以來最大的基於Transformer架構的語言生成模型 Turing-NLG。

此模型的參數高達170億,是英偉達的Megatron(也就是現在第二大Transformer模型)的兩倍,是OpenAI的GPT-2的十倍。

基於Transformer的架構,意味着該模型可以生成詞來完成開放式文本任務。除了填充不完整語句外,它還可以對輸入文檔的問題和摘要生成答案。

而微軟之所以能夠開發出 Turing-NLG 這一重磅級的語言生成模型,實際上離不開其差不多同一時間開源的深度學習庫——DeepSpeed。

微軟表示,DeepSpeed 能夠讓他們降低模型並行度(從16降低到4),將每個節點的批處理大小增加4倍,並將訓練時間減少到原來的1/3。不僅如此,DeepSpeed 使用更少的GPU 就可以提高大型模型的訓練效率。

一、Turing-NLG:自帶170億參數,性能超其他最佳模型

Turing-NLG 一個基於Transformer的生成語言模型,擁有 170億參數,在諸多語言模型基準上都超越了當前性能最佳的其他模型,並且在應用於問答、摘要等實踐任務時,表現出色。

此前的問答和摘要系統依賴於從文檔中提取現有的內容作為生成答案和摘要的「立足點」,這樣生成的結果往往是不自然且不連貫的。而Turing-NLG 則能夠非常自然地完成問答和摘要任務。

1、開發Turing-NLG 所依賴的硬件和軟件突破

實際上,參數超過 13億的任何模型都無法裝入單個的GPU(即便是內存為 32 GB),因而模型本身需要在多個 GPU 上實現並行化。據微軟介紹,訓練 Turing-NLG 模型主要基於硬件和軟件實現的以下幾個突破:

第一,他們使用了NVIDIA 新一代超級計算機 DGX-2的硬件配置,結合InfiniBand連接技術,從而讓GPU 之間的通信比此前更迅速得多。

第二,他們在 NVIDIA的 Megatron-LM 框架上應用 Tensor切片對橫跨 4 個 NVIDIA V100 GPU 的模型進行切片處理;

第三,ZeRO 優化器和DeepSpeed庫,則讓他們降低了模型的並行度(從16降到4 ),將每個節點的批處理大小增加了4倍,並將訓練時間減少到原來的1/3。並且,DeepSpeed 使用更少的GPU 就可以提高大型模型的訓練效率,它在訓練大小為 512 的批處理時僅需要256個NVIDIA的 GPU,而僅使用Megatron-LM 框架的模型則需要1024個NVIDIA的 GPU。

相同條件設置下,Turing-NLG 模型和Open AI 的GPT-2 、Megatron-LM 模型在標準語言任務上的性能指標——WikiText-103 困惑度(越低性能越好)、LAMBADA 下一個詞的預測準確度(越高性能越好)的對比情況如下表:

Open AI 使用了額外的處理(停用詞過濾)讓 GPT-2 實現了更好的表現,而Turing-NLG 和Megatron-LM 模型都沒有使用到該停用詞過濾技術。

無論在WikiText-103 困惑度上還是在LAMBADA 下一個詞的預測準確度上,Turing-NLG 模型的表現都優於Open AI GPT-2和Megatron-LM 模型。

而下圖則展示了Turing-NLG模型(藍線和綠線)和Megatron-LM 模型(橙線)在驗證困惑度上的表現對比情況:

圖1:Turing-NLG 17B 模型(藍線和綠線)和Megatron-8B 模型(橙線)在驗證困惑度上的對比圖。虛線表示當前性能最佳模型實現的最低驗證損失。圖中從藍線到綠色的轉換,代表 Turing-NLG 模型的性能從弱於當前性能最佳模型到超越當前性能最佳模型的轉變。

據圖顯示,Turing-NLG 模型在驗證困惑度上的表現也始終要比Megatron-LM 模型要好。

2、Turing-NLG 在問答和摘要任務上實現的兩大突破

在問答和摘要任務上,Turing-NLG 分別實現了兩個方面的突破:

1)實現了直接生成問答或在零樣本下生成問答的能力

很多網絡用戶在網頁上搜索問題的時候,往往會在答案頁面的頂部看到一張答案卡片,而這些答案大多為某個段落上下文中可以回答問題的句子。

Turing-NLG 則可以直接回答用戶的問題,從而滿足他們的信息搜索需求。例如,當用戶搜索「Jason Mraz 與誰訂婚了?」時,大多數搜索引擎在展示完整的答案頁面時,會突出顯示「Tristan Prettyman」這個名字,如下圖所示:

而Turing-NLG則會直接用一個完整的句子:「Jason Mraz 與Tristan Prettyman訂婚了」。在網頁搜索以外的應用場景中,這種直接生成回答的能力還要更加重要,例如,當用戶詢問其個人輸入(如電子郵箱或Word 文檔)時,這種能力能夠讓 AI 助手智能化地對此問題進行回復,更加自然而不顯得突兀。

Turing-NLG 模型還擁有「零樣本」問答的能力,也就是說能夠在沒有上下文段落的情況下,回答問題。下圖展示了該模型在沒有給出段落的情況下直接回答問題的兩個案例:

在該情況下,Turing-NLG 模型依賴預訓練期間所獲得的知識,生成了最終的答案。

下圖展示了Turing-NLG 模型和此前的基準系統(類似於CopyNet的 LSTM模型)在事實正確性(Factual Correctness)和語法正確性(Grammatical Correctness)兩項指標上的對比情況:

微軟研究者發現,大型的預訓練模型需要更少下游任務的示例來更好地對其進行學習,而他們僅僅只有最多100,000 個「直接」回答問題的樣本,並且模型訓練的示例也非常少,在這樣的情況下,Turing-NLG 模型無論在事實正確性(Factual Correctness)和語法正確性(Grammatical Correctness)上,都比 LSTM 基準模型的表現更好。

2)能夠在更少的監督下生成抽象式摘要

在自然語言處理的文獻中,摘要分為兩種:

  • 提取式摘要:從文檔中提取出少量的句子作為摘要內容;
  • 抽象式摘要:使用 NLG 模型生成摘要,就像人類做摘要的方式一樣。

而Turing-NLG模型則旨在像人類一樣,為電子郵件、博客文章、Word 文檔甚至是Excel 表格和PPT 演示等各種各樣的文本文檔「編寫」抽象式摘要。

其中一個主要的挑戰便是缺少面向這些場景的有監督的訓練數據,因為人類並不總會明確地對這些文檔類型做摘要處理。而 Turing-NLG 的強大之處則在於,它非常擅長理解文本,以至於不需要太多的監督就能夠比其他摘要技術,表現更好。

為了讓Turing-NLG 儘可能廣泛地為不同類型的文本生成摘要,研究者們還在幾乎所有對外開放的摘要數據集上,採用多任務模式對Turing-NLG模型進行了微調。

下圖展示了 Turing-NLG 模型和 PEGASUS(同樣為最近新提出的基於Transformer的語言模型)、SOTA(先前性能最佳的語言模型)在 ROUGE評價指標上的對比情況:

其中需要注意的是,Turing-NLG 採用多任務模式進行了訓練,即在所有數據集上進行了同步訓練。

而眾所周知,ROUGE評價指標在摘要任務方面存在一定的缺陷,因而在下表中展示了Turing-NLG 模型對一些公開文章輸出的摘要內容以供參考:

二、ZeRO & DeepSpeed:優化器+深度學習庫助力大模型訓練

正如上所述,Turing-NLG是建立在ZeRO 優化器和DeepSpeed庫基礎上開發出來的。

DeepSpeed作為微軟最新發佈的深度學習開源庫,能夠提高模型訓練的速度、成本以及可用性。

更為重要的是,最新發佈的DeepSpeed解鎖了其訓練1000億參數模型的能力,雖然不是超參數的數量,但是在大規模數據訓練領域也算是首屈一指了。

DeepSpeed與PyTorch兼容,裏面內嵌ZeRO並行優化器,利用這個優化器,可以大大減少模型和數據並行性所需的資源,同時可以大幅度增加可訓練的參數數量。

具體而言,零冗餘優化器(Zero Redundancy Optimizer,簡稱Zero)是一種面向大規模分佈式深度學習的新型存儲優化技術。其可以在當前一代GPU集群上訓練1000億個參數的深度學習模型,吞吐量大概是當前最棒系統的3到5倍。

1、使用ZeRO克服數據並行性和模型並行性的局限性

論文已發佈,地址:

https://arxiv.org/pdf/1910.02054.pdf

毋庸置疑,大型的深度學習模型可以顯著提高準確度,但是直接訓練數帶有十億參數的模型,硬件往往受不了。為了解決這種硬件內存問題,通常的解決方案是兼顧計算資源、效率,但是往往卻有以下兩點限制:

  • 數據的並行性對節約設備的內存起不到什麼作用:即使32G的GUP,在面對10億個參數的模型也束手無策。
  • 由於細粒度並行計算和通信昂貴,模型並行不能有效地擴展到單個節點之外。

但是,使用ZeRO可以克服數據並行性和模型並行性的局限。ZeRO通過跨數據並行進程劃分模型狀態(參數,梯度和優化器狀態),在一定程度上能夠消除數據並行進程之間的內存冗餘。ZeRO還能夠在模型訓練期間動態規劃通信,保證了分佈式設備之間共享必要的狀態,從而保持數據粒度的計算和通信量。

換句話說ZeRO允許每個設備的內存使用量隨數據並行性的程度而進行線性擴展,也即只要聚合的設備內存足夠大,ZeRO支持的數據並行性可以「拿下」任意大小的模型。

ZeRO主要有三個優化階段,如下圖所示分,這三個階段別是:優化器狀態、梯度和參數的劃分。

圖註:與標準數據並行基準相比,ZeRO的三個階段節省的內存和通信量。其中Ψ表示模型中參數的數量,K是優化器特定的常數項。

更為具體的:優化器狀態分區(Pos)階段內存降低到了原來的1/4;增加梯度分區((Pos+g)階段內存減少到原來的1/8,此外。通信量與數據並行度相同;添加參數分區階段內存減少量與數據並行度Nd成線性關係。

啟用上述所有三個階段後,使用ZeRO就可以用1024個 NVIDIA 型號的GPU 上訓練一個萬億參數模型。如果使用具16位精度的Adam來訓練一個萬億參數級別的模型大概需要16TB的內存才能讓優化器保持訓練狀態。16TB除以1024等於16GB,還好在GPU內存的合理範圍。內

下面這個視頻展示了ZeRO的三個階段,包括執行訓練的步驟:向前傳遞、向後傳遞和參數更新。

2、DeepSpeed:PyTorch兼容性和系統性能

前面也提到,最先發佈DeepSpeed能夠與PyTorch兼容,並且引入的輕量級API 包含最新的訓練技術,例如ZeRO,分佈式訓練,混合精度等等。

在操作層面上,只需對PyTorch模型進行簡單的幾行代碼更改,就可以利用DeepSpeed提高模型訓練的速度和規模。

左圖:與Megatron-LM相比吞吐量的程度。右圖:使用和不使用ZeRO時,對於單獨使用數據並行性的可訓練模型大小比較。

如上圖所示,DeepSpeed在規模、 速度、成本、 可用性這四個方面標新都非常出色。

  • 規模:當前最先進的大規模訓練,例如OpenAI GPT-2,NVIDIA Megatron-LM和Google T5,其大小也就分別是15億、83億和110億個參數。而有ZeRO加持的DeepSpeed能夠運行1000億個參數。
  • 速度:現有的吞吐量比當前最先進的技術都要高出5倍。例如為了能夠在GPT系列有效訓練模型,DeepSpeed將ZeRO功率(ZeRO-powered)數據並行與NVIDIA Megatron-LM模型並行相結合。另外,在具有低帶寬互連的NVIDIA GPU群集上,對具有15億參數的標準GPT-2模型,與單獨使用Megatron-LM相比,吞吐量提高了3.75倍。這種速度的提高與DeepSpeed更高的內存效率以及使用較低程度的模型並行有關,當然較大的批處理量也在提高吞吐量的工作中做了貢獻。
  • 成本:提高吞吐量的同時,對訓練成本的節約也是非常大的。例如,要訓練具有200億個參數的模型,傳統則比DeepSpeed需要的資源多3倍。
  • 可用性:只需更改幾行代碼就可在PyTorch模型中使用DeepSpeed和ZeRO。也就是說與當前的模型並行性庫相比,DeepSpeed不需要重新設計代碼或重構模型,即使對於參數多達60億的模型,也可以方便地使用ZeRO提供支持的數據並行性。

綜上所述,ZeRO-OS與不同類型的模型並行性互補併兼容,對於不適合單個節點的大型模型,它能夠顯着提升性能,節省資源等等優點。

三、Reddit 評價:褒貶不一

正如文章開頭所稱,微軟DeepSpeed中利用ZeRO-OS來訓練一個170億參數的Turing-NLG模型,訓練結果表明其準確性和訓練效率高於當前的最新方法。

與單獨使用NVIDIA Megatron-LM相比,ZeRO-OS能夠大量節省內存,並使Turning-NLG模型的模型並行度降低到原來1/4,批處理量增大4倍,吞吐量增長3倍。

至於這自帶170億參數的Turing-NLG模型,也在社交媒體上引起了不少討論,Reddit的「r/MachineLearning」版面中,僅僅10個小時,相關話題熱度已經達到了216,70多人發表了看法。

討論頁面:https://www.reddit.com/r/MachineLearning/comments/f1tuv0/r_turingnlg_a_17billionparameter_language_model/

跟帖最高的一條評論是這樣說的:

幸好是170億個參數,而不是170億個超參數。當前最智能的機器有着超過100萬億的參數(他這裡說的是人類),並不否認效率也很重要,但是在資金充足的情況下,參數多一些並沒有什麼錯呀。

針對這條評論,也有人回應說,這種比較沒有意義,想想神經元之間的質量差異,尤其是最新研究單表明,單個人類神經元也可以異或運算,這就相當於2層人工神經網絡了。

也有評論將討論引入了複雜的生物學:人類神經元是其數千個突觸的複雜網絡。合理地說,突觸與NN參數可比約為1:1,而神經元與NN神經元可比約為1:1,因為在NN中,需要一小束「神經元」才能達到複雜性。

吃瓜群眾質疑道:提起圖靈,我就想起了「營銷」,

當然,也有更加專業的討論:知道添加多少個參數之後,下一步怎麼辦?

這條消息的發佈者指出了這項工作的不足:是否有足夠的VRAM在單個GPU上運行模型仍然沒有解決。

也有網友提到了碳排放:更多的參數意味着更多的碳消耗。

那麼,你對此模型有何看法?~~~