精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
談談NLP下一個主戰場:萬億參數的預訓練模型!

自從BERT誕生以來,各大互聯網巨頭之間就展開了預訓練語言模型軍備競賽,XLNet、ERNIE、RoBERTa、T5、GPT-3....

但當事情進展到號稱自己是zero-shot learner的GPT-3時,批判的聲音變得明顯多了。

這么大,能用嗎?
真的能做到zero-shot嗎?
領域外泛化不行啊...
小學數學題都解不好?
GPT-3生成的內容侵犯了我的隱私!
我魔改下BERT就能小樣本學習上吊打它啊...
生成的內容不合邏輯...
給出的醫療建議不靠譜!

很多人開始質疑,一味的讓模型變大、讓參數量爆炸式增長,真的能帶來真正的語言智能嗎?

但不可否認的是,GPT-3做到了許多早期預訓練模型做不到、做不好的事情,如故事生成、文本->結構生成、Closed-book QA等,相比GPT-2,這個千億參數規模的語言模型不僅生成的文本更流暢了,甚至內容的事實性也有了顯著的改善。

但歸根結底,GPT-3的零樣本和小樣本學習能力主要還是來源于預訓練階段對海量語料的大量記憶,其次是語義編碼能力、遠距離依賴關系建模能力和文本生成能力的強化,以及自然語言進行任務描述等設計。而在訓練目標/損失函數方面GPT-3并沒有顯式的引導模型去學習零樣本/小樣本泛化能力,因此在一些互聯網上公開較少的語料(如一些toB場景)上GPT-3經常出現翻車也是可以理解的。

那么問題來了,如果我們將語言模型的規模從千億提升至萬億,能不能復現GPT-3創造的奇跡呢?

我覺得這個問題要從目標來看。

舉個例子。

假如你的目標是要解決網友吐槽的“GPT-3小學數學題都解不好”的問題,那訓萬億參數模型絕對是個不能更錯誤的路線,這類不可枚舉的數值計算問題需要專用的設計,靠增加數據量和模型容量,只能解決更多數值計算的特定輸入,而永遠無法真正像計算機那樣建立起穩定的函數關系。

但是,如果你確信你的目標場景數據分布是在互聯網上存在且公開的,或者你能通過某種渠道得到海量同分布或近分布數據,那么你去訓一個萬億參數的模型是確實可能產生進一步肉眼可見的飛躍。再或者,你僅僅想要模型會解更多fancy的任務,以及對同一個任務能在開放域解更多的case,那去提升規模確實有意義的。

而在一些影響因素更加繁雜的任務,如推薦、廣告點擊率預估、搜索等,特征維度高達千億、萬億更是非常合理的事情,畢竟這些工業界產品端不僅坐擁海量用戶交互數據,且無論用戶側還是物料側,均是一個足夠大、足夠復雜的開放域問題,怎么擬合都不為過。

那問題來了,比拼語言模型規模這件事情難道沒個上限嗎?

  1. 數據瓶頸
  2. 算力瓶頸
  3. 分布式訓練技術瓶頸

數據

數據怎么成瓶頸啦?這不是個信息爆炸的時代嗎?

沒錯,信息是爆炸的,但互聯網上大量數據是dirty、重復、無意義的,而在移動互聯網時代,互聯網也變得越來越封閉,要連接起一座座信息孤島極其困難。對模型訓練來說,需要的不僅是數據絕對規模,數據來源的豐富度和干凈程度同樣是模型能力的天花板。

因此,在數據層面沒有相比上一代模型取得質的飛躍的情況下,近期那些去訓千億、萬億參數語言模型的工作基本就是在燒錢賺吆喝。

貼一下三代GPT模型的數據變化:

  • GPT-1僅用了包含1w本書的BookCorpus,25億詞;
  • GPT-2的數據來自互聯網,用了800w在Reddit被link過的網頁并做了清洗,大概40GB(名曰WebText);
  • GPT-3則將語料規模擴大到570GB的CC數據集(4千億詞)+WebText2(190億詞)+BookCorpus(670億詞)+維基百科(30億詞)。

