深度模型的訓(xùn)練時間通常對研究者而言都是很大的挑戰(zhàn),,我們需要花數(shù)小時甚至數(shù)天才能知道某個小改進(jìn)到底好不好。然而如果我們從一開始就考慮降低模型訓(xùn)練時間,,那么很多概念都能迅速驗證,。在 Facebook 開發(fā)者的試驗中,他們采用了低精度和大批量等一系列加速訓(xùn)練方法,,并成功地將需要 24 小時訓(xùn)練的 NMT 降低到 32 分鐘,。該項目相關(guān)的分布式訓(xùn)練代碼已開源。
項目地址:https://github.com/pytorch/fairseq
我們想讓用戶用自己喜歡的語言體驗我們的產(chǎn)品,,同時與世界各地的人們建立聯(lián)系,。為此,我們使用神經(jīng)機(jī)器學(xué)習(xí)(NMT)自動翻譯帖子和內(nèi)容中的文本,。我們之前關(guān)于這一課題的研究 fairseq 已經(jīng)開源,,這是一個序列到序列的學(xué)習(xí)庫,可供任何人訓(xùn)練 NMT 模型,,完成自動摘要或其他文本生成任務(wù),。
隨著 NMT 模型在從大規(guī)模單語數(shù)據(jù)(只有一種語言的數(shù)據(jù))中的學(xué)習(xí)越來越成功,訓(xùn)練速度變得越來越重要,。為了適應(yīng)這樣的發(fā)展,,我們必須想辦法大大減少訓(xùn)練時間。直到最近,,NMT 模型的這種訓(xùn)練在單臺機(jī)器上還需要數(shù)周,,對于快速實驗和部署來說,這一速度實在太慢,。
由于在精度和訓(xùn)練設(shè)置上做了幾項改變,,我們在短短 32 分鐘內(nèi)就能訓(xùn)練一個強(qiáng)大的 NMT 模型(參見《Scaling Neural Machine Translation》),速度是原來的 45 倍(原來需要 24 小時)。在之后的一項研究《Understanding Back-Translation at Scale》中,,我們展示了這一速度大幅提升的訓(xùn)練設(shè)置如何讓我們利用單語文本訓(xùn)練準(zhǔn)確得多的模型,。
《Scaling Neural Machine Translation》:https://arxiv.org/abs/1806.00187
《Understanding Back-Translation at Scale》(EMNLP 2018):https://arxiv.org/abs/1808.09381
加速訓(xùn)練
我們首先在一臺配備 8 塊 Volta GPU 的英偉達(dá) DGX-1 機(jī)器上把模型的訓(xùn)練時間從近 24 小時縮減至不到 5 小時。神經(jīng)網(wǎng)絡(luò)包含數(shù)百萬個參數(shù),,這些參數(shù)在訓(xùn)練過程中會被調(diào)整并通常以 32 位浮點精度存儲。然后,,我們把訓(xùn)練的精度從 32 位轉(zhuǎn)換為 16 位,,這樣不僅能減少 GPU 內(nèi)存占用,還讓我們能夠使用英偉達(dá)最新 Volta GPU 架構(gòu)提供的經(jīng)過高度優(yōu)化的 Tensor Core,。降低了精度(16 位)的訓(xùn)練有時會由于浮點「溢出」而導(dǎo)致模型質(zhì)量降低,。在本研究中,我們實施了一個已知的自動監(jiān)控和防止溢出程序,,并將訓(xùn)練時間從近 24 小時減至 8.25 小時,,速度提升 2.9 倍而沒有降低模型質(zhì)量。
接下來,,我們通過所謂的累積更新,,延遲了模型更新來減少 GPU 之間的通信。通過同步訓(xùn)練模型,,從而每個 GPU 可以維持一個完整,、相同的模型副本,但是會處理訓(xùn)練數(shù)據(jù)的不同部分,。處理時需要反向傳播——在網(wǎng)絡(luò)上被分為 forward pass 和 backward pass(前向/反向),,以計算訓(xùn)練模型所需的統(tǒng)計量。在處理每個小批量(mini-batch),,GPU 會同步地相互交流結(jié)果(梯度),。這樣可能導(dǎo)致效率低下:首先,在 GPU 之間發(fā)送數(shù)據(jù)會消耗時間,;其次,,處理較快的工作站必須等待速度較慢的工作站(即所謂散兵游勇),然后訓(xùn)練才能繼續(xù),。
后者對于文本相關(guān)模型來說是一大挑戰(zhàn),,不同的句子長度會使這個問題更加嚴(yán)重。我們對這兩個問題的解決方案是在工作線程互相通信之前,,讓每個工作線程處理并累積多個小批量的結(jié)果,,從而延遲同步點。這將訓(xùn)練時間縮減至 7.5 小時,,且無損模型質(zhì)量,。
累積更新還能增加有效的批大小,即每一個訓(xùn)練步所使用的數(shù)據(jù)量。在我們的研究設(shè)置中,,批大小增大為 16 倍,。這使得學(xué)習(xí)率可以翻倍,訓(xùn)練時間減少到 5.2 個小時,,比原始系統(tǒng)實現(xiàn)了 4.6 倍的加速,。
圖:通過 (i) 減少工作站之間的通信、(ii) 減少不同 GPU 的工作負(fù)載變化從而節(jié)約閑置時間,,累加多個前向/反向步驟的梯度,,實現(xiàn)訓(xùn)練加速。
最后,,我們使用 16 位浮點數(shù)來進(jìn)一步提高每一個工作站的批大小,,從而利用釋放出的額外 GPU 內(nèi)存。通過將每個工作站的批大小從 3.5K 單詞提升到 5K 單詞,,該研究將總訓(xùn)練時間減少到 4.9 個小時,,對原始系統(tǒng)實現(xiàn)了 4.9 倍的加速。
擴(kuò)展
我們對單個機(jī)器訓(xùn)練的優(yōu)化還可應(yīng)用于在多個機(jī)器上進(jìn)行并行訓(xùn)練(即分布式訓(xùn)練),。我們將訓(xùn)練從單個 DGX-1 機(jī)器擴(kuò)展到 16 個機(jī)器(即 128 塊 GPU),,發(fā)現(xiàn)可以在 37 分鐘內(nèi)訓(xùn)練完成同樣的模型,與原始的單機(jī)器設(shè)置相比,,速度提升了 38.6 倍,。
在多個機(jī)器上訓(xùn)練時,另一個優(yōu)化是同時發(fā)生 GPU 通信和反向傳播,。在反向傳播之后,,我們將所有信息傳達(dá)給其他工作站。典型情況下,,反向傳播和通信按順序執(zhí)行,,但是我們通過盡可能并行 GPU 通信和反向傳播而節(jié)省時間。具體來說,,我們在反向傳播步驟結(jié)束后立刻開始在多個工作站之間同步梯度,。這樣 GPU 通信和反向傳播發(fā)生就實現(xiàn)了并行,這節(jié)省了 14% 的訓(xùn)練時間,,且使總訓(xùn)練時間從將近 24 個小時下降到 32 分鐘,,速度提升了 44.7 倍。
圖:反向傳播與梯度同步的并行示意圖,。
圖:每次改進(jìn)后訓(xùn)練總時間的變化情況,。
在更多未翻譯數(shù)據(jù)上訓(xùn)練
加速訓(xùn)練允許我們在更大數(shù)據(jù)集上訓(xùn)練模型。一般而言,,訓(xùn)練 NMT 模型需要原文與參考譯文對應(yīng)的成對文本,,例如雙語數(shù)據(jù)等,。但是,雙語數(shù)據(jù)相對于網(wǎng)絡(luò)上或其它地方常見的大量單語數(shù)據(jù)要有限地多,。在第二篇論文《Understanding Back-Translation at Scale》中,,我們展示了如何通過僅提供我們想要翻譯的語言的文本來提升模型的翻譯性能,以及利用大量的此類數(shù)據(jù)可以大幅提升模型準(zhǔn)確度,。
通過單語數(shù)據(jù)提升 NMT 模型最高效的方法之一是反向翻譯(back-translation),。如果我們的目標(biāo)是訓(xùn)練一個英語到德語的翻譯模型,我們可以首先訓(xùn)練一個從德語翻譯到英語的模型并利用該模型翻譯所有的單語德語數(shù)據(jù),,然后在已有的和新的數(shù)據(jù)上簡單地訓(xùn)練一個英語到德語的最終模型,。我們的論文顯示,數(shù)據(jù)如何被翻譯是非常重要的,,通過采樣故意不總是選擇最好的翻譯同樣也是非常重要的。
圖:演示反向翻譯的動畫
如果我們把 2.26 億個反向翻譯的句子添加到現(xiàn)有的包含 500 萬個句子的訓(xùn)練數(shù)據(jù)中,,我們就能大幅提升翻譯質(zhì)量,。下圖(左)顯示了這一系統(tǒng)在標(biāo)準(zhǔn) WMT』14 英-德基準(zhǔn)測試集上的準(zhǔn)確率(fairseq & 單語數(shù)據(jù))。該系統(tǒng)可以在 16 個 DGX-1 機(jī)器上經(jīng)過 22.5 小時訓(xùn)練而成,。圖中還顯示了 DeepL 的準(zhǔn)確率,,這是一個依賴于高質(zhì)量人工翻譯的專業(yè)翻譯服務(wù),此前該服務(wù)在該基準(zhǔn)測試上表現(xiàn)最佳,。
快速翻譯
我們還提高了 fairseq 模型的翻譯速度,。具體來說,我們實現(xiàn)了很巧妙的高速緩存,,或從計算和批處理中移除完成句子的幾個單詞而不是句子,。這提高了大約 60% 的速度。下圖展示了 fairseq 和其它工具集的對比,。只從 32 位浮點數(shù)變到 16 位浮點數(shù)就能提升 40% 的速度,。
圖:在標(biāo)準(zhǔn) WMT』14 英語-德語基準(zhǔn)測試集上使用大型 Transformer 模型和 V100GPU 得到的翻譯速度。
未來計劃
擴(kuò)展和提高自動化翻譯技術(shù)仍將是我們工作的重點,。為了讓該研究項目盡快成長起來,,我們共享了分布式訓(xùn)練的代碼,并將其作為我們的 fairseq 開源項目的一部分,,從而使其他研究者也可以輕松地以更快的速度訓(xùn)練 NMT 模型,。進(jìn)行分布式訓(xùn)練僅需稍微改動訓(xùn)練命令。
實現(xiàn)更快的 NMT 訓(xùn)練是一項激動人心的發(fā)現(xiàn),。大幅度地降低訓(xùn)練時間可以加快實驗周轉(zhuǎn),,使我們能更輕松地在更好的模型中做研究。把無標(biāo)簽數(shù)據(jù)應(yīng)用到翻譯之外的問題(如問答或自動摘要)上也是很不錯的發(fā)現(xiàn),。