如何将深度学习训练速度提升一百倍?PAISoar 来了
阿里妹導讀:得力于數(shù)據(jù)規(guī)模增長、神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的演進和計算能力的增強,深度學習的圖像處理、語音識別等領(lǐng)域取得了飛速發(fā)展。隨著訓練數(shù)據(jù)規(guī)模和模型復雜度的不斷增大,如何充分利用分布式集群的計算資源加快訓練速度,提升業(yè)務(wù)支持能力成為用戶非常關(guān)注的問題。今天,我們就來分享阿里工程師的實踐成果:將深度學習模型的大規(guī)模分布式訓練框架 PAISoar應(yīng)用于綠網(wǎng)模型(多層CNN網(wǎng)絡(luò))后,綠網(wǎng)模型在128 GPU卡上取得101倍的計算加速比,效果顯著。
1. 概述
近幾年來深度學習發(fā)展迅速,圖像處理、語音識別等領(lǐng)域都取得了飛速發(fā)展。例如在圖片識別上,神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)快速演進,分類的網(wǎng)絡(luò)結(jié)構(gòu)從 AlexNet、VGG、Inception V1 發(fā)展到了 Inception V4、Inception-ResNet、SENet。隨著模型層次越來越深,參數(shù)越來越多,模型能力也越來越強,ImageNet 數(shù)據(jù)集 Top-5 的錯誤率越來越低,目前降到了2.25%(人眼5.1%)。
隨著模型復雜度不斷增長、訓練樣本的指數(shù)級增長,分布式進行高效并行的神經(jīng)網(wǎng)絡(luò)訓練已經(jīng)變得越發(fā)重要。在社區(qū)版 Tensorflow 中,分布式訓練是基于 Parameter Server 模式進行多機訓練的。在這種訓練方式下訓練任務(wù)通常會遇到以下挑戰(zhàn):
對此,我們基于 PAI Tensorflow 研發(fā)了針對于深度學習模型的高速分布式訓練框架 PAISoar,從硬件到軟件打造一套分布式訓練場景 E2E 的解決方案:
PAISoar 在 Tensorflow 官方 benchmarks 模型上取得了非常不錯的加速效果。同時我們還和安全部團隊合作,將該研發(fā)成果成功的在安全部圖像模型業(yè)務(wù)上落地。安全部的綠網(wǎng)模型訓練樣本280萬張圖片,單機兩卡訓練需要12天才能收斂,因此有著非常強的分布式訓練需求,希望能達到一天內(nèi)完成訓練,提升模型迭代能力。借助于 PAISoar,綠網(wǎng)模型分布式訓練取得非常明顯的加速效果,模型收斂時間從原先的12天降低到目前的一天以內(nèi),大大加速了業(yè)務(wù)的快速迭代。
我們用 images/sec (每秒處理的圖片數(shù)或樣本數(shù))來統(tǒng)計分布式模型的計算能力。
假設(shè)單 GPU 卡下計算能力為1,綠網(wǎng)模型在 PAISoar 中計算加速比如下圖所示:
在 PAISoar 上,綠網(wǎng)模型在128 GPU卡上取得了101倍的計算加速比,效果非常明顯。
2. PAISoar:基于 PAI Tensorflow 的分布式訓練框架
2.1 PAISoar簡介
PAISoar 是基于 PAI Tensorflow 實現(xiàn)的分布式訓練框架。通過 PAISoar,我們提供了一個從硬件到軟件、易用的分布式訓練的性能優(yōu)異框架。
2.1.1 網(wǎng)絡(luò)層
我們和 AIS 網(wǎng)絡(luò)團隊、RDMA 項目團隊一起搭建了集團內(nèi)部第一套基于 RoCE 的大規(guī)模 RDMA 集群,并針對于深度學習場景進行了相應(yīng)的參數(shù)調(diào)優(yōu),包括:
- 機器上搭載 Mellanox 25G 網(wǎng)卡支持基于 RoCE v2的 RDMA,打造低延遲高吞吐通信網(wǎng)絡(luò);
- ASW(接入層交換機,32口)和 PSW(聚合層交換機)間采用 8*100Gb 高速傳輸光纖,支持交換機 1:1 收斂比,搭建無損傳輸網(wǎng)絡(luò);
- 構(gòu)建 TCP 和 RDMA 多級混合流控策略,解決各種混跑場景的流量干擾;
2.1.2 軟件層
- 在 PAI Tensorflow 中接入 RDMA 驅(qū)動,使用 verbs 庫進行 RDMA 通信,并和思科交換機進行適配調(diào)參;
- 對 RDMA 通信的關(guān)鍵路徑進行梳理,加速內(nèi)存拷貝,異步化數(shù)據(jù)發(fā)送,優(yōu)化通信狀態(tài)機,提高 RDMA 通信的效率和穩(wěn)定性;
- 自研了深度優(yōu)化的 Ring AllReduce 同步算法,通過針對 RDMA 網(wǎng)絡(luò)的深度適配、多路通信融合等關(guān)鍵點優(yōu)化,大大提升了多機的分布式訓練性能。
2.1.3 API 層
- 我們同時提供了簡化用戶構(gòu)建分布式TF模型訓練的ReplicatedVarsOptimizer,極大的方便了將單機模型擴展成分布式模型,降低了用戶構(gòu)建分布式TF訓練代碼的難度和學習成本;
- 為方便用戶在分布式訓練中調(diào)參,我們提供 lr(learning rate) 的動態(tài)調(diào)節(jié)算法smooth_exponential_decay,算法中,lr 經(jīng)過一定輪數(shù)的 warm up,從一個較小的 lr 平滑增加到目標 lr,再采用指數(shù)衰退,每隔固定 epoch 衰退一次,動態(tài)調(diào)節(jié)的 lr 可以加速用戶調(diào)參過程。
2.2 性能指標
基于 PAISoar,深度神經(jīng)網(wǎng)絡(luò)模型的分布式訓練性能提升明顯。
我們使用 Tensorflow 官方 Benchmarks 進行性能測試。Tensorflow Benchmarks 是一套 CNN 模型的基準測試集合,包括 Inception v3、ResNet-50、ResNet-152、VGG16、Alexnet 等經(jīng)典 CNN 模型。下面是我們分別在1、2、4、8、16、32、64GPU卡規(guī)模下測試了 Inception v3、ResNet-50、ResNet-152、VGG16 這4個模型的性能:
圖中參數(shù)說明:
- 上面4個圖分別是 Inception v3、ResNet-50、ResNet-152、VGG16 這四個模型的性能測試數(shù)據(jù);
- 橫坐標是 GPU 卡數(shù),縱坐標是模型訓練總的 Images/sec;
- ps、allreduce 分別表示模型參數(shù)同步的模式是 worker+ps 模式或 Ring AllReduce 模式;
- grpc、rdma 分別表示通信底層使用的是 grpc 協(xié)議還是 rdma 協(xié)議。
Tensorflow 默認的分布式方法是 worker+ps 模式,variable 定義在 ps 上,worker 會訓練并更新 ps 上的參數(shù)。我們將底層通信協(xié)議替換成 RDMA 后,各模型性能都有提升,在 64GPU 卡下,Inception v3、ResNet-50、ResNet-152、VGG16 四個模型性能分別提升:24.94%、44.83%、38.80%、23.38%。
相較于 worker+ps 模式,PAISoar 中提供的 Ring AllReduce 通信模式對網(wǎng)絡(luò)帶寬利用率更高,延遲更小。與 worker+ps (使用 grpc 通信)相比,各模型性能提升非常明顯,在64 GPU 卡下,Inception v3、ResNet-50、ResNet-152、VGG16四個模型性能分別提升:84.77%、125.43%、56.40%、40.04%。
同時,我們也和開源的 horovod 進行對比,在64 GPU卡下,Inception v3、ResNet-50、ResNet-152、VGG16四個模型性能分別提升:-6.4%、2%、21%、36%,整體性能要好于 horovod。
接下來將會介紹 PAISoar 中的關(guān)鍵技術(shù):RDMA 和 Ring AllReduce 的技術(shù)細節(jié)。
2.3 RDMA技術(shù)
RDMA(Remote Direct Memory Access) 是一種硬件IO技術(shù),通過將傳輸協(xié)議固化在網(wǎng)卡硬件中,網(wǎng)卡就可以實現(xiàn)內(nèi)核旁路(kernel bypass)和零拷貝操作,從而大幅降低網(wǎng)絡(luò) IO 的延遲時間,大幅提高網(wǎng)絡(luò)吞吐,同時不影響 CPU 的負載。RDMA 在以太網(wǎng)上有2個標準,2002年,ITEF 制定了 iWARP(Internet Wide Area RDMA Protocol),2010年,IBTA 制定了 RoCE(RDMA over Converged Ethernet)規(guī)范。阿里數(shù)據(jù)中心網(wǎng)絡(luò)里采用 RoCE(v2) 方案。在時延測試中,RoCE 可以達到單向為2 - 3us左右,而與之對應(yīng)的 TCP 時延為10 - 15us 左右。
為了實現(xiàn) RoCE 的性能優(yōu)勢,以太網(wǎng)需要提供一個無損網(wǎng)絡(luò)做為基礎(chǔ),否則對性能的負面影響非常大。以太網(wǎng)的無損機制主要通過端到端的 QoS 來實現(xiàn),即所有的QoS 機制需要在服務(wù)器和交換機上做統(tǒng)一的設(shè)置,包括 DSCP、隊列、DCQCN、ECN、PFC 等。通過使用這些技術(shù),能夠保證在 burst,incast 等 IO 場景下 RDMA也有穩(wěn)定的表現(xiàn)。下圖是在一個32個節(jié)點的集群中做長時間壓測時采集到的發(fā)送帶寬,可以看到各個節(jié)點的帶寬非常穩(wěn)定。
RoCE 技術(shù)雖然有很多技術(shù)優(yōu)勢,但是它對無損網(wǎng)絡(luò)的要求也導致網(wǎng)絡(luò)配置非常復雜,除了新增很多網(wǎng)絡(luò)設(shè)備的管控配置,同時也把之前相對獨立的網(wǎng)卡設(shè)備納入了網(wǎng)絡(luò)運營的范圍,大大增加了運營的內(nèi)容和難度。與此相適應(yīng),在主機上需要安裝專門的 RDMA 軟件平臺包,包括網(wǎng)卡驅(qū)動、用戶庫和管控軟件等部件。這些軟件可以做到一鍵部署、自動配置和定期巡檢,并且與相應(yīng)的監(jiān)控系統(tǒng)都有數(shù)據(jù)對接。通過安裝這些軟件包,就可以做到及時發(fā)現(xiàn)物理網(wǎng)絡(luò)的配置錯誤,硬件故障,讓應(yīng)用遠離復雜的網(wǎng)絡(luò)管理,順利享受 RDMA 帶來的技術(shù)紅利。
2.3 Ring AllReduce 技術(shù)
對于許多在大型數(shù)據(jù)集上訓練的現(xiàn)代深度學習模型來說,基于數(shù)據(jù)并行(Data Parallelism)的同步分布式訓練是最合適的訓練方法。數(shù)據(jù)并行的同步分布式訓練在每個 worker 上都有一份完整的模型,每個 worker 讀取訓練集的不同部分計算出不同的梯度,然后同步各個 worker 上的梯度并求平均值,再用平均梯度來更新每個 worker 上的模型。在社區(qū)版 Tensorflow 中,梯度平均通過將 Variable 分配到公共的 ps (parameter server)節(jié)點上實現(xiàn),通信代價受 worker 數(shù)量和 Variable 分配策略影響很大。在 PAISoar 中我們使用 Ring AllReduce 技術(shù)實現(xiàn)梯度平均,通信代價的上限與 worker 數(shù)量無關(guān),且不再需要額外的 ps 節(jié)點。
Ring Allreduce 算法的原理與核心功能如下:
Ring AllReduce 算法將 device 放置在一個邏輯環(huán)路(logical ring)中。每個 device 從上行的 device 接收數(shù)據(jù),并向下行的 deivce 發(fā)送數(shù)據(jù),因此可以充分利用每個 device 的上下行帶寬。
使用 Ring Allreduce 算法進行某個稠密梯度的平均值的基本過程如下:
將每個設(shè)備上的梯度 tensor 切分成長度大致相等的 num_devices 個分片;
ScatterReduce 階段:通過 num_devices - 1 輪通信和相加,在每個 device 上都計算出一個 tensor 分片的和;
AllGather 階段:通過 num_devices - 1 輪通信和覆蓋,將上個階段計算出的每個 tensor 分片的和廣播到其他 device;
在每個設(shè)備上合并分片,得到梯度和,然后除以 num_devices,得到平均梯度;
以 4 個 device上的梯度求和過程為例:
ScatterReduce 階段:
經(jīng)過 num_devices - 1 輪后,每個 device 上都有一個 tensor 分片進得到了這個分片各個 device 上的和。
AllGather 階段:
經(jīng)過 num_devices - 1 輪后,每個 device 上都每個 tensor 分片都得到了這個分片各個 device 上的和;由上例可以看出,一次 Ring Allreduce 中單個節(jié)點總的通信數(shù)據(jù)量是
每個節(jié)點上通信數(shù)據(jù)量的上限不會隨分布式規(guī)模變大而變大。
在 PaiSoar 中,我們基于 Tensorflow 原生的通信原語 Rendezvous 實現(xiàn) Ring AllReduce 算法,并提供簡化用戶構(gòu)建分布式 TF 模型訓練的
ReplicatedVarsOptimizer 接口(用戶文檔),核心功能如下:
- 簡單的用戶接口:只需開啟 PAISoar 之后將原有的 Optimizer 包裝為 ReplicatedVarsOptimizer,即可將單機模型改成分布式模型,不需要修改太多的代碼;
- 支持多種通信協(xié)議:支持 gRPC、RDMA 等多種通信協(xié)議;
- 優(yōu)化的通信策略:根據(jù)計算圖的信息,平衡計算通信重疊度和通信效率,合并計算時間相近的梯度一起傳輸。
3. 安全部綠網(wǎng)模型
3.1 模型介紹
綠網(wǎng)模型開始于2013年,在安全部成立初期就已經(jīng)存在,用于電商場景中的色情內(nèi)容的識別。綠網(wǎng)模型最初基于 BOW(Bag of Word)類型的圖像分類模型,這是在深度學習(Deep Learning)出現(xiàn)之前學術(shù)界以及工業(yè)界普遍使用的建模方式,在圖像檢索以及分類上都得到了廣范的使用。
綠網(wǎng)模型分為互聯(lián)網(wǎng)場景與電商場景兩個模型。本文中主要集中介紹互聯(lián)網(wǎng)場景的模型。互聯(lián)網(wǎng)場景是絕大多數(shù)網(wǎng)站/ App 的需求,特點是只檢出有明確證據(jù)判斷為色情內(nèi)容的圖片/視頻,標準較寬松,可以容忍一些大尺度性感照、不雅姿勢、猥瑣動作等。
目前綠網(wǎng)模型互聯(lián)網(wǎng)場景主要是在阿里云的阿里綠網(wǎng)(內(nèi)容安全),綠網(wǎng)的付費客戶數(shù)量隨著互聯(lián)網(wǎng)內(nèi)容管控的需求加大呈現(xiàn)了指數(shù)級增長。目前已經(jīng)為集團內(nèi)和集團外的大量客戶提供了安全穩(wěn)定的內(nèi)容保障。
目前綠網(wǎng)模型互聯(lián)網(wǎng)場景每天調(diào)用量已經(jīng)達到億級別,平均的 RT 為80ms左右。
由于圖像計算量復雜以及圖像數(shù)據(jù)量大,GPU 單機訓練已經(jīng)無法滿足目前模型迭代的速度,單機2卡訓練一個模型需要長達12天之久,因此分布式訓練勢在必行:
3.2 分布式調(diào)參
如上文,使用 PAISoar 進行分布式訓練后,綠網(wǎng)模型取得了非常明顯的計算加速效果,在128 GPU卡上,計算加速比能達到101倍。
分布式訓練另一個重要的工作就是調(diào)參,分布式規(guī)模擴大相當于增加 batch size,如果沿用以前的學習策略和參數(shù)(learning Rate等)會導致模型收斂慢或不收斂,達不到單機訓練的精度。我們需要進行調(diào)參來讓模型訓練收斂。
我們調(diào)參所用的方法:
1.訓練數(shù)據(jù)分片,在分布式訓練時,需要對數(shù)據(jù)進行分片,確保每個 worker 讀到的數(shù)據(jù)不一樣,最好是每幾個 epoch 后整體數(shù)據(jù) shuffle 一次,避免模型對輸入數(shù)據(jù)順序的依賴。
2.使用 PaiSoar 中的 learning rate 動態(tài)調(diào)節(jié)方法smooth_exponential_decay,在訓練初期采用 lr(learning rate) 平滑上升的策略,訓練剛開始時,使用一個較小的 lr,盡量避免一開始由于 lr 太大導致收斂不穩(wěn)定。后面再平滑增大 lr,盡量讓 weights 更新到離初始的 init weight 比較遠的地方。lr 增長到目標值后再采用指數(shù)衰退的方式,每個幾個 epoch 衰退一次,逐步減少 lr,避免訓練后期過大的 lr 導致訓練波動,不收斂,learning rate 變化趨勢如下圖所示:
3.分布式 N 個 worker 訓練,相當于單機 batch size 增大N倍,此時需要調(diào)大 learning rate,一般調(diào)大 sqrt(N)~N倍,可以結(jié)合 Tensorboard 來觀察 loss 和 lr 的變化趨勢來決定調(diào)大還是調(diào)小 lr.
經(jīng)過調(diào)參在不同 GPU 卡下綠網(wǎng)模型都調(diào)試收斂,不同 GPU 卡下訓練輪數(shù)如下表所示:
在16機(32 GPU卡)下綠網(wǎng)模型在20個小時收斂,比單機(2 GPU卡)快了14.4倍,完成一天內(nèi)訓練收斂的目標。同時對所有分布式訓練的模型使用了安全部的的火眼平臺進行 ROC 測試,測試集有4萬多條數(shù)據(jù)。經(jīng)測試,分布式模型效果和單機2 GPU卡效果一致:
3.3 模型迭代
我們通過分布式訓練加快了綠網(wǎng)模型的收斂,這時就可以嘗試采用更復雜的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來提高 AUC,之前綠網(wǎng)模型內(nèi)使用的是 Inception v3 結(jié)構(gòu),我們升級到 Inception v4 進行測試,發(fā)現(xiàn) ROC 曲線提升明顯:
PAISoar 的分布式加速能力讓我們可以嘗試使用更復雜的模型結(jié)構(gòu)來提高模型效果。
4. 總結(jié)和展望
通過與 AIS 網(wǎng)絡(luò)團隊、RDMA 項目團隊的協(xié)同合作,PAI Tensorflow 的分布式訓練框架 PAISoar 成功上線,并和安全部在綠網(wǎng)模型上進行合作落地,取得非常好的效果,128 GPU卡上計算加速比達到101倍。期望后續(xù)能服務(wù)更多的用戶,并為用戶提供簡單、高效、可靠的分布式服務(wù)。
接下來我們會繼續(xù)優(yōu)化分布式訓練框架 PAISoar:
- 嘗試不同的網(wǎng)絡(luò)拓撲結(jié)構(gòu)和通信架構(gòu),進一步充分利用網(wǎng)絡(luò)帶寬;
- 參數(shù)稀疏化通信,嘗試發(fā)現(xiàn)高頻變化特征從而達到進一步提高通信效率并且將模型精度衰減在一定范圍之內(nèi);
- 提供便捷的使用方法,方便用戶快速接入,降低學習成本。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的如何将深度学习训练速度提升一百倍?PAISoar 来了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在加州最古老的监狱教课是种什么样的体验?
- 下一篇: 【从入门到放弃-Java】并发编程-NI