可以看到,數據層面每一代均相比前一代有了數量級的飛躍,無論是語料的覆蓋范圍(豐富度)還是絕對規模。因此,下一代萬億模型使用的數據相比GPT-3若在質量、來源和規模上沒有量級的改變,至少我是不相信有多大提升的。

ps: 近期一頓操作猛如虎,一看提升一點點的工作真心太多了(手動狗頭)

算力

不講了,money的問題。

分布式訓練技術

好了,終于到討論技術的環節了。

千億、萬億參數的模型大概有三種設計方案/場景挑戰:

  1. 萬億維度特征,模型非常寬,但是比較淺,訓練稀疏
  2. 特征維度不高,但是模型非常深,萬億稠密參數
  3. 又寬又深,百億、千億的稀疏特征維度且存在數十層、上百層網絡編碼得到的稠密特征

第一種方案適用于一些影響因素非常多的場景(如推薦、搜索),例如商品推薦中的點擊率預估,用戶的性別年齡學歷等畫像、瀏覽歷史、購買記錄、商品的類型、標簽、價格、標題、封面圖乃至當下的時間節點和地理位置等,均可能影響用戶當下對一個商品的點擊,因此這類場景就更適合寬模型。

第二種方案則適用于影響因素不多,但抽象程度很高的任務,如NLP、CV等。

第三種方案則是一種更加復雜的場景,例如搜索、計算廣告中計算query與網頁/廣告的相關性進而排序,我們不僅要考慮文本語義層面的相關性,還需要考慮網頁/廣告的banner對用戶的吸引力等,進而需要點擊率預估(CTR),這時網絡不僅具備大型NLP模型的深度,又兼具大型CTR模型的寬度。

下面以百度飛槳(PaddlePaddle)為例,分別談談這三類場景的關鍵技術方案。

等等,為啥是百度飛槳?

貼幾個可能鮮為人知的milestone,可能只有比較關注大規模機器學習/分布式訓練相關工作的小伙伴才比較了解。

  • 2016年,百度提出Ring-Allreduce[1],極大的緩解了多機多卡訓練時的通信帶寬壓力,使之不隨網絡中計算節點的數量增加而增加,而在Tensorflow生態中流行的分布式訓練框架Horovod的核心,就是Ring-Allduce...
  • 2017年,百度提出大名鼎鼎的混合精度訓練[2],如今已成為訓練/微調預訓練模型的標配加速技術
  • 早在 2018 年,飛槳的純 CPU 參數服務器模式就可以支持萬億規模稀疏參數的模型訓練...
  • 2020年,百度打破GPU顯存限制,提出分布式層級化 GPU 參數服務器PaddleBox
  • 2021年,提出 4D 混合并行策略,可訓千億規模超大語言模型

換句話說,Paddle的全稱是Parallel Distributed Deep Learning,直譯為“并行分布式深度學習”。當Tensorflow忙著做生態、Pytorch忙著做易用性的時候,只有Paddle自始至終做著以分布式計算為代表的硬核底層優化,以支撐百度搜索、推薦、廣告業務的十億乃至千億的流量和恐怖的模型復雜度。

因此,毫不夸張的講,從百度飛槳就能窺見如今工業界訓練萬億模型的前沿解決方案。

萬億稀疏參數模型訓練:第一代架構

如前所述,搜索推薦場景經常面臨數據量大、特征維度高且稀疏化的問題。對于這種寬模型,最合適的分布式訓練架構便是—— Parameter Server(PS)

如圖所示,PS架構將計算節點分為 server 與 worker,其中,worker用于執行模型的前向與反向計算,而server則對各個worker發回的梯度進行合并并更新模型參數,這種模型參數中心化管理的方式非常易于存儲超大規模模型參數。

百度搜索作為全球最大的中文搜索引擎,對模型的規模、性能等要求非常高。為了應對嚴苛的實際業務挑戰,早在 2018 年,飛槳的純 CPU 參數服務器模式就可以支持萬億規模稀疏參數的模型訓練。

