十行代碼讓你的單機「影分身」,分布式訓練速度快到飛起 - 飛槳...

2021-01-15 飛槳深度學習學院

工程師:「在你輝煌的時刻,讓我為你唱首歌,我的好兄弟,心裡有苦你對我說。」

計算機:「哥啊,那我可就說了,我是真的苦啊,現在一個模型動輒好幾億參數,數據集也是大的嚇人,兄弟我內存都快被掏空了,實在訓練不動了呀。」

工程師:「前方大路一起走,哪怕是河也一起過…」

計算機:「你怎麼還唱啊,兄弟我真的堅持不住了。」

工程師:「擔心啥,哥有的是辦法救你,就這招吧——分布式訓練之參數伺服器!」

計算機:「分布式訓練?參數伺服器?真的很好用嗎?」

工程師:「好吧,接下來我們就來看看什麼是分布式訓練參數伺服器功能。」

什麼是分布式訓練

何謂分布式訓練呢?大家想想《火影忍者》中鳴人搓螺旋丸的方法,要知道鳴人一個人可搓不出來,他是怎麼做的呢?對!影分身,再變出兩個分身來幫他一起搓丸子,分布式訓練其實用的是相同的原理。通俗的講就是把原先交給一臺計算機上完成的訓練任務改為交由多臺計算機完成。每臺計算機上都會有一個或多個計算單元,例如CPU、GPU、AI晶片等,合作的計算機越多,參與訓練的計算單元也就越多。可想而知那速度肯定是噌噌的!

什麼是參數伺服器

如圖1所示,參數伺服器是分布式訓練領域普遍採用的編程架構,主要包含Server和Worker兩個部分,其中Server負責參數的存儲和更新,而Worker負責訓練。飛槳的參數伺服器功能也是基於這種經典的架構進行設計和開發的,同時在這基礎上進行了SGD(Stochastic Gradient Descent)算法的創新(Geometric Stochastic Gradient Descent)。當前經過大量的實驗驗證,最佳的方案是每臺機器上啟動Server和Worker兩個進程,而一個Worker進程中可以包含多個用於訓練的線程。

飛槳參數伺服器功能支持三種模式,分別是同步訓練模式、異步訓練模式和GEO異步訓練模式:

同步訓練模式:如圖2所示,Worker在訓練一個batch的數據後,會合併所有線程的梯度發給Server, Server在收到所有節點的梯度後,會統一進行梯度合併及參數更新。同步訓練的優勢在於Loss可以比較穩定的下降,缺點是整個訓練速度較慢,這是典型的木桶原理,速度的快慢取決於最慢的那個線程的訓練計算時間,因此在訓練較為複雜的模型時,即模型訓練過程中神經網絡訓練耗時遠大於節點間通信耗時的場景下,推薦使用同步訓練模式。

異步訓練模式:如圖3所示,在訓練一個batch的數據後,Worker的每個線程會發送梯度給Server。而Server不會等待接收所有節點的梯度,而是直接基於已收到的梯度進行參數更新。異步訓練去除了訓練過程中的等待機制,訓練速度得到了極大的提升,但是缺點也很明顯,那就是Loss下降不穩定,容易發生抖動。建議在個性化推薦(召回、排序)、語義匹配等數據量大的場景使用。

尤其是推薦領域的點擊率預估場景,該場景可能會出現千億甚至萬億規模的稀疏特徵,而稀疏參數也可以達到萬億數量級,且需要小時級或分鐘級流式增量訓練。如果使用異步訓練模式,可以很好的滿足該場景的online-learning需求。

GEO異步訓練:GEO是飛槳自研的異步訓練模式,如圖4所示,其最大的特點是將參數的更新從Server轉移到Worker上。每個Worker在本地訓練過程中會使用SGD優化算法更新本地模型參數,在訓練若干個batch的數據後,Worker將發送參數更新信息給Server。Server在接收後會通過加和方式更新保存的參數信息。所以顯而易見,在GEO異步訓練模式下,Worker不用再等待Server發來新的參數即可執行訓練,在訓練效果和訓練速度上有了極大的提升。但是此模式比較適合可以在單機內能完整保存的模型,在搜索、NLP等類型的業務上應用廣泛,推薦在詞向量、語義匹配等場景中使用。

經過上述介紹,我想小夥伴們應該對飛槳的參數伺服器功能有了一定了解,可是這個參數伺服器不僅包括了三種模式,還一會兒Worker一會兒Server的,用起來應該會很複雜吧?這個請放心,這個用起來其實非常簡單,甚至比鳴人結手印召喚影分身還要簡單!

