小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

淺談GPU虛擬化和分布式深度學(xué)習(xí)框架的異同

 520jefferson 2021-07-17
圖片


經(jīng)常有人來問我:GPU虛擬化和分布式深度學(xué)習(xí)框架的異同,以及是不是用GPU虛擬化技術(shù)也可以解決現(xiàn)在超大規(guī)模深度學(xué)習(xí)模型的分布式訓(xùn)練難題。
 
這次不妨把我的觀點(diǎn)簡要總結(jié)并分享出來,只想知道結(jié)論的朋友只需看簡短的答案:兩者不是一回事,二者的思想是對立的,GPU虛擬化對解決分布式訓(xùn)練深度學(xué)習(xí)模型的難題沒有任何作用(不談負(fù)作用的話)。
 
想知道原因的讀者請繼續(xù)閱讀下文。

1
GPU虛擬化
 
GPU虛擬化的主要出發(fā)點(diǎn)是,有些計(jì)算任務(wù)的顆粒度比較小,單個(gè)任務(wù)無法占滿整顆GPU,如果為每一個(gè)這樣的任務(wù)單獨(dú)分配一顆GPU并讓這個(gè)任務(wù)獨(dú)占,就會(huì)造成浪費(fèi)。因此,人們希望可以讓多個(gè)細(xì)粒度的任務(wù)共享一顆物理的GPU,同時(shí),又不想讓這些任務(wù)因共享資源互相干擾,也就是希望實(shí)現(xiàn)隔離。
 
因此,GPU 虛擬化要實(shí)現(xiàn)“一分多”,也就是把一顆物理的GPU分成互相隔離的幾個(gè)更小的虛擬GPU,也就是vGPU,每顆vGPU獨(dú)立運(yùn)行一個(gè)任務(wù),從而實(shí)現(xiàn)多個(gè)任務(wù)共享一顆物理的GPU。
 
圖片
 
GPU虛擬化在推理任務(wù)中有需求,這是因?yàn)橥评砣蝿?wù)的負(fù)載取決于服務(wù)請求的多寡,在服務(wù)請求的低谷,推理需要的計(jì)算時(shí)有時(shí)無,多個(gè)不同的推理任務(wù)通過GPU虛擬化共享資源說的通。
 
在模型調(diào)試環(huán)節(jié)或教學(xué)環(huán)境,GPU虛擬化也有需求,算法工程師或?qū)W生每改一次代碼就啟動(dòng)一次任務(wù),這個(gè)任務(wù)或者因?yàn)殄e(cuò)誤很快就停止,或者被工程師殺死,不會(huì)持續(xù)的需要資源,如果每個(gè)人獨(dú)占一顆GPU,勢必造成浪費(fèi)。因此,把一顆GPU虛擬化成多顆vGPU,大家輪流使用,這樣比較經(jīng)濟(jì)劃算。
 
一般來說,正式的深度學(xué)習(xí)訓(xùn)練任務(wù)計(jì)算量都比較大,唯恐資源不夠,而不是發(fā)愁資源多余,因此GPU虛擬化在訓(xùn)練過程中不太需要。在正式訓(xùn)練中如果出現(xiàn) GPU 利用率不高的時(shí)候,采取的措施往往是對訓(xùn)練進(jìn)程進(jìn)行 profiling,找出 GPU 處于 idle 的原因,比如 io、通信、cpu 計(jì)算,而不是切分 GPU。
 
GPU虛擬化可能為云計(jì)算的“超售”帶來機(jī)會(huì),可以讓任務(wù)在資源池中“飄來飄去”??傊?,GPU虛擬化主要是為了解決資源利用率不足的問題。
 
當(dāng)然,解決GPU共享不一定必須借助GPU虛擬化。譬如,和一位業(yè)內(nèi)朋友討論時(shí),他提出一種設(shè)計(jì):在推理服務(wù)框架(例如Triton)層次本身就可以實(shí)現(xiàn)池化并實(shí)現(xiàn)多任務(wù)共享GPU。這種辦法相對于GPU虛擬化不太云原生,但在處理同一個(gè)公司內(nèi)部多個(gè)業(yè)務(wù)時(shí)也有自身的優(yōu)點(diǎn)。
 