但是隨著模型網絡越來越復雜,對算力要求越來越高,在數據量不變的情況下,CPU 計算性能差的弱勢就會顯現,雖然可以通過增加 CPU 機器數量來解決,甚至可以增加上百臺,但是這種方法不僅成本大幅提高,而且集群的穩定性和擴展性也存在較大的問題。因此百度飛槳引入了純 GPU 參數服務器來提升計算性能,之前 100 臺 CPU 機器才能訓練的模型,僅需 1 臺多卡 GPU 機器即可完成訓練。當然,同時也要解決因為硬件更替所帶來的問題。

第二代架構:純GPU參數服務器

GPU 強大的算力毋庸置疑可以提升集群的計算性能,但隨之而來的是,不僅模型規模會受到機器顯存和內存的制約,而且通信帶寬也會由于集群網卡數量降低而成為瓶頸

為了解決這兩個問題,百度飛槳引入了兩大技術 SSD-MEM-HBM 三級存儲RPC&NCCL 混合通信 到純 GPU 參數服務器[3]。

具體來講,SSD-MEM-HBM 三級存儲策略允許全量參數使用 SSD 硬盤存儲,高頻參數存儲于內存,當前 Batch 訓練所用參數使用顯存,并且同時支持 SSD 的參數在硬盤、內存、顯存之間快速拷貝。這樣通過異步流水線執行機制,隱蔽了 IO 帶來的額外性能開銷,在保證訓練速度的同時,使訓練的模型大小不再受制于顯存和內存,極大提升模型的規模。

而 RPC&NCCL 混合通信策略可以將部分稀疏參數采用 RPC 協議跨節點通信,其余參數采用卡間 NCCL 方式完成通信,充分利用帶寬資源。

▲GPU參數服務器

百度飛槳純 GPU 參數服務器雖然解決了之前純 CPU 模式所面臨的問題,但新的問題又出現了——如何提高訓練資源的利用率?

第三代架構:異構參數服務器,兼顧網絡寬度與深度

在純 GPU 的參數服務器下,所有的訓練都在 GPU 中,當模型中部分網絡層比較復雜(并行難,而串行鏈條長)的時候,GPU 利用率很難被打滿,而 GPU 機器中 CPU 與 GPU 的硬件配比是固定的,無法靈活調整。針對這種情況,有兩種解決方案:

  • 定制化 GPU 機型,調整機器內 CPU 與 GPU 的硬件配比。
  • 混布 CPU 和 GPU 機器節點,來調整機器間的硬件配比。

基于這兩種解決方案,百度飛槳在 2.0 版本發布了通用異構參數服務器,使訓練任務對硬件類型和型號不敏感,即可以同時使用不同的硬件混合異構訓練,如 CPU、AI專用芯片以及不同型號的 GPU 如 v100、P40、A100 等。同時還可以解決大規模稀疏特征模型訓練場景下 IO 占比過高導致的芯片資源利用率過低的問題。通過異構參數服務器訓練模式,用戶可以在硬件異構集群中部署分布式訓練任務,例如云服務器集群,高效利用不同算力芯片,為用戶提供更高吞吐、更低資源消耗的訓練能力。

▲異構參數服務器

異構參數服務器的最大亮點是硬件感知的任務切分,因此甚至可以支持文首提到的最復雜結構的萬億模型——網絡又寬又深。如上圖所示,針對類似 ERNIE+CTR 這樣計算密集型與 IO 密集型兼有的訓練任務,可以被切分成多個子任務。其中的 IO 密集型任務(如數據讀取、Embedding 查詢)切分給 CPU 機器,計算密集型任務切分給 GPU 機器;用戶可以根據子任務的計算復雜度來靈活決定機器配比,并且還可以兼容傳統純 CPU 參數服務器和純 GPU 參數服務器所支持的訓練任務。

4D混合并行:超大規模稠密模型訓練

前面的三代架構解決了第一類和第三類萬億參數模型的訓練問題(網絡極寬;網絡寬且深),那么對于第二類萬億參數模型(網絡極深的大規模稠密模型)有沒有好的解決方案呢?

百度最新提出的 4D 混合并行策略 就是為該場景量身定制的,目前已經支持了高達 2300 億參數規模的100多層的 ERNIE 預訓練模型的分布式訓練。