十行代碼單機轉分布式

參數伺服器模式

飛槳的分布式訓練功能確實是比較複雜,其不僅包含參數伺服器(同步、異步、GEO)模式,還包含collective、hybrid等其它模式。為了能讓開發者們方便得使用這些功能,飛槳的工程師們非常貼心的專門為分布式訓練設計了一套FleetAPI接口。如圖5所示,使用FleetAPI可以輕鬆的將原先的單機訓練轉換為分布式參數伺服器模式:

使用RoleMaker為參與訓練的機器創建Worker和Server進程。RoleMaker有多種實現可適配用戶的Kubernetes、MPI等環境。使用Strategy和distributed_optimizer配置訓練模式、優化函數以及計算圖的拆分方案。在拆分計算圖的過程中,Server和Worker中會被添加用於相互通信的算子。初始化Worker和Server進程。

性能遠超業界同類最優產品!

在訓練效果相同的情況下,飛槳的參數伺服器訓練模式在訓練速度上有很大優勢。相比於業界同類最優產品,參數伺服器訓練模式在相同機器數量和硬體配置條件下能夠大幅提升模型訓練速度。

如圖6所示,在詞向量Word2Vector模型上,採用GEO訓練模式的飛槳分布式訓練的訓練速度能夠超越同類最優產品 18倍。

在CTR-DNN模型上,如圖7所示,採用全異步訓練的訓練模式也能夠有6倍的速度提升。此外飛槳的推薦模型庫還提供有包括DeepFM、Deep Cross Network、Gru4Rec等一系列經典個性化推薦類模型,方便開發者選擇使用。

相關工具組件簡介

飛槳參數伺服器功能在提供巨大性能優勢的同時,也進一步支持了分布式訓練相關的工具組件給用戶使用。

分布式指標功能:能夠同步所有訓練節點的AUC、準確率、正逆序等,統計出全局指標。分布式DEBUG功能:能夠有序的將所有節點、所有線程、每層網絡的參數和梯度列印到文件中,利於模型調試。流式訓練功能:能夠支持小時級流式、增量訓練。HDFS功能:封裝了Python端的HDFS客戶端,能夠方便的在分布式訓練中使用Hadoop存儲功能。業務應用示例

飛槳參數伺服器模式如今已經在百度公司內外得到了普遍的應用,包括信息流、搜索等業務。下面以視頻推薦場景為例介紹飛槳參數伺服器的幾種模式在業務中的具體應用。

如圖8所以,視頻推薦系統採用了漏鬥模型,即召回->粗排->精排->融合的架構:

召回:根據用戶信息從幾百萬視頻候選中抽取幾萬條結果;此處模型訓練的特點是特徵量小、訓練數據少、模型算法簡單,因此比較適合GEO模式和同步模式。粗排和精排:該過程是對召回的從幾萬條候選信息進行推理,推理出每條信息被點擊到的概率並按照概率由大到小排序,然後抽取排位最高的幾百條信息;此處模型訓練的特點是特徵量比較大、訓練數據多、訓練性能要求高,因此比較適合異步模式。融合:該過程是指從幾百候選信息中抽取幾十條;此處模型訓練的特點是特徵量小、訓練性能要求高,但模型算法複雜,因此比較適合使用GEO模式。經過實際業務驗證,飛槳參數伺服器功能可以輕鬆應對千萬級用戶數量、百億特徵規模的業務場景。

