76分鐘訓練BERT!谷歌大腦新型優化器LAMB加速大批量訓練

2021-01-15 機器之心Pro

選自arXiv

作者:Yang You、Jing Li等

機器之心編輯部

去年,谷歌發布了基於雙向 Transformer 的大規模預訓練語言模型 BERT 並開源。該模型參數量非常大——3 億,訓練時間也很長。近日,來自谷歌大腦的研究者提出了一種新型優化器 LAMB,有效降低 BERT 預訓練時間,76 分鐘即可完成 BERT 預訓練!

儘管 BERT效果驚人,但它所需的計算量非常大,原作者在論文中也表示每次只能預測 15% 的詞,因此模型收斂得非常慢。如果我們想保留這種 Mask 機制,那麼就需要尋找另一種加速方法了。

當時,BERT 的作者在 Reddit 上也表示預訓練的計算量非常大,Jacob 說:「OpenAI 的 Transformer 有 12 層、768 個隱藏單元,他們使用 8 塊 P100 在 8 億詞量的數據集上訓練 40 個 Epoch 需要一個月,而 BERT-Large 模型有 24 層、2014 個隱藏單元,它們在有 33 億詞量的數據集上需要訓練 40 個 Epoch,因此在 8 塊 P100 上可能需要 1 年?16 Cloud TPU 已經是非常大的計算力了。」

而在谷歌大腦的這篇新論文中,研究者提出新型優化器LAMB,通過使用 65536/32768 的批量大小,他們只需要 8599 次迭代、76 分鐘就能完成 BERT 預訓練。總體而言,相比基線 BERT-Large 用 16 塊 TPU 晶片,LAMB 訓練 BERT-Large 用了一個 TPU v3 Pod(1024 塊 TPU 晶片),因此時間也由 3 天降低為 76 分鐘。

不過在 BERT 原論文中,訓練 BERT-Large 使用了 64 塊 TPU 晶片(16 Cloud TPU),它需要花四天時間完成訓練。

論文:Reducing BERT Pre-Training Time from 3 Days to 76 Minutes

論文地址:https://arxiv.org/abs/1904.00962

摘要:大批量訓練是加速大型分布式系統中深度神經網絡訓練的關鍵。但是,大批量訓練難度很大,因為它會產生泛化差距(generalization gap),直接優化通常會導致測試集準確率受損。BERT [4] 是當前最優的深度學習模型,它基於用於語言理解的深度雙向 transformer 而構建。當我們擴展批量大小時(比如批量大小超過 8192),之前的大批量訓練技術在 BERT 上的執行性能並不好。BERT 預訓練需要大量時間(使用 16 個 TPUv3 訓練 3 天)。

為了解決這個問題,來自谷歌大腦的研究者提出了一種新型優化器 LAMB,可在不損害準確率的情況下將批量大小擴展至 65536。LAMB 是一款通用優化器,它適用於小批量和大批量,且除了學習率以外其他超參數均無需調整。基線 BERT-Large 模型的預訓練需要 100 萬次迭代,而 LAMB 使用 65536/32768 的批量大小,僅需 8599 次迭代。研究者將批量大小擴展到 TPUv3 pod 的內存極限,在 76 分鐘內完成了 BERT 的訓練。

具體來講,LAMB 優化器支持自適應元素級更新(adaptive element-wise updating)和準確的逐層修正(layer-wise correction)。LAMB 可將 BERT 預訓練的批量大小擴展到 64K,且不會造成準確率損失。BERT 預訓練包括兩個階段:1)前 9/10 的訓練 epoch 使用 128 的序列長度,2)最後 1/10 的訓練 epoch 使用 512 的序列長度。

基線 BERT-Large 模型的預訓練需要 100 萬次迭代,研究者僅使用 8599 次迭代就完成了預訓練,將訓練時間從 3 天縮短到 76 分鐘。該研究使用的訓練批量大小接近 TPUv3 pod 的內存極限。LAMB 優化器可以將批量大小擴展到 128k 甚至更大,由於硬體限制,研究者在序列長度為 512 時使用的批量大小為 32768,在序列長度為 128 時使用的批量大小為 65536。該論文中的 BERT 模型均指 BERT-Large。為公平起見,研究中所有實驗均運行同樣數量的 epoch(即固定數量的浮點運算)。實驗結果見下表。

表 1:該研究使用 SQuAD-v1 的 F1 分數作為準確率度量。