不同于前述的三代參數服務器的模式,4D混合并行策略采用的是 集合通信模式 。這種模式沒有管理模型參數的中心節點,每個節點都是 Worker,每個 Worker 負責模型訓練的同時還需要掌握當前最新的全局梯度信息。而百度于2016年提出的Ring-Allreduce就是一種可以大大減少點對點通信次數的先進的集合通信方式,目前已成為飛槳、Tensorflow、Pytorch等深度框架的分布式訓練標配方案。

首先來看一個公式:

總訓練速度 ∝ 單卡速度 * 卡數 * 多卡加速比

其中單卡速度由數據讀取和計算速度決定;多卡加速比由計算/通信效率決定。除了單卡可以使用的算子融合、混合精度之類的基礎性能優化策略之外,分布式訓練還引入一系列并行策略。

并行策略的核心思想是將數據和計算有關的圖 / 算子切分到不同設備上,同時盡可能降低設備間通信所需的代價,合理使用多臺設備資源,實現高效的并發調度訓練,最大化提升訓練速度。常見并行策略有:

  • 數據并行(Data Parallel,DP)
  • Layer 間并行/流水線并行(Pipeline Parallel,PP)
  • Layer 內并行/模型并行(Model Parallel,MP)

我們從設備資源和計算/通信效率來分析三種策略的優缺點:

  1. 數據并行訓練加速比最高,但要求每個設備上都備份一份模型,顯存占用比較高
  2. 模型并行,通信占比高,適合在機器內做模型并行且支持的模型類型有限。
  3. 流水線并行,訓練設備容易出現空閑狀態,加速效率沒有數據并行高;但能減少通信邊界支持更多的層數,適合在機器間使用。

而4D混合并行策略的思想就是集三種策略的優勢于一身,實現取長補短。具體來說,先在單機內使用模型并行和分組參數切片組合的 2D 策略,這么選擇的原因是這兩個策略通信量較大,適合使用機器內的卡間通信;而后,為了承載千億規模模型,再疊加流水線并行策略,使用多臺機器共同分擔;最后為了做到高效,在外層又疊加了數據并行來增加并發數量,提升整體訓練速度。這樣業內首個 4D 混合并行策略就誕生了。

▲4D混合并行

4D 混合并行策略的性能如何呢?

百度飛槳從理論性能角度對比分析了幾組混合并行策略,即 DP2 + PP32 + Sharding2 + MP4、PP64 + Sharding2 + MP4 和 DP2 + PP32 + MP8。如下表所示,與兩種 3D 方式相比,4D 混合并行策略在通信量和 Bubble 時間上并未明顯增長,但是大幅提升了數據并行路數!

此外,百度飛槳使用64臺8卡v100機器在 2300 億參數規模的100+層的ERNIE模型上進行了性能實測。如圖,可以看到 4D 混合并行策略訓練速度高于其它兩種 3D 混合并行策略,達到了8698 tokens/s,至少可以提速 23.7%。

至此,千億規模的超大稠密模型的問題在百度飛槳先進的4D混合并行策略下,僅僅通過64臺8卡V100機器就解決了;萬億規模的超大稀疏模型和稀疏稠密混合的復雜模型在百度飛槳的異構參數服務器下也得到了很好解決。

那么,萬億規模的稠密模型呢?以及萬億稠密+十萬億稀疏的模型會怎樣呢?讓我們拭目以待,作下個時代的見證者吧!

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
行走在技術的最前沿!這就是飛槳分布式訓練技術
支撐千萬規模類別分類技術,百度飛槳定義工業級深度學習框架
基于Spark的異構分布式深度學習平臺
大模型算力推演優化實戰
飛槳PaddlePaddle
tensorflow 多GPU操作
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 八宿县| 阿拉善盟| 牙克石市| 彩票| 海口市| 合肥市| 通道| 双桥区| 农安县| 平远县| 寿阳县| 柳江县| 突泉县| 霞浦县| 元阳县| 门头沟区| 耒阳市| 红河县| 潞西市| 安泽县| 遂平县| 年辖:市辖区| 耒阳市| 郁南县| 潞西市| 渭南市| 凉山| 金华市| 清丰县| 贵溪市| 登封市| 长垣县| 鸡东县| 普兰店市| 无为县| 灌云县| 句容市| 晋州市| 阿坝| 丽江市| 岑巩县|