《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > GPU高效通信算法——Ring Allreduce

GPU高效通信算法——Ring Allreduce

2019-10-12
關(guān)鍵詞: GPU 通信算法 RingAllreduce

  今天介紹一種新的GPU多卡計算的通信優(yōu)化算法——Ring Allreduce

  先來講一下常規(guī)的GPU多卡分布式計算的原理。

  第一點:我們知道GPU在矩陣并行化計算方面非常有優(yōu)勢,所以適合深度學(xué)習(xí)的訓(xùn)練。

  第二點:使用多個GPU卡訓(xùn)練同一個深度學(xué)習(xí)任務(wù)就是分布式計算。

  第三點:在分布式計算過程中,需要對計算任務(wù)資源進(jìn)行分片,通常的方式是將完整的網(wǎng)絡(luò)結(jié)構(gòu)放到每一個GPU上,然后將訓(xùn)練數(shù)據(jù)進(jìn)行分片分發(fā)到不同的GPU卡上。

640 (2).JPEG

  于是GPU分布式計算的具體形式就比較清晰了,以上圖為例。GPU1~4卡負(fù)責(zé)網(wǎng)絡(luò)參數(shù)的訓(xùn)練,每個卡上都布置了相同的深度學(xué)習(xí)網(wǎng)絡(luò),每個卡都分配到不同的數(shù)據(jù)的minibatch。每張卡訓(xùn)練結(jié)束后將網(wǎng)絡(luò)參數(shù)同步到GPU0,也就是Reducer這張卡上,然后再求參數(shù)變換的平均下發(fā)到每張計算卡,整個流程有點像mapreduce的原理。

  這里面就涉及到了兩個問題:

  問題一,每一輪的訓(xùn)練迭代都需要所有卡都將數(shù)據(jù)同步完做一次Reduce才算結(jié)束。如果卡數(shù)比較少的情況下,其實影響不大,但是如果并行的卡很多的時候,就涉及到計算快的卡需要去等待計算慢的卡的情況,造成計算資源的浪費。

  問題二,每次迭代所有的計算GPU卡多需要針對全部的模型參數(shù)跟Reduce卡進(jìn)行通信,如果參數(shù)的數(shù)據(jù)量大的時候,那么這種通信開銷也是非常龐大,而且這種開銷會隨著卡數(shù)的增加而線性增長。

  為了解決這樣的問題,就引入了一種通信算法Ring Allreduce,通過將GPU卡的通信模式拼接成一個環(huán)形,從而減少隨著卡數(shù)增加而帶來的資源消耗,如下圖所示:

640 (1).JPEG

  將GPU卡以環(huán)形通信之后,每張卡都有一個左手卡和右手卡,那么具體的模型參數(shù)是如何傳遞的呢,可以看下圖:

640.JPG

  因為每張卡上面的網(wǎng)絡(luò)結(jié)構(gòu)是固定的,所以里面的參數(shù)結(jié)構(gòu)相同。每次通信的過程中,只將參數(shù)send到右手邊的卡,然后從左手邊的卡receive數(shù)據(jù)。經(jīng)過不斷地迭代,就會實現(xiàn)整個參數(shù)的同步,也就是reduce。

  形成以下這張圖的樣式:

640.webp (4).jpg

  通過Ring Allreduce的方式,基本上可以實現(xiàn)當(dāng)GPU并行卡數(shù)的增加,實現(xiàn)計算性能的線性增長。

640.webp (3).jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。