在上表中,基線 F1 分數來自於 BERT 開源 GitHub 中 BERT-Large 預訓練模型的對應分數。實驗所用硬體為 TPUv3,實驗設置與基線 BERT-Large 相同:前 9/10 的訓練 epoch 使用 128 的序列長度,最後 1/10 的訓練 epoch 使用 512 的序列長度。所有實驗均運行同樣數量的 epoch。

LAMB (Layer-wise Adaptive Moments optimizer for Batch training)

BERT 基線模型的訓練使用 Adam with weight decay(Adam優化器的變體)作為優化器 [15]。另一個成功用於大批量卷積神經網絡訓練的自適應優化器是 LARS [21]。這些優化器啟發了研究者提出用於大批量 BERT 訓練的新型優化器 LAMB。LAMB 優化器詳見算法 1。

實驗

常規訓練

TPU 是強大的浮點運算計算硬體。研究者在所有實驗中均使用 TPUv3。每個 TPUv3 pod 擁有 1024 個晶片,可提供超過 100 petaflops 的混合精度計算。實驗結果見表 1。基線模型預訓練過程中使用了 Wikipedia 和 BooksCorpus 數據集。研究者使用與開源 BERT 模型相同的數據集進行預訓練,即包含 2.5B 單詞的 Wikipedia 數據集和包含 800M 單詞的 BooksCorpus 數據集。

BERT 作者首先以 128 的序列長度進行 900k 次迭代,然後以 512 的序列長度進行 100k 次迭代。在 16 塊 TPUv3 上訓練的總時間大約為 3 天。該研究使用 SQuAD-v1 的 F1 分數作為準確率度量。較高的 F1 分數意味著較好的準確率。研究者下載了 BERT 開源項目中提供的預訓練模型。使用 BERT 作者提供的腳本,基線模型得到了 90.395 的 F1 分數。

該研究中,研究者使用 BERT 作者提供的數據集和基線模型,僅改變了優化器。使用新型優化器 LAMB 後,研究者以 32768 的批量大小進行了 15625 次迭代,得到了 91.460 的 F1 分數(用於序列長度 128 的迭代有 14063 次,用於序列長度 512 的迭代有 1562 次)。研究者將 BERT 訓練時間從 3 天縮短到大約 100 分鐘。

該研究取得了 76.7% 的弱可擴展性效率(weak scaling efficiency)。研究者在 TPU Pod 上使用了分布式訓練的同步數據並行化,因此梯度遷移會產生通信開銷。這些梯度與訓練後的模型大小一樣。在 ImageNet 數據集上訓練 ResNet-50 時的弱可擴展性效率可達到 90+%,因為 ResNet-50 比 BERT 的參數少得多(25 million vs 300 million)。LAMB 優化器無需用戶調整超參數,用戶只需輸入學習率即可。

混合批次訓練(Mixed-Batch Training)

如前所述,BERT 預訓練主要分為兩部分,1)前面 9/10 的 Epoch 使用 128 的序列長度;2)最後 1/10 的 Epoch 使用 512 的序列長度進行訓練。對於第二階段而言,因為內存限制,TPUv3 Pod 上最大的批量大小為 32768,因此第二階段使用的批大小為 32768。對於第一階段,受限於內存,TPUv3 Pod 上最大的批量大小為 131072。然而,研究者將批大小從 65536 增加到 131072 時,並沒有發現明顯的加速,因此研究者將階段 1 的批大小定為 65536。

此前,也有其它研究者討論了混合批次訓練,然而他們是在訓練中增大批量大小;而本研究是降低批大小,這樣他們能從開始到結束充分利用硬體資源。增大批大小能起到 warm-up 初始訓練和穩定最優化過程的效果,但是降低批大小可能會帶來最優化過程的紊亂,並導致訓練的不收斂。

在研究者的實驗中,他們發現有一些技術能穩定第二階段的最優化過程。因為這兩階段會切換到不同的最優化問題,因此有必要重新 warm-up 最優化過程。研究者沒有在第二階段進行學習率衰減,而是將學習率從零開始增加(re-warm-up)。和第一階段一樣,研究者在 re-warm-up 之後執行學習率衰減。因此,研究者能夠以 8599 次迭代完成 BERT 訓練,且僅用時 76 分鐘,達到了 101.8% 的弱可擴展性效率。

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