相關焦點

  • 十行代碼就能搞定深度學習?飛槳框架高層API,輕鬆玩轉AI
    、模型評估、模型保存等場景,高層 API 均可以通過 1~3 行代碼實現。相比傳統方法動輒幾十行的代碼量,高層 API 只需要十來行代碼,就能輕鬆完成一個 MNIST 分類器的實現。以極少的代碼就能達到與基礎 API 同樣的效果,大幅降低了深度學習的學習門檻。如果是初次學習深度學習框架,使用飛槳高層 API,可以「凡爾賽」說出「好煩哦,飛槳高層 API 怎麼這麼快就完成開發了,我還想多寫幾行代碼呢!」
  • Keras 之父講解 Keras:幾行代碼就能在分布式環境訓練模型 |...
    對於 Keras 用戶,這意味著一系列高級 TensorFlow 訓練功能,比如分布式訓練、分布式超參數優化。」下面,我們一起來看看你的工作流會是什麼樣子。我會向大家展示一個簡單但挺先進的例子。該例子中,我用 Keras API 定義模型,用 TensorFlow estimator 和 experiments 在分布式環境訓練模型。
  • 11項新升級,免費送億元算力:國產深度學習平臺「飛槳」大更新
    比如在我們日常生活離不開的地圖導航裡,深度學習就起著重要的作用。地圖每次找到路線之後估算要花費的時間,都要考慮到路上動態出現的各種情況,把歷史路況、實時路況、限行等等大量信息作為特徵輸入到一個深度學習模型中,統一建模,才能準確地預估時間。王海峰說,百度地圖每天提供大約5億次時間預估,每一次都是深度學習在背後起作用。
  • 基於複數神經網絡首發量子機器學習開發工具 「量槳」,飛槳布局...
    百度首席技術官、深度學習技術及應用國家工程實驗室主任王海峰在峰會上分享到:「時代契機為飛槳的發展提供了最好的機遇,飛槳將與產業緊密融合,與開發者並肩前行。」(圖:百度首席技術官王海峰)百度集團副總裁、深度學習技術及應用國家工程實驗室副主任吳甜正式對外發布飛槳最新的全景圖,包含飛槳開源深度學習平臺和飛槳企業版兩部分。
  • 全球AI作業系統暗戰:百度飛槳為中國深度學習撐起天空
    二、提前布局、百度飛槳為中國深度學習撐起天空飛槳今天的成就,是百度在AI人工智慧領域裡提前布局、孜孜不倦持續研發投入的成果。眾所周知,在中國百度是最早於AI和無人駕駛領域裡進行布局的科技企業,經過多年的研發,已經在深度學習開源平臺、無人車開放平臺等底層基礎領域裡擁有了強大的核心能力。
  • 單機訓練速度提升640倍!獨家解讀快手商業廣告模型GPU訓練平臺Persia
    本著不盲從、不抄襲、堅持原創技術路線的原則,快手西雅圖FeDA智能決策實驗室推出了名為"Persia"的基於GPU的廣告推薦訓練系統。以往需要50臺CPU機器訓練20小時的系統,如今只需要一臺普通的GPU機器在一到兩小時完成,單機效率提升高達640倍。這意味著:  · 以往使用五十臺計算機,一天只能嘗試一個新想法,新系統只需一臺計算機,一兩個小時就能嘗試一個新想法。
  • 百度吳甜解讀飛槳成長之路:與時代發展脈搏同頻共振
    六年級的陳奕帆,是百度之星辦賽16年來進入決賽年齡最小的選手,與近萬名博士、碩士開發者角逐後脫穎而出,榮獲「未來之星」特別獎;58歲郭崇華,是一位退休的人才管理專家和終身學習者,高鐵上也在爭分奪秒趕飛槳培訓課程的作業;晶片企業工程師安寶磊,累計在飛槳平臺上開發代碼數量已超過3600行,志在把AI帶進各行各業;代號「GT-老張」的張弘基從2018年底接觸飛槳開始,不分晝夜地在社區累計答疑超過
  • 『跟著雨哥學AI』系列:詳解飛槳框架數據管道
    本課程由多位資深飛槳工程師精心打造,不僅提供了從數據處理、到模型組網、模型訓練、模型評估和推理部署全流程講解;還提供了豐富的趣味案例,旨在幫助開發者更全面清晰地掌握百度飛槳框架的用法,並能夠舉一反三、靈活使用飛槳框架進行深度學習實踐。本章分別對內置數據集、數據集定義、數據增強、數據採樣以及數據加載這幾個功能點進行詳細的講解。
  • 飛槳可視化分析工具VisualDL改版升級!幫助開發者擊破「黑盒煉丹」
    深度學習模型訓練過程盯log頭暈眼花?複雜模型結構全靠腦補?網絡各層效果無法評估?模型評估指標難以綜合權衡?近日,VisualDL 2.0 ——飛槳可視化分析工具全面改版升級,幫眾位開發者們從」煉丹萌新」變身「太上老君」。
  • 對鳴人幫助最大的忍術,不是螺旋丸也不是影分身,可惜他沒有學會
    在鳴人所有的技能當中,實用性最大的恐怕就是螺旋丸和多重影分身了,雖然現在鳴人已經很少用這兩種技能了,動不動就直接爆出九尾之力,不過螺旋丸和影分身確實是他的成名絕技。其實除了這些技能之外,還有一項技能也是鳴人家傳的,並且對他起到的作用非常的大,曾經至少兩次拯救了鳴人的性命,這一招就是飛雷神。
  • PyTorch中使用DistributedDataParallel進行多GPU分布式模型訓練
    先進的深度學習模型參數正以指數級速度增長:去年的GPT-2有大約7.5億個參數,今年的GPT-3有1750億個參數。雖然GPT是一個比較極端的例子但是各種SOTA模型正在推動越來越大的模型進入生產應用程式,這裡的最大挑戰是使用GPU卡在合理的時間內完成模型訓練工作的能力。為了解決這些問題,從業者越來越多地轉向分布式訓練。
  • 代碼詳解:用Pytorch訓練快速神經網絡的9個技巧
    如果市面上有99個加速指南,但你可能只看過1個?(沒錯,就是這樣)。但這份終極指南,會一步步教你清除模型中所有的(GP模型)。不要讓你的神經網絡變成這樣。(圖片來源:Monsters U)這份指南的介紹從簡單到複雜,一直介紹到你可以完成的大多數PITA修改,以充分利用你的網絡。
  • 鳴人影分身這麼厲害,為什麼不分身陪家人?唉!可惜這就是父親!
    大家好,我烏龍君又雙叒叕來了~大家都知道鳴人最具有代表性的招數就是影分身之術了,因為多重影分身之術那可是只有鳴人能夠真正做到的,在成為木葉火影之後,這一招多重影分身,鳴人可謂是用到了極致,分身出來無數個自己,幫助百姓處理那麼多的事!可是,我們反觀前期的劇情,這麼牛氣沖天的技能,鳴人怎麼就不用來陪自己的孩子呢?聽聽烏龍君的想法,絕對讓你恍然大明白!
  • 用飛槳做自然語言處理:神經網絡語言模型應用實例
    想要讓模型能落地奔跑,就需藉助深度學習框架之力,Tensorflow、PyTorch自然是主流,但在Dropout都成獨家專利之後,不儲備「B計劃」,多少讓人有些擔驚受怕 這裡有一份飛槳(PaddlePaddle)語言模型應用實例,從基礎概念到代碼實現,娓娓道來,一一說明。現在,量子位分享轉載如下,宜學習,宜收藏。
  • Pytorch中的分布式神經網絡訓練
    經常,在訓練這些網絡時,深度學習從業人員需要使用多個GPU來有效地訓練它們。 在本文中,我將向您介紹如何使用PyTorch在GPU集群上設置分布式神經網絡訓練。通常,分布式訓練會在有一下兩種情況。在GPU之間拆分模型:如果模型太大而無法容納在單個GPU的內存中,則需要在不同GPU之間拆分模型的各個部分。跨GPU進行批量拆分數據。
  • 網球王子中最扯的5個技能:影分身、寫輪眼、黑洞都出來了
    影分身——菊丸英二相信你的眼睛,沒有看出,不是影分身之術——鳴人。菊丸身為一個雙打球員,擁有超乎常人的運動神經,其成名絕技就是雜技網球。何為雜技,就是動作難度高,花樣百出。老實說,以這樣的方式打一場網球還不得累死,不過菊丸最大的弱點就是體力容易跟不上。
  • 一臺電腦倆人用 筆記本「影分身」全攻略
    ·電腦也玩「影分身」    如果坐在電腦前的你是一個男生,相信應該聽說過《火影忍者》這部動漫,劇中忍者們使用的「影分身」術給很多人留下了深刻的印象。筆記本「影分身」全攻略    在文章進入正題之前我們首先要說明一下,
  • 教程| 利用AllenNLP,百行Python代碼訓練情感分類器
    >作者:Masato Hagiwara機器之心編譯參與:Geek AI、路本文介紹了如何利用 AllenNLP,使用不到一百行代碼訓練情感分類器它提供了靈活、易於編寫的模塊,可動態運行,且速度相當快。在過去一年中,PyTorch 在科研社區中的使用實現了爆炸性增長。
  • 35 萬行代碼,曠視重磅開源天元深度學習框架 ,四大特性實現簡單開發
    這個由Python編寫的開源人工神經網絡庫可以作為Tensorflow、CNTK和Theano的高階應用程式接口,進行深度學習模型的設計、調試、評估、應用和可視化,目標是只需幾行代碼就能讓你構建一個神經網絡。  2016年,微軟開發的認知工具包CNTK問世,支持RNN和CNN類型的神經模型,成為處理圖像,手寫和語音識別問題的最佳候選者。