《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 32分鐘訓(xùn)練神經(jīng)機(jī)器翻譯,速度提升45倍

32分鐘訓(xùn)練神經(jīng)機(jī)器翻譯,速度提升45倍

2018-09-10

深度模型的訓(xùn)練時(shí)間通常對(duì)研究者而言都是很大的挑戰(zhàn),我們需要花數(shù)小時(shí)甚至數(shù)天才能知道某個(gè)小改進(jìn)到底好不好。然而如果我們從一開始就考慮降低模型訓(xùn)練時(shí)間,那么很多概念都能迅速驗(yàn)證。在 Facebook 開發(fā)者的試驗(yàn)中,他們采用了低精度和大批量等一系列加速訓(xùn)練方法,并成功地將需要 24 小時(shí)訓(xùn)練的 NMT 降低到 32 分鐘。該項(xiàng)目相關(guān)的分布式訓(xùn)練代碼已開源。


項(xiàng)目地址:https://github.com/pytorch/fairseq

微信圖片_20180910214226.gif


我們想讓用戶用自己喜歡的語(yǔ)言體驗(yàn)我們的產(chǎn)品,同時(shí)與世界各地的人們建立聯(lián)系。為此,我們使用神經(jīng)機(jī)器學(xué)習(xí)(NMT)自動(dòng)翻譯帖子和內(nèi)容中的文本。我們之前關(guān)于這一課題的研究 fairseq 已經(jīng)開源,這是一個(gè)序列到序列的學(xué)習(xí)庫(kù),可供任何人訓(xùn)練 NMT 模型,完成自動(dòng)摘要或其他文本生成任務(wù)。


隨著 NMT 模型在從大規(guī)模單語(yǔ)數(shù)據(jù)(只有一種語(yǔ)言的數(shù)據(jù))中的學(xué)習(xí)越來(lái)越成功,訓(xùn)練速度變得越來(lái)越重要。為了適應(yīng)這樣的發(fā)展,我們必須想辦法大大減少訓(xùn)練時(shí)間。直到最近,NMT 模型的這種訓(xùn)練在單臺(tái)機(jī)器上還需要數(shù)周,對(duì)于快速實(shí)驗(yàn)和部署來(lái)說(shuō),這一速度實(shí)在太慢。


由于在精度和訓(xùn)練設(shè)置上做了幾項(xiàng)改變,我們?cè)诙潭?32 分鐘內(nèi)就能訓(xùn)練一個(gè)強(qiáng)大的 NMT 模型(參見(jiàn)《Scaling Neural Machine Translation》),速度是原來(lái)的 45 倍(原來(lái)需要 24 小時(shí))。在之后的一項(xiàng)研究《Understanding Back-Translation at Scale》中,我們展示了這一速度大幅提升的訓(xùn)練設(shè)置如何讓我們利用單語(yǔ)文本訓(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)練


我們首先在一臺(tái)配備 8 塊 Volta GPU 的英偉達(dá) DGX-1 機(jī)器上把模型的訓(xùn)練時(shí)間從近 24 小時(shí)縮減至不到 5 小時(shí)。神經(jīng)網(wǎng)絡(luò)包含數(shù)百萬(wàn)個(gè)參數(shù),這些參數(shù)在訓(xùn)練過(guò)程中會(huì)被調(diào)整并通常以 32 位浮點(diǎn)精度存儲(chǔ)。然后,我們把訓(xùn)練的精度從 32 位轉(zhuǎn)換為 16 位,這樣不僅能減少 GPU 內(nèi)存占用,還讓我們能夠使用英偉達(dá)最新 Volta GPU 架構(gòu)提供的經(jīng)過(guò)高度優(yōu)化的 Tensor Core。降低了精度(16 位)的訓(xùn)練有時(shí)會(huì)由于浮點(diǎn)「溢出」而導(dǎo)致模型質(zhì)量降低。在本研究中,我們實(shí)施了一個(gè)已知的自動(dòng)監(jiān)控和防止溢出程序,并將訓(xùn)練時(shí)間從近 24 小時(shí)減至 8.25 小時(shí),速度提升 2.9 倍而沒(méi)有降低模型質(zhì)量。