相關焦點

  • 谷歌大腦新型優化器LAMB加速大批量
    AI+5G心臟手術今天,廣東省人民醫院與廣東高州市人民醫院完成全國首例AI+5G手術,成功為心臟病患者「補心」。【業界 | 76分鐘訓練BERT!谷歌大腦新型優化器LAMB加速大批量訓練】來源:arXiv
  • 聚焦快速機器學習訓練算法,UC伯克利尤洋189頁博士論文公布
    例如,在 8 個 P100 GPU 上完成 90 個 epoch 的 ImageNet/ResNet-50 訓練需要 29 個小時,在 16 個 v3 TPU 晶片上完成 BERT 預訓練需要 81 個小時。因此,如何有效縮短機器學習訓練時間,同時完成高質量的訓練,對於解決當前的瓶頸問題具有重大意義。
  • 中文最佳,哈工大訊飛聯合發布全詞覆蓋中文BERT預訓練模型
    為了利用這種思想提升預訓練模型在中文的表現,百度發布了知識增強的表示模型 ERNIE,在中文數據集的表現中超過了 BERT。近期,谷歌發布了基於全詞覆蓋(Whold Word Masking)的 BERT 預訓練模型,則進一步提升了 BERT 模型的性能水平。然而,由於全詞覆蓋的 BERT 模型的研究測試集中於國外公開數據集,缺乏一種中文語言的相關模型。
  • 優化器怎麼選?一文教你選擇適合不同ML項目的優化器
    例如谷歌研究院在其最近的論文中使用 LARS 訓練一種強大的自監督模型[8]。本文中用 w 代表參數,g 代表梯度,α為每個優化器的全局學習率,t 代表時間步(time step)。隨機梯度下降(SGD)算法
  • 谷歌搜索:幾乎所有的英文搜索都用上BERT了
    BERT 是谷歌開源的一款自然語言處理預訓練模型,一經推出就刷新了 11 項 NLP 任務的 SOTA 記錄,登頂 GLUE 基準排行榜。具體到搜尋引擎來說,BERT 可以幫助搜尋引擎更好地理解 web 頁面上的內容,從而提高搜索結果的相關性。BERT 模型中創新性的 架構是一大亮點。
  • 谷歌最強NLP模型BERT,為何炫酷又強大?騰訊程式設計師給你從頭講起
    通過 Mask 掉某個 head,對比模型前後表現的差異來研究這個 head 對模型有什麼樣的作用(對訓練好的 bert 做 head-mask,不重新訓練,對比測試集的表現)。猜測字粒度 bert 代詞邊界信息是通過 bert 的預訓練任務 MLM 帶來的,語言模型的訓練使得 bert 對各個字之間的組合非常的敏感,從而能夠區分詞的邊界信息。
  • 華為諾亞方舟開源預訓練模型「哪吒」,4項任務均達到SOTA
    研究人員在中文維基百科、中文新聞、百度百科數據上訓練NEZHA模型,並且和谷歌發布的中文BERT,以及哈工大和科大訊飛聯合發布的BERT-WWM,還有百度發布的ERNIE-Baidu進行了比較。從下表可以看出,NEZHA在XNLI,LCQMC,PeoplesDaily NER,ChnSenti任務上達到了先進水平(SOTA)。
  • 谷歌大腦提出「洗髮水」二階優化算法,Transformer訓練時間減少40%
    最近,谷歌大腦提出了一種新的二階預處理方法,帶來很大改進,優於SGD、Adam和AdaGrad等一階算法,縮短了神經網絡的訓練時間。它在Transformer訓練任務中比任何一階方法都快得多,而且能達到相同甚至更高的精度。連Jeff Dean也不禁在Twitter上點讚。
  • Pytorch-Transformers 1.0 發布,支持六個預訓練框架,含 27 個預...
    哪些支持PyTorch-Transformers(此前叫做pytorch-pretrained-bert)是面向自然語言處理,當前性能最高的預訓練模型開源庫。該開源庫現在包含了 PyTorch 實現、預訓練模型權重、運行腳本和以下模型的轉換工具:1、谷歌的 BERT,論文:「BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding」,論文作者:Jacob Devlin, Ming-Wei
  • 1.6萬億參數的語言模型:谷歌大腦提出Switch Transformer,預訓練...
    最後,研究者在 Colossal Clean Crawled Corpus 上進行預訓練,將語言模型的參數量提升至上萬億,且相比 T5-XXL 模型實現了 4 倍加速。研究者還表示,雖然這項工作著眼於規模,但它也表明,Switch Transformer 架構不僅在具備超級計算機的環境下具有優勢,在只有幾個計算核心的計算機上也是有效的。
  • 保護隱私快速訓練,Facebook開源Opacus,用差分隱私訓練PyTorch
    那麼,如何方便地使用差分隱私來訓練機器學習模型呢?近日,Facebook 開源了 Opacus 庫,支持以這種方式訓練 PyTorch 模型。近日,Facebook 開源了一個新型庫 Opacus,它支持使用差分隱私來訓練 PyTorch 模型,擴展性優於目前的 SOTA 方法。
  • 直接對梯度下手,阿里提出新優化技巧,一行代碼即可改善現有優化器
    只需一行代碼即可嵌入現有的 DNN 優化器中,還可以直接對預訓練模型進行微調。優化技術對於深度神經網絡 (DNN) 的高效訓練至關重要。以往的研究表明,使用一階和二階統計量(如平均值和方差)在網絡激活或權重向量上執行 Z-score 標準化(如批歸一化 BN 和權重標準化 WS)可以提升訓練性能。
  • 新型大腦訓練有助於防止酗酒治療後的復發
    最近的一項研究表明,通過抑制潛意識大腦的活動來防止酒精濫用復發是可能的。這一結果導致了一款名為「SWiPE」的個性化智慧型手機應用程式的全球首例試驗。 認知偏差修正(Cognitive Bias Modification)是一種新型的計算機大腦訓練
  • 谷歌大腦提出簡化稀疏架構,預訓練速度可達T5的7倍
    此外,他們提出的訓練技術還提高了訓練的穩定性,首次表明大型稀疏模型也可以用低精度(bfloat16)進行訓練。最後,研究者在 Colossal Clean Crawled Corpus 上進行預訓練,將語言模型的參數量提升至上萬億,且相比 T5-XXL 模型實現了 4 倍加速。研究者還表示,雖然這項工作著眼於規模,但它也表明,Switch Transformer 架構不僅在具備超級計算機的環境下具有優勢,在只有幾個計算核心的計算機上也是有效的。
  • 乾貨| BERT fine-tune 終極實踐教程
    不過所幸的是谷歌滿足了Issues#2裡各國開發者的請求,針對大部分語言都公布了BERT的預訓練模型。因此在我們可以比較方便地在自己的數據集上進行fine-tune。下載預訓練模型對於中文而言,google公布了一個參數較小的BERT預訓練模型。
  • TensorFlow 2.4來了:上線對分布式訓練和混合精度的新功能支持
    選自TensorFlow Blog機器之心編譯編輯:小舟、蛋醬今天,谷歌正式發布了 TensorFlow 2.4,帶來了多項新特性和功能改進。混合精度指的是在同一模型中使用 16 位和 32 位浮點數以進行更快的訓練。這一 API 可將模型性能在 GPU 上提高到 3 倍,在 TPU 上提高 60%。要使用混合精度 API,必須使用 Keras 層和優化器,但不一定需要使用其他 Keras 類。
  • 谷歌大腦:只要網絡足夠寬,激活函數皆可拋
    但最近谷歌大腦的研究者表明只要網絡足夠寬,線性化的網絡可以產生和原版網絡相近的預測結果和準確率,即使沒有激活函數也一樣。這有點反直覺,你現在告訴我 Wide ResNet 那樣的強大模型,在 SGD 中用不用激活函數都一樣?基於深度神經網絡的機器學習模型在很多任務上達到了前所未有的性能。這些模型一般被視為複雜的系統,很難進行理論分析。
  • 使用BERT和TensorFlow構建搜尋引擎
    這個實驗的計劃是: 獲得預先訓練的BERT模型檢查點提取針對推理優化的子圖使用tf.Estimator創建特徵提取器用T-SNE和嵌入式投影儀探索向量空間實現最近鄰搜尋引擎用數學加速最近鄰查詢示例:構建電影推薦系統
  • 7 Papers & Radios | EMNLP 2020最佳論文;新型優化器AdaBelief
    儘管此前已經有利用有聲語音期間收集的 EMG 訓練語音合成模型的研究,但該研究首次利用了在無聲發音期間收集的 EMG 進行訓練。具體而言,研究者提出了一種通過將音頻目標從有聲信號轉換為無聲信號來對無聲 EMG 進行訓練的方法。與僅使用有聲數據進行訓練的基線方法相比,該方法顯著提升了從無聲 EMG 中生成音頻的清晰度。
  • 右腦開發訓練第二天,每天十五分鐘訓練你的大腦,詳細教程
    昨天的訓練,相信大家應該完成得很好!在最初的訓練中,取得的效果是很小的,特別是黃卡和曼陀羅卡片要想看到原色,是需要時間的,快的有可能一兩天,慢的可能會需要十天,甚至是十幾天。接下來就開始進行第二天的訓練。1.