色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于分布式訓練的線性加速實踐詳解

云知聲 ? 來源:djl ? 作者:云知聲 ? 2019-08-08 17:17 ? 次閱讀

分布式訓練需求

Deep Learning 在過去幾年中取得了長足的發展,尤其在語音、圖像、機器翻譯、自然語言處理等領域更是取得了飛躍式的提升,但與之相伴的是模型越來越復雜,參數量越來越大,例如:Inception v3參數量約25million,ResNet 152 擁有 60million 參數、VGG16 約 140million 參數,Deep Speech 2 參數量更是超過300million,一些語言模型參數量甚至超過 1billion (Exploringthe Limits of Language Modeling)。數據并行訓練方式要求每個 GPU 節點擁有一份完整的模型參數副本,并在融合梯度時發送和接收完整的梯度數據,巨大的通信數據量給多機多卡并行訓練帶來了極大的網絡通信壓力。

另一方面,越來越多的機器學習領域開始轉向DeepLearning比如 TTS、NLP。這意味著 GPU 集群的用戶(研發人員)數量將大幅膨脹。如何在多用戶環境下更高效的分配、利用 GPU 資源?一個辦法是計算資源以 GPU 為單位分配給用戶,而不管這些 GPU 是否在同一臺物理機上。這種分配方式的資源利用率雖高但同時也要求分布式訓練效率要足夠高,高到可以忽略跨機通信時延。

以上兩方面原因促使我們必須尋找更高效的通信算法,最大限度釋放 GPU 集群的并行計算能力。

分布式訓練的通信方法和問題

模型參數量的大小與計算量不是成簡單的正比關系,比如相同參數量的全連接模型和 CNN 的計算量相差了幾個數量級,但模型的參數量與分布式訓練的網絡通信代價一定是正相關的,尤其是超大模型,跨節點同步參數通常會造成嚴重的網絡擁塞。

主流的 Deep Learning 框架解決參數同步的方式有兩種:同步更新和異步更新。同步更新模式下,所有 GPU 在同一時間點與參數服務器交換、融合梯度;異步更新模式下,GPU 更新參數的時間點彼此解耦,各自獨立與參數服務器通信,交換、融合梯度。兩種更新模式各有優缺點,為了文章不失焦點并限制篇幅,這里不做展開討論了,我們只列出結論:

異步更新通信效率高速度快,但往往收斂不佳,因為一些速度慢的節點總會提供過時、錯誤的梯度方向

同步更新通信效率低,通常訓練更慢,但訓練收斂穩定,因為同步更新基本等同于單卡調大 batch size 訓練

在實際生產環境中,我們通常很看重模型效果和訓練速度,但當魚與熊掌不能兼得時,模型效果還是更重要一些的,為此犧牲一些訓練速度也不是不可接受,所以同步更新基本是主流方法

那么如何解決同步更新的網絡瓶頸問題呢?學者和工程師想出了多種優化方法,比如結合同步更新和異步更新、半精度訓練、稀疏梯度更新等等。限于篇幅,我們無法一一展開,在本文中,我們只介紹一種方法:Ring Allreduce。

如何搭建一套高效的分布式訓練框架

通過上面的分析,以及日常工作中的經驗,我們通常認為一個理想的 GPU 集群應包含這樣幾個特性:

1. GPU 跨機并行,達到近似線性加速比

2. 用戶以 GPUs 為單位申請資源,物理節點對用戶透明

3. 使用要簡單,甚至單機單卡、單機多卡、多機多卡可以由一套代碼實現

目標確定了,就來看看如何搭建這樣一套系統,我們選擇如下幾個組件:Kubernetes、TensorFlow以及 Horovod。

Kubernetes 是目前最流行的開源容器集群管理系統,在我們的系統中,Kubernetes 主要負責負責集群的容器化管理,包括 GPU 資源的申請、釋放、監控等。

TensorFlow 是 Google 大力推廣的基于數據流圖的 Deep Learning 框架,無論是使用者數量還是社區活躍程度,都遙遙領先其他競爭對手,在我們的系統中主要負責各個業務線上深度模型的搭建。