接下來(lái),我們通過(guò)所謂的累積更新,延遲了模型更新來(lái)減少 GPU 之間的通信。通過(guò)同步訓(xùn)練模型,從而每個(gè) GPU 可以維持一個(gè)完整、相同的模型副本,但是會(huì)處理訓(xùn)練數(shù)據(jù)的不同部分。處理時(shí)需要反向傳播——在網(wǎng)絡(luò)上被分為 forward pass 和 backward pass(前向/反向),以計(jì)算訓(xùn)練模型所需的統(tǒng)計(jì)量。在處理每個(gè)小批量(mini-batch),GPU 會(huì)同步地相互交流結(jié)果(梯度)。這樣可能導(dǎo)致效率低下:首先,在 GPU 之間發(fā)送數(shù)據(jù)會(huì)消耗時(shí)間;其次,處理較快的工作站必須等待速度較慢的工作站(即所謂散兵游勇),然后訓(xùn)練才能繼續(xù)。


后者對(duì)于文本相關(guān)模型來(lái)說(shuō)是一大挑戰(zhàn),不同的句子長(zhǎng)度會(huì)使這個(gè)問(wèn)題更加嚴(yán)重。我們對(duì)這兩個(gè)問(wèn)題的解決方案是在工作線程互相通信之前,讓每個(gè)工作線程處理并累積多個(gè)小批量的結(jié)果,從而延遲同步點(diǎn)。這將訓(xùn)練時(shí)間縮減至 7.5 小時(shí),且無(wú)損模型質(zhì)量。


累積更新還能增加有效的批大小,即每一個(gè)訓(xùn)練步所使用的數(shù)據(jù)量。在我們的研究設(shè)置中,批大小增大為 16 倍。這使得學(xué)習(xí)率可以翻倍,訓(xùn)練時(shí)間減少到 5.2 個(gè)小時(shí),比原始系統(tǒng)實(shí)現(xiàn)了 4.6 倍的加速。


圖:通過(guò) (i) 減少工作站之間的通信、(ii) 減少不同 GPU 的工作負(fù)載變化從而節(jié)約閑置時(shí)間,累加多個(gè)前向/反向步驟的梯度,實(shí)現(xiàn)訓(xùn)練加速。

微信圖片_20180910214254.jpg

最后,我們使用 16 位浮點(diǎn)數(shù)來(lái)進(jìn)一步提高每一個(gè)工作站的批大小,從而利用釋放出的額外 GPU 內(nèi)存。通過(guò)將每個(gè)工作站的批大小從 3.5K 單詞提升到 5K 單詞,該研究將總訓(xùn)練時(shí)間減少到 4.9 個(gè)小時(shí),對(duì)原始系統(tǒng)實(shí)現(xiàn)了 4.9 倍的加速。


擴(kuò)展


我們對(duì)單個(gè)機(jī)器訓(xùn)練的優(yōu)化還可應(yīng)用于在多個(gè)機(jī)器上進(jìn)行并行訓(xùn)練(即分布式訓(xùn)練)。我們將訓(xùn)練從單個(gè) DGX-1 機(jī)器擴(kuò)展到 16 個(gè)機(jī)器(即 128 塊 GPU),發(fā)現(xiàn)可以在 37 分鐘內(nèi)訓(xùn)練完成同樣的模型,與原始的單機(jī)器設(shè)置相比,速度提升了 38.6 倍。


在多個(gè)機(jī)器上訓(xùn)練時(shí),另一個(gè)優(yōu)化是同時(shí)發(fā)生 GPU 通信和反向傳播。在反向傳播之后,我們將所有信息傳達(dá)給其他工作站。典型情況下,反向傳播和通信按順序執(zhí)行,但是我們通過(guò)盡可能并行 GPU 通信和反向傳播而節(jié)省時(shí)間。具體來(lái)說(shuō),我們?cè)诜聪騻鞑ゲ襟E結(jié)束后立刻開始在多個(gè)工作站之間同步梯度。這樣 GPU 通信和反向傳播發(fā)生就實(shí)現(xiàn)了并行,這節(jié)省了 14% 的訓(xùn)練時(shí)間,且使總訓(xùn)練時(shí)間從將近 24 個(gè)小時(shí)下降到 32 分鐘,速度提升了 44.7 倍。

微信圖片_20180910214342.jpg

圖:反向傳播與梯度同步的并行示意圖。

微信圖片_20180910214407.jpg

圖:每次改進(jìn)后訓(xùn)練總時(shí)間的變化情況。


在更多未翻譯數(shù)據(jù)上訓(xùn)練


