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