Horovod 是 Uber 新近開源的高效分布式訓練通信框架,Horovod本身只負責節點間網絡通信、梯度融合,在運行時需要綁定 TensorFlow 做單機運算。

這里有兩個問題需要說明一下:

1. TensorFlow 框架本身已經支持分布式訓練,為什么不直接使用呢?

因為TensorFlow的分布式框架是基于參數服務器的,這種結構容易造成網絡堵塞;

并且開源版 TensorFlow 的跨機通信是通過gRPC + ProtocolBuffers 實現的,這種方案的問題是,首先 gRPC 本身的效率就比較差,其次使用 Protocol Buffers 序列化就意味著節點間的所有交互必須經過內存,無法使用 GPUDirect RDMA,限制了速度提升;

即使拋開性能問題,編寫 TensorFlow 的分布式代碼也是一件十分繁瑣的工作,有過相關經驗的同學應該有所體會。

2. Horovod 是一個較新的分布式訓練通信框架,它有哪些優勢呢?

Horovod 有如下主要特點:Horovod可以實現接近 0.9x 的加速比;

一套代碼實現單機單卡、單機多卡、多機多卡;社區活躍,代碼迭代速度快,作為對比 Baidu Allreduce 已經停止維護了。

在接下來的兩小節中,我們將分別介紹 Horovod的核心算法和以及部署實踐。

Horovod 核心算法

Ring Allreduce ,原是 HPC 領域一種比較成熟的通信算法,后被 Baidu SVAIL 引入到 Deep Learning訓練框架中,并于 2017年2月公開 。Ring Allreduce 完全拋棄了參數服務器,理論上可以做到線性加速。Ring Allreduce 算法也是 Horovod的核心,Horovod對 Baidu SVAIL 的實現做了易用性改進和性能優化。

在這一節中,我們會詳細介紹Ring Allreduce 的算法流程:。

PS WORKER 框架下同步更新方式,以及網絡瓶頸定量分析

我們來定量分析一下,同步更新的網絡瓶頸問題,以Deep Speech 2 為例:

模型包含 300M 參數,相當于 1.2 G 的大小的內存數據(300M * sizeof(float))

假設網絡帶寬 1G bytes/s (萬兆網卡)

2 卡同步更新,需要 1.2 s 完成參數 Send(這還不算 Receive 的時間)

10 卡同步更新,需要 9.8 s 完成參數 Send

通過簡單的計算會發現,在單 ps 節點、有限帶寬環境下,通信時間隨著 GPU 數量的增加而線性增長,很難想象一個10卡的集群每訓練一個 batch 都需要等待 10 ~ 20s 來同步參數!通信時延幾乎完全覆蓋掉了 GPU 并行計算節節省下的計算時間,當然在實際訓練環境中,網絡速度也是能達到幾十 Gbps 的,而且通常也會多設置幾個 ps 節點,比如每個物理節點設置一個 ps ,這樣可以減輕帶寬瓶頸,但這些措施都沒有從根本上解決問題。

關于分布式訓練的線性加速實踐詳解

Ring Allreduce 框架下同步更新方式

在上面的通信方式中,網絡傳輸量跟 GPU 成正比,而Ring Allreduce 是一種通信量恒定的通信算法,也就是說,GPU 的網絡通信量不隨 GPU 的數量增加而增加,下面我們會詳細說明一下Ring Allreduce 框架下 GPU 的通信流程。

首先定義 GPU 集群的拓撲結構:

GPU 集群被組織成一個邏輯環

每個 GPU 有一個左鄰居、一個右鄰居

每個 GPU 只從左鄰居接受數據、并發送數據給右鄰居。

關于分布式訓練的線性加速實踐詳解

梯度融合過程分為兩階段:

1. Scatter Reduce :在這個Scatter Reduce 階段,GPU 會逐步交換彼此的梯度并融合,最后每個 GPU 都會包含完整融合梯度的一部分