加速訓(xùn)練允許我們?cè)诟髷?shù)據(jù)集上訓(xùn)練模型。一般而言,訓(xùn)練 NMT 模型需要原文與參考譯文對(duì)應(yīng)的成對(duì)文本,例如雙語(yǔ)數(shù)據(jù)等。但是,雙語(yǔ)數(shù)據(jù)相對(duì)于網(wǎng)絡(luò)上或其它地方常見(jiàn)的大量單語(yǔ)數(shù)據(jù)要有限地多。在第二篇論文《Understanding Back-Translation at Scale》中,我們展示了如何通過(guò)僅提供我們想要翻譯的語(yǔ)言的文本來(lái)提升模型的翻譯性能,以及利用大量的此類數(shù)據(jù)可以大幅提升模型準(zhǔn)確度。


通過(guò)單語(yǔ)數(shù)據(jù)提升 NMT 模型最高效的方法之一是反向翻譯(back-translation)。如果我們的目標(biāo)是訓(xùn)練一個(gè)英語(yǔ)到德語(yǔ)的翻譯模型,我們可以首先訓(xùn)練一個(gè)從德語(yǔ)翻譯到英語(yǔ)的模型并利用該模型翻譯所有的單語(yǔ)德語(yǔ)數(shù)據(jù),然后在已有的和新的數(shù)據(jù)上簡(jiǎn)單地訓(xùn)練一個(gè)英語(yǔ)到德語(yǔ)的最終模型。我們的論文顯示,數(shù)據(jù)如何被翻譯是非常重要的,通過(guò)采樣故意不總是選擇最好的翻譯同樣也是非常重要的。

微信圖片_20180910214435.gif

圖:演示反向翻譯的動(dòng)畫


如果我們把 2.26 億個(gè)反向翻譯的句子添加到現(xiàn)有的包含 500 萬(wàn)個(gè)句子的訓(xùn)練數(shù)據(jù)中,我們就能大幅提升翻譯質(zhì)量。下圖(左)顯示了這一系統(tǒng)在標(biāo)準(zhǔn) WMT』14 英-德基準(zhǔn)測(cè)試集上的準(zhǔn)確率(fairseq & 單語(yǔ)數(shù)據(jù))。該系統(tǒng)可以在 16 個(gè) DGX-1 機(jī)器上經(jīng)過(guò) 22.5 小時(shí)訓(xùn)練而成。圖中還顯示了 DeepL 的準(zhǔn)確率,這是一個(gè)依賴于高質(zhì)量人工翻譯的專業(yè)翻譯服務(wù),此前該服務(wù)在該基準(zhǔn)測(cè)試上表現(xiàn)最佳。

微信圖片_20180910214456.jpg


快速翻譯


我們還提高了 fairseq 模型的翻譯速度。具體來(lái)說(shuō),我們實(shí)現(xiàn)了很巧妙的高速緩存,或從計(jì)算和批處理中移除完成句子的幾個(gè)單詞而不是句子。這提高了大約 60% 的速度。下圖展示了 fairseq 和其它工具集的對(duì)比。只從 32 位浮點(diǎn)數(shù)變到 16 位浮點(diǎn)數(shù)就能提升 40% 的速度。

微信圖片_20180910214542.jpg

圖:在標(biāo)準(zhǔn) WMT』14 英語(yǔ)-德語(yǔ)基準(zhǔn)測(cè)試集上使用大型 Transformer 模型和 V100GPU 得到的翻譯速度。


未來(lái)計(jì)劃


擴(kuò)展和提高自動(dòng)化翻譯技術(shù)仍將是我們工作的重點(diǎn)。為了讓該研究項(xiàng)目盡快成長(zhǎng)起來(lái),我們共享了分布式訓(xùn)練的代碼,并將其作為我們的 fairseq 開源項(xiàng)目的一部分,從而使其他研究者也可以輕松地以更快的速度訓(xùn)練 NMT 模型。進(jìn)行分布式訓(xùn)練僅需稍微改動(dòng)訓(xùn)練命令。


實(shí)現(xiàn)更快的 NMT 訓(xùn)練是一項(xiàng)激動(dòng)人心的發(fā)現(xiàn)。大幅度地降低訓(xùn)練時(shí)間可以加快實(shí)驗(yàn)周轉(zhuǎn),使我們能更輕松地在更好的模型中做研究。把無(wú)標(biāo)簽數(shù)據(jù)應(yīng)用到翻譯之外的問(wèn)題(如問(wèn)答或自動(dòng)摘要)上也是很不錯(cuò)的發(fā)現(xiàn)。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。