GPU虛擬化的實(shí)現(xiàn)方法有多種可能,推薦感興趣的讀者閱讀文末騰訊團(tuán)隊(duì)寫的一篇深度文章《GPU虛擬化、算力隔離和qGPU》。
 
其中,最簡單的一種方式是 API 劫持,基本思路是把NVIDIA 的API提供一套同名的實(shí)現(xiàn),用戶程序原本是直接調(diào)用NVIDIA實(shí)現(xiàn)的函數(shù),現(xiàn)在卻“神不知鬼不覺地”把用戶對NVIDIA函數(shù)的調(diào)用換成對自己這一套函數(shù)的調(diào)用(用戶程序并不需要修改),在自己這一套函數(shù)里對可使用的資源數(shù)量施加一些限制,再把調(diào)用轉(zhuǎn)發(fā)給真正的NVIDIA版函數(shù)??梢钥闯觯@是一個(gè)工作量比較大且繁瑣,但技術(shù)上卻并不高深的做法。

 2
分布式深度學(xué)習(xí)
 
最理想的分布式深度學(xué)習(xí)框架是:用戶面對多機(jī)多卡編程時(shí),不需要考慮這些GPU之間復(fù)雜的拓?fù)浜蛿?shù)據(jù)傳輸,仍然像面對一個(gè)單體的“超級芯片”一樣編程,單卡的代碼和多卡的代碼一致,同時(shí),這些GPU協(xié)作時(shí)整體的利用率接近100%,也就是實(shí)現(xiàn)線性加速比。實(shí)際上,這方面恰恰是OneFlow最大的優(yōu)勢。
 
 
圖片
 
可見,分布式深度學(xué)習(xí)需要的是“多合一”,與GPU虛擬化的“一分多”截然不同。
 
如果說二者有一點(diǎn)相仿,僅僅是在用多個(gè)卡“模仿”一個(gè)卡,以及一個(gè)卡“模仿”多個(gè)卡,在”模仿”的字面意思上相似,但在核心難題和實(shí)現(xiàn)途徑上截然不同。要實(shí)現(xiàn)“多合一”的目標(biāo),恰恰要去虛擬化(這里的虛擬化也就是引入抽象層的意思)。如果有人聲稱GPU虛擬化可以在訓(xùn)練任務(wù)上實(shí)現(xiàn)“多合一”,那一定是忽悠外行的。
 
為什么這么說呢?
 
首先,虛擬化追求的是任務(wù)無感(task agnostic),也就是什么任務(wù),這個(gè)任務(wù)怎么來使用GPU,都不關(guān)心,也無法知曉,資源的劃分和隔離方法都是確定不變的。但深度學(xué)習(xí)框架要做好,必須是任務(wù)相關(guān)的,框架都要深入分析每一個(gè)任務(wù),并為這個(gè)任務(wù)和資源配額編譯生成一個(gè)特別的執(zhí)行方案(譬如有的是數(shù)據(jù)并行,有的模型并行、流水并行等等)。相信技術(shù)同行比較容易理解這一點(diǎn)。
 
其次,虛擬化追求的是任務(wù)可以在資源池中“飄來飄去”,但深度學(xué)習(xí)訓(xùn)練任務(wù)和資源的對應(yīng)關(guān)系都不得不靜態(tài)固化下來,也就是所謂的靜態(tài)至上。
 
很多人應(yīng)該已經(jīng)注意到了,絕大部分深度學(xué)習(xí)訓(xùn)練場景,資源都是獨(dú)占的。這明明不符合“云計(jì)算”的思想,為什么他們知道這不明智還要這么做?
 
那真的只是因?yàn)椴坏貌贿@樣。
 