2. Allgather :GPU 會逐步交換彼此不完整的融合梯度,最后所有 GPU 都會得到完整的融合梯度

Scatter Reduce

為了方便說明,我們用梯度加和代替梯度融合。假設集群中有 N 個 GPU,那么將梯度數據等分為 N 份,接下來將在 GPUs 間進行 N-1 次Scatter Reduce 迭代,在每一次迭代中,每個 GPU 都會發送所有梯度數據的 1/N 給右鄰居,并從左鄰居接收所有梯度數據的 1/N 。同一次Scatter Reduce 迭代中,發送和接收的數據塊的編號是不同的,例如,第一輪迭代,第 n 個 GPU 會發送第 n 號數據塊,并接收第 n-1 號數據塊。經過 n-1 輪迭代,梯度數據會像圖2 所示,每個 GPU 都包含了部分完整梯度信息

關于分布式訓練的線性加速實踐詳解

關于分布式訓練的線性加速實踐詳解

Allgather

和Scatter Reduce 階段類似,只不過這里只拷貝不求和,最終每個GPU 都得到了所有融合后的梯度。

關于分布式訓練的線性加速實踐詳解

關于分布式訓練的線性加速實踐詳解

這么做有什么好處呢?

下面我們來定量的分析一下,每個 GPU 在Scatter Reduce 階段,接收 N-1 次數據,N 是 GPU 數量;每個 GPU 在allgather 階段,接收 N-1 次 數據;每個 GPU 每次發送 K/N 大小數據塊,K 是總數據大小;所以,Data Transferred=2(N?1)*K/N =

(2(N?1)/N)*K,隨著 GPU 數量 N 增加,總傳輸量恒定!總傳輸量恒定意味著通信成本不隨 GPU 數量增長而增長,也就是說我們系統擁有理論上的線性加速能力。再回到 DS2 的例子,300million參數也就是 1.2Gb 數據量,Ring Allreduce 方式更新一次需要傳送并接收 2.4Gb 數據,假設網絡使用 GPUDirect RDMA + InfiniBand,GPUDirect RDMA 帶寬約為10Gb/s;InfiniBand 帶寬約為6Gb/s,所以通信瓶頸在 InfiniBand 。(2.4Gb)/(6.0Gb/s) ≈ 400ms,也就是每輪迭代需要 400 ms 做參數同步,這 400ms 的數據傳輸時間是恒定的,不隨 GPU 數量增加而增加。

在 Kubernetes 環境部署Horovod

Kubernetes 是一套容器集群管理系統,支持集群化的容器應用,從使用角度看

Kubernetes 包含幾個重要的概念:

1. pod,pod 由一個或多個容器構成,在問本文描述的場景下,一個 pod 包含一個容器,容器中包含1個或多個 GPU 資源

2. Services,對外提供服務發現,后面通常會對接容器實例

3. YAML , YAML 是一種類似 JSON 的描述語言 ,在Kubernetes 中用 YAML 定義 pod 、Service 、Replication Controller等組件

4.kubectl,kubectl 是一套命令行工具,負責執行開發人員和 Kubernetes 集群間的交互操作,例如查看 Kubernetes 集群內 pod 信息匯總kubectl get pod;查看 Kubernetes 內物理節點信息匯總 kubectl get node

另外,近期我們還會有一篇詳細介紹TensorFlow on Kubernetes 的文章,所以關于Kubernetes 的詳細信息本文就不贅述了。

Build image

首先我們需要創建一個 Horovod鏡像,這個鏡像需要包含 TensorFlow 環境 、Horovod環境 、以及 OpenMPI的免密的登陸配置,我們可以選擇TensorFlow:1.3.0-gpu-py3 作為基礎鏡像,通過 Dockerfile 逐步安裝 Horovod環境及 Open MPI免密登陸配置。

第一步,安裝 Horovod相關依賴:apt-getupdate ; apt-get install -y openssh-server wgetlibnccl2 libnccl-dev。

第二步,下載并安裝 Open MPI,注意:如果你的網絡環境支持 RDMA,那你需要帶 --with-cuda 參數從源碼配置安裝:./configure --with-cuda ; make all install。

