阿里妹導讀:得力於數據規模增加、神經網絡結構的演進和計算能力的加強,深度學習的圖像處理、語音識別等領域取得了飛速發展。隨着訓練數據規模和模型複雜度的不斷增大,如何充分利用分佈式集羣的計算資源加快訓練速度,提高業務支持能力成爲用戶很是關注的問題。今天,咱們就來分享阿里工程師的實踐成果:將深度學習模型的大規模分佈式訓練框架 PAISoar應用於綠網模型(多層CNN網絡)後,綠網模型在128 GPU卡上取得101倍的計算加速比,效果顯著。算法
近幾年來深度學習發展迅速,圖像處理、語音識別等領域都取得了飛速發展。例如在圖片識別上,神經網絡結構快速演進,分類的網絡結構從 AlexNet、VGG、Inception V1 發展到了 Inception V四、Inception-ResNet、SENet。隨着模型層次愈來愈深,參數愈來愈多,模型能力也愈來愈強,ImageNet 數據集 Top-5 的錯誤率愈來愈低,目前降到了2.25%(人眼5.1%)。安全
隨着模型複雜度不斷增加、訓練樣本的指數級增加,分佈式進行高效並行的神經網絡訓練已經變得愈加重要。在社區版 Tensorflow 中,分佈式訓練是基於 Parameter Server 模式進行多機訓練的。在這種訓練方式下訓練任務一般會遇到如下挑戰:服務器
對此,咱們基於 PAI Tensorflow 研發了針對於深度學習模型的高速分佈式訓練框架 PAISoar,從硬件到軟件打造一套分佈式訓練場景 E2E 的解決方案:網絡
PAISoar 在 Tensorflow 官方 benchmarks 模型上取得了很是不錯的加速效果。同時咱們還和安所有團隊合做,將該研發成果成功的在安所有圖像模型業務上落地。安所有的綠網模型訓練樣本280萬張圖片,單機兩卡訓練須要12天才能收斂,所以有着很是強的分佈式訓練需求,但願能達到一天內完成訓練,提高模型迭代能力。藉助於 PAISoar,綠網模型分佈式訓練取得很是明顯的加速效果,模型收斂時間從原先的12天下降到目前的一天之內,大大加速了業務的快速迭代。架構
咱們用 images/sec (每秒處理的圖片數或樣本數)來統計分佈式模型的計算能力。框架
假設單 GPU 卡下計算能力爲1,綠網模型在 PAISoar 中計算加速好比下圖所示:異步
在 PAISoar 上,綠網模型在128 GPU卡上取得了101倍的計算加速比,效果很是明顯。分佈式
2.1 PAISoar簡介ide
PAISoar 是基於 PAI Tensorflow 實現的分佈式訓練框架。經過 PAISoar,咱們提供了一個從硬件到軟件、易用的分佈式訓練的性能優異框架。性能
2.1.1 網絡層
咱們和 AIS 網絡團隊、RDMA 項目團隊一塊兒搭建了集團內部第一套基於 RoCE 的大規模 RDMA 集羣,並針對於深度學習場景進行了相應的參數調優,包括:
2.1.2 軟件層
2.1.3 API 層
2.2 性能指標
基於 PAISoar,深度神經網絡模型的分佈式訓練性能提高明顯。
咱們使用 Tensorflow 官方 Benchmarks 進行性能測試。Tensorflow Benchmarks 是一套 CNN 模型的基準測試集合,包括 Inception v三、ResNet-50、ResNet-15二、VGG1六、Alexnet 等經典 CNN 模型。下面是咱們分別在一、二、四、八、1六、3二、64GPU卡規模下測試了 Inception v三、ResNet-50、ResNet-15二、VGG16 這4個模型的性能:
圖中參數說明:
Tensorflow 默認的分佈式方法是 worker+ps 模式,variable 定義在 ps 上,worker 會訓練並更新 ps 上的參數。咱們將底層通訊協議替換成 RDMA 後,各模型性能都有提高,在 64GPU 卡下,Inception v三、ResNet-50、ResNet-15二、VGG16 四個模型性能分別提高:24.94%、44.83%、38.80%、23.38%。
相較於 worker+ps 模式,PAISoar 中提供的 Ring AllReduce 通訊模式對網絡帶寬利用率更高,延遲更小。與 worker+ps (使用 grpc 通訊)相比,各模型性能提高很是明顯,在64 GPU 卡下,Inception v三、ResNet-50、ResNet-15二、VGG16四個模型性能分別提高:84.77%、125.43%、56.40%、40.04%。
同時,咱們也和開源的 horovod 進行對比,在64 GPU卡下,Inception v三、ResNet-50、ResNet-15二、VGG16四個模型性能分別提高:-6.4%、2%、21%、36%,總體性能要好於 horovod。
接下來將會介紹 PAISoar 中的關鍵技術:RDMA 和 Ring AllReduce 的技術細節。
2.3 RDMA技術
RDMA(Remote Direct Memory Access) 是一種硬件IO技術,經過將傳輸協議固化在網卡硬件中,網卡就能夠實現內核旁路(kernel bypass)和零拷貝操做,從而大幅下降網絡 IO 的延遲時間,大幅提升網絡吞吐,同時不影響 CPU 的負載。RDMA 在以太網上有2個標準,2002年,ITEF 制定了 iWARP(Internet Wide Area RDMA Protocol),2010年,IBTA 制定了 RoCE(RDMA over Converged Ethernet)規範。阿里數據中心網絡裏採用 RoCE(v2) 方案。在時延測試中,RoCE 能夠達到單向爲2 - 3us左右,而與之對應的 TCP 時延爲10 - 15us 左右。
爲了實現 RoCE 的性能優點,以太網須要提供一個無損網絡作爲基礎,不然對性能的負面影響很是大。以太網的無損機制主要經過端到端的 QoS 來實現,即全部的QoS 機制須要在服務器和交換機上作統一的設置,包括 DSCP、隊列、DCQCN、ECN、PFC 等。經過使用這些技術,可以保證在 burst,incast 等 IO 場景下 RDMA也有穩定的表現。下圖是在一個32個節點的集羣中作長時間壓測時採集到的發送帶寬,能夠看到各個節點的帶寬很是穩定。
RoCE 技術雖然有不少技術優點,可是它對無損網絡的要求也致使網絡配置很是複雜,除了新增不少網絡設備的管控配置,同時也把以前相對獨立的網卡設備歸入了網絡運營的範圍,大大增長了運營的內容和難度。與此相適應,在主機上須要安裝專門的 RDMA 軟件平臺包,包括網卡驅動、用戶庫和管控軟件等部件。這些軟件能夠作到一鍵部署、自動配置和按期巡檢,而且與相應的監控系統都有數據對接。經過安裝這些軟件包,就能夠作到及時發現物理網絡的配置錯誤,硬件故障,讓應用遠離複雜的網絡管理,順利享受 RDMA 帶來的技術紅利。
2.3 Ring AllReduce 技術
對於許多在大型數據集上訓練的現代深度學習模型來講,基於數據並行(Data Parallelism)的同步分佈式訓練是最合適的訓練方法。數據並行的同步分佈式訓練在每一個 worker 上都有一份完整的模型,每一個 worker 讀取訓練集的不一樣部分計算出不一樣的梯度,而後同步各個 worker 上的梯度並求平均值,再用平均梯度來更新每一個 worker 上的模型。在社區版 Tensorflow 中,梯度平均經過將 Variable 分配到公共的 ps (parameter server)節點上實現,通訊代價受 worker 數量和 Variable 分配策略影響很大。在 PAISoar 中咱們使用 Ring AllReduce 技術實現梯度平均,通訊代價的上限與 worker 數量無關,且再也不須要額外的 ps 節點。
Ring Allreduce 算法的原理與核心功能以下:
Ring AllReduce 算法將 device 放置在一個邏輯環路(logical ring)中。每一個 device 從上行的 device 接收數據,並向下行的 deivce 發送數據,所以能夠充分利用每一個 device 的上下行帶寬。
使用 Ring Allreduce 算法進行某個稠密梯度的平均值的基本過程以下:
將每一個設備上的梯度 tensor 切分紅長度大體相等的 num_devices 個分片;
ScatterReduce 階段:經過 num_devices - 1 輪通訊和相加,在每一個 device 上都計算出一個 tensor 分片的和;
AllGather 階段:經過 num_devices - 1 輪通訊和覆蓋,將上個階段計算出的每一個 tensor 分片的和廣播到其餘 device;
在每一個設備上合併分片,獲得梯度和,而後除以 num_devices,獲得平均梯度;
以 4 個 device上的梯度求和過程爲例:
ScatterReduce 階段:
通過 num_devices - 1 輪後,每一個 device 上都有一個 tensor 分片進獲得了這個分片各個 device 上的和。
AllGather 階段:
通過 num_devices - 1 輪後,每一個 device 上都每一個 tensor 分片都獲得了這個分片各個 device 上的和;由上例能夠看出,一次 Ring Allreduce 中單個節點總的通訊數據量是
每一個節點上通訊數據量的上限不會隨分佈式規模變大而變大。
在 PaiSoar 中,咱們基於 Tensorflow 原生的通訊原語 Rendezvous 實現 Ring AllReduce 算法,並提供簡化用戶構建分佈式 TF 模型訓練的
ReplicatedVarsOptimizer 接口(用戶文檔),核心功能以下:
3.1 模型介紹
綠網模型開始於2013年,在安所有成立初期就已經存在,用於電商場景中的色情內容的識別。綠網模型最初基於 BOW(Bag of Word)類型的圖像分類模型,這是在深度學習(Deep Learning)出現以前學術界以及工業界廣泛使用的建模方式,在圖像檢索以及分類上都獲得了廣範的使用。
綠網模型分爲互聯網場景與電商場景兩個模型。本文中主要集中介紹互聯網場景的模型。互聯網場景是絕大多數網站/ App 的需求,特色是隻檢出有明確證據判斷爲色情內容的圖片/視頻,標準較寬鬆,能夠容忍一些大尺度性感照、不雅姿式、猥瑣動做等。
目前綠網模型互聯網場景主要是在阿里雲的阿里綠網(內容安全),綠網的付費客戶數量隨着互聯網內容管控的需求加大呈現了指數級增加。目前已經爲集團內和集團外的大量客戶提供了安全穩定的內容保障。
目前綠網模型互聯網場景天天調用量已經達到億級別,平均的 RT 爲80ms左右。
因爲圖像計算量複雜以及圖像數據量大,GPU 單機訓練已經沒法知足目前模型迭代的速度,單機2卡訓練一個模型須要長達12天之久,所以分佈式訓練勢在必行:
3.2 分佈式調參
如上文,使用 PAISoar 進行分佈式訓練後,綠網模型取得了很是明顯的計算加速效果,在128 GPU卡上,計算加速比能達到101倍。
分佈式訓練另外一個重要的工做就是調參,分佈式規模擴大至關於增長 batch size,若是沿用之前的學習策略和參數(learning Rate等)會致使模型收斂慢或不收斂,達不到單機訓練的精度。咱們須要進行調參來讓模型訓練收斂。
咱們調參所用的方法:
1.訓練數據分片,在分佈式訓練時,須要對數據進行分片,確保每一個 worker 讀到的數據不同,最好是每幾個 epoch 後總體數據 shuffle 一次,避免模型對輸入數據順序的依賴。
2.使用 PaiSoar 中的 learning rate 動態調節方法smooth_exponential_decay,在訓練初期採用 lr(learning rate) 平滑上升的策略,訓練剛開始時,使用一個較小的 lr,儘可能避免一開始因爲 lr 太大致使收斂不穩定。後面再平滑增大 lr,儘可能讓 weights 更新到離初始的 init weight 比較遠的地方。lr 增加到目標值後再採用指數衰退的方式,每一個幾個 epoch 衰退一次,逐步減小 lr,避免訓練後期過大的 lr 致使訓練波動,不收斂,learning rate 變化趨勢以下圖所示:
3.分佈式 N 個 worker 訓練,至關於單機 batch size 增大N倍,此時須要調大 learning rate,通常調大 sqrt(N)~N倍,能夠結合 Tensorboard 來觀察 loss 和 lr 的變化趨勢來決定調大仍是調小 lr.
通過調參在不一樣 GPU 卡下綠網模型都調試收斂,不一樣 GPU 卡下訓練輪數以下表所示:
在16機(32 GPU卡)下綠網模型在20個小時收斂,比單機(2 GPU卡)快了14.4倍,完成一天內訓練收斂的目標。同時對全部分佈式訓練的模型使用了安所有的的火眼平臺進行 ROC 測試,測試集有4萬多條數據。經測試,分佈式模型效果和單機2 GPU卡效果一致:
3.3 模型迭代
咱們經過分佈式訓練加快了綠網模型的收斂,這時就能夠嘗試採用更復雜的神經網絡結構來提升 AUC,以前綠網模型內使用的是 Inception v3 結構,咱們升級到 Inception v4 進行測試,發現 ROC 曲線提高明顯:
PAISoar 的分佈式加速能力讓咱們能夠嘗試使用更復雜的模型結構來提升模型效果。
經過與 AIS 網絡團隊、RDMA 項目團隊的協同合做,PAI Tensorflow 的分佈式訓練框架 PAISoar 成功上線,並和安所有在綠網模型上進行合做落地,取得很是好的效果,128 GPU卡上計算加速比達到101倍。指望後續能服務更多的用戶,併爲用戶提供簡單、高效、可靠的分佈式服務。
接下來咱們會繼續優化分佈式訓練框架 PAISoar:
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。