第一,深度學(xué)習(xí)訓(xùn)練作業(yè)中的諸多計(jì)算都是毫秒、數(shù)十毫秒級別,動(dòng)態(tài)調(diào)度必然引入運(yùn)行時(shí)做決策的開銷,這些開銷即使在其它場合微不足道,在深度學(xué)習(xí)里相對于數(shù)十毫秒的任務(wù)粒度來說都不可忽視。那么干脆把能在運(yùn)行前固定下來的都定下來,不要在運(yùn)行時(shí)做決策,譬如靜態(tài)的placemet,靜態(tài)的任務(wù)切分等等,無所不用其極。
 
圖片

熟悉微軟去年發(fā)表在OSDI上的Rammer論文的朋友應(yīng)該注意到了,其靜態(tài)調(diào)度方案中,每個(gè)Kernel在GPU 的哪些流處理器上執(zhí)行都是定下來的(上圖b子圖中的static map)。
 
第二,深度學(xué)習(xí)訓(xùn)練任務(wù)中包含大量的數(shù)據(jù)傳輸,GPU之間的傳輸帶寬通常比片上訪存帶寬低非常多,因此數(shù)據(jù)傳輸?shù)拈_銷非常大,為了提高設(shè)備利用率,必須想辦法把計(jì)算和傳輸通過流水線重疊起來,也就是把傳輸?shù)臅r(shí)間掩蓋到計(jì)算背后。

為了實(shí)現(xiàn)這種“重疊”,無非是消費(fèi)者“預(yù)取”,或者是生產(chǎn)者“預(yù)發(fā)送”。而在“預(yù)取”中,消費(fèi)者必須知道生產(chǎn)者所在的位置才可行,而在“預(yù)發(fā)送”中,生產(chǎn)者必須知道消費(fèi)者所處的位置才可行。如果任務(wù)在集群中飄來飄去,生產(chǎn)者不能提前知道消費(fèi)者在哪里,也就無從談起“預(yù)發(fā)送”了,重疊計(jì)算和傳輸就變得不可能。
 
第三,多個(gè)深度學(xué)習(xí)任務(wù)共享資源,可能會(huì)互相干擾,使得每個(gè)任務(wù)的執(zhí)行時(shí)間不可預(yù)測,發(fā)生抖動(dòng),形成straggler,使得整體系統(tǒng)的性能下降,得不償失。
 
分布式深度學(xué)習(xí)訓(xùn)練從根本上是排斥“飄來飄去”的,要求是靜態(tài)的、獨(dú)占的,這恰恰與虛擬化的精神相悖。
 
總之,從編程接口的角度看,OneFlow的一致性視角,把多機(jī)多卡“虛擬化”成一個(gè)超級芯片,大大降低了用戶編寫分布式深度學(xué)習(xí)程序的難度。但是,為了讓用戶從計(jì)算效率上也感覺是在一個(gè)超級芯片上工作,恰恰需要“去虛擬化”的手段,要為每一個(gè)不同的任務(wù)都編譯得到不一樣的資源映射方案,而且這個(gè)映射方案是靜態(tài)的,不鼓勵(lì)飄來飄去。
 
最后,全世界從事深度學(xué)習(xí)框架研發(fā)的人群的數(shù)量遠(yuǎn)超從事GPU虛擬化的人群,在研發(fā)面向AI基礎(chǔ)架構(gòu)的群體里,絕大多數(shù)水平最拔尖的工程師也是工作在深度學(xué)習(xí)框架這個(gè)賽道里,而不是其它方向。深度學(xué)習(xí)框架,毫無爭議地是人工智能領(lǐng)域里最重要的基礎(chǔ)設(shè)施軟件

推薦閱讀:關(guān)于GPU共享的文章,這里給出一篇騰訊資深工程師的博客鏈接,感興趣的讀者可以在同一個(gè)倉庫中找到其它幾篇關(guān)聯(lián)內(nèi)容。
 
GPU共享一:你真的需要嗎?
(https://github.com/zw0610/zw0610.github.io/blob/master/notes-cn/gpu-sharing-1.md)

注:題圖源自Pixabay

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多