第三步,安裝 Horovod:HOROVOD_GPU_ALLREDUCE=NCCLpip install --no-cache-dir horovod,

第四步,設置 MPI SSH 免密登陸環境,方法見下面的Dockerfile。

編寫完成 Dockerfile 后,我們就可以 build 鏡像了:docker build -t horovod:v1 . 。

關于分布式訓練的線性加速實踐詳解

MPI on Kubernetes 相關問題

我們在調試過程中發現,Kubernetes 環境運行 Open MPI必須將 pod 設置為 host 網絡模式,否則 MPI 節點間通信時會 hang 住。host 網絡模式的問題在于它會占用宿主機端口號,多用戶環境下會有沖突,所以我們還需要想辦法為每個 pod 獨立設置一個SSH端口號,并通知集群里所有 Horovod節點。

方法詳見下面的腳本:腳本在 pod 創建時啟動,其中 Host** 為集群中所有節點的節點名和 SSH 端口號,腳本的最后一行作用是更改本機的 SSH端口號。這種方法可行但并不優雅,所以如果你有其他更好的方案,請在文章下方留言告訴我。

關于分布式訓練的線性加速實踐詳解

Pod yaml

這里我們申請 2 pod,每個 pod 各 2 個 GPU ,horovod-mpi0 的 SSH端口設置為 8900 ;horovod-mpi1 的 SSH端口設置為 8901。

關于分布式訓練的線性加速實踐詳解

測試腳本及 Benchmark

·集群環境:Kubernetes,兩機兩卡,1080ti

啟動腳本:

如果將 Benchmark 整理成圖表,那么看起來是這樣的。

在普通以太網環境下, 2 機 4 卡相比單機單卡,Horovod 可加速 3.6 倍。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9239

    瀏覽量

    85675
  • 計算量
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6884
收藏 人收藏

    評論

    相關推薦

    分布式軟件系統

    分布式軟件系統分布式軟件系統(Distributed Software Systems)是支持分布式處理的軟件系統,是在由通信網絡互聯的多處理機體系結構上執行任務的系統。它包括分布式
    發表于 07-22 14:53

    LED分布式恒流原理

    ,智能化一定離不了灰度等級再現。[url=][/url] 分布式恒流技術還有一個特點是,讓AC電源部分繼續采用傳統開關電源,恒壓的供電模式。開關電源技術積累會給LED電源設計創造品質條件,雖然加速老化
    發表于 03-09 16:47

    基于分布式調用鏈監控技術的全息排查功能

    作為鷹眼的商業化產品,用于全鏈路APM監控的阿里云業務實時監控服務 (ARMS) , 基于鷹眼的全息排查沉淀,近日推出了基于分布式調用鏈監控技術的全息排查功能,將該功能提供給廣大用戶。至此,ARMS
    發表于 08-07 17:02

    分布式光纖測溫系統DTS

    關于分布式光纖測溫系統的簡介說明
    發表于 10-18 14:01

    關于分布式系統的全面介紹

    操作系統-----分布式系統概述
    發表于 07-25 06:59

    分布式系統的優勢是什么?

    當討論分布式系統時,我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡的、并行的、并發的和分散的。分布式處理是一個相對較新的領域,所以還沒有‘致的定義。與順序計算相比、并行的、并發的和
    發表于 03-31 09:01

    HarmonyOS應用開發-分布式設計

    設計理念HarmonyOS 是面向未來全場景智慧生活方式的分布式操作系統。對消費者而言,HarmonyOS 將生活場景中的各類終端進行能力整合,形成“One Super Device”,以實現
    發表于 09-22 17:11

    如何高效完成HarmonyOS分布式應用測試?

    作者:liuxun,HarmonyOS測試架構師HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的開發者投入到
    發表于 12-13 18:07

    分布式系統硬件資源池原理和接入實踐

    /distributedhardware_distributed_hardware_fwk 四、硬件資源池接入實踐 4.1 接口定義 通過前文分析,可以看到分布式硬件與南向硬件的交互涉及\"硬件信息采集\"和\"驅動注冊\"兩類業務,與此
    發表于 12-06 10:02

    GL Studio的分布式虛擬訓練系統關鍵技術

    為在GL Studio中實現分布式虛擬儀表的遠程交互,對該虛擬訓練系統的關鍵技術進行研究。在分析分布式虛擬訓練系統運行環境和操作流程的基礎上,給出系統的總體設計框架;設計出基
    發表于 03-22 00:04 ?27次下載

    關于分布式系統的幾個問題

    本文摘自:華為云社區 作者:華為加拿大研究院軟件專家 Jet老師 小引 分布式系統是一個古老而寬泛的話題,而近幾年因為 大數據 概念的興起,又煥發出了新的青春與活力。本文將會通過對如下幾個問題展開談
    的頭像 發表于 09-23 16:28 ?3071次閱讀

    探究超大Transformer語言模型的分布式訓練框架

    。 優化的分布式集群架構:NVIDIA DGX SuperPOD 有了高效的分布式訓練框架,自然也需要優化的分布式訓練集群。 NVIDIA
    的頭像 發表于 10-20 09:25 ?2454次閱讀

    歐拉(openEuler)的分布式能力加速舉例

    openEuler Summit 2021的分布式&多樣性計算分論壇上,對openEuler的分布式能力加速進行了舉例。
    的頭像 發表于 11-10 15:49 ?1714次閱讀
    歐拉(openEuler)的<b class='flag-5'>分布式</b>能力<b class='flag-5'>加速</b>舉例

    基于PyTorch的模型并行分布式訓練Megatron解析

    NVIDIA Megatron 是一個基于 PyTorch 的分布式訓練框架,用來訓練超大Transformer語言模型,其通過綜合應用了數據并行,Tensor并行和Pipeline并行來復現 GPT3,值得我們深入分析其背后機
    的頭像 發表于 10-23 11:01 ?3131次閱讀
    基于PyTorch的模型并行<b class='flag-5'>分布式</b><b class='flag-5'>訓練</b>Megatron解析

    分布式通信的原理和實現高效分布式通信背后的技術NVLink的演進

    大型模型的大小已經超出了單個 GPU 的范圍。所以就需要實現跨多個 GPU 的模型訓練,這種訓練方式就涉及到了分布式通信和 NVLink。 當談及分布式通信和 NVLink 時,我們進
    的頭像 發表于 11-18 09:39 ?500次閱讀
    <b class='flag-5'>分布式</b>通信的原理和實現高效<b class='flag-5'>分布式</b>通信背后的技術NVLink的演進
    主站蜘蛛池模板: xxx成熟xxx| 九色PORNY真实丨首页| 男生在床上脱美女 胸| 99精品国产电影| 日本不卡免免费观看| 国产99精品视频| 亚洲精品第二页| 久热久热精品在线观看| WWW国产亚洲精品久久| 午夜插插插| 久久久久久久久久久福利观看| bt天堂午夜国产精品| 挺进绝色老师的紧窄小肉六| 久久超碰色中文字幕| vidosgratis tv少女| 午夜理论在线观看不卡大地影院| 久久久青青| 国产国产成人人免费影院| 杨幂被视频在线观看| 欧美高清69vivo| 国产在线精彩视频| A级毛片高清免费网站不卡| 亚洲 欧美 日韩 卡通 另类 | 亚洲精品高清AV在线播放| 久久re这里视频精品15| xxx性欧美在线| 亚洲欧美自拍清纯中文字幕| 欧美高清一区二区三| 果冻传媒 在线播放观看| MM131亚洲精品久久安然| 亚洲精品久久久久久偷窥| 免费A级毛片无码无遮挡| 国产午夜精品一区二区| 99热这里只有 精品| 亚洲青青草原| 日韩1区1区产品乱码芒果榴莲| 久久青青无码AV亚洲黑人| 国产精品人成在线播放新网站| 999精品免费视频| 亚洲三级精品| 午夜福利网国产A|