Kubernetes GPU 共享技術(shù)調(diào)研

kubernetes GPU共享技術(shù)調(diào)研

對于一個(gè)以內(nèi)容分發(fā)為主的互聯(lián)網(wǎng)公司來說官硝,文章廣告等的準(zhǔn)確分發(fā)至關(guān)重要袜啃,而機(jī)器學(xué)習(xí)模型訓(xùn)練的效率和模型更新迭代的速度直接決定了內(nèi)容分發(fā)效果的好壞。對于機(jī)器學(xué)習(xí)來說,算力是一切的根本盹兢,為了用海量數(shù)據(jù)訓(xùn)練更好的模型砂轻、加速整個(gè)內(nèi)容分發(fā)流程,企業(yè)的 IT 系統(tǒng)需要具備快速然爆、高效調(diào)用管理大規(guī)模 GPU 資源的能力顽分。同時(shí),由于算力資源十分昂貴施蜜,出于成本控制,企業(yè)也需要最大化 GPU 資源利用率雌隅。但是翻默,對于一點(diǎn)資訊來說,GPU的利用率較低恰起,資源使用比較緊張修械。一方面是處于非訓(xùn)練狀態(tài)的實(shí)驗(yàn)占用GPU資源,沒有及時(shí)釋放检盼;另外一方面是無法實(shí)現(xiàn)GPU共享肯污,即使是再小的一個(gè)實(shí)驗(yàn)也要占用至少整塊的GPU資源。對于第一個(gè)問題吨枉,可以通過監(jiān)測訓(xùn)練任務(wù)狀態(tài)蹦渣,及時(shí)釋放資源,但是對于第二個(gè)問題貌亭,目前還未做到GPU資源在多個(gè)Container之間共享柬唯。

GPU共享兩個(gè)關(guān)鍵問題

1. 資源隔離

資源隔離主要采用的是虛擬化的解決思路,目前NVIDIA有兩種 GPU 虛擬化的解決方案:

  1. GRID: 模式更多用于虛擬機(jī)場景圃庭,基于驅(qū)動(dòng)锄奢,隔離型會做的比較強(qiáng),但不開源剧腻,性能比較好拘央。
  2. MPS: 應(yīng)用到容器場景,基于軟件的方式书在,隔離性比較弱灰伟,但也不開源。

2. 資源切分及調(diào)度

目前社區(qū)的GPU調(diào)度方案:
1.Nvidia 貢獻(xiàn)的調(diào)度方案蕊温,只支持按較粗粒度的調(diào)度袱箱,按GPU塊數(shù)調(diào)度。
Nvidia GPU Device Plugin
2.阿里云服務(wù)團(tuán)隊(duì)貢獻(xiàn)的 GPU 共享的調(diào)度方案义矛,其目的在于解決用戶共享 GPU 調(diào)度的需求Kubernetes GPU共享實(shí)踐
gpushare-scheduler-extender
gpushare-device-plugin

GPU共享技術(shù)實(shí)踐

由于資源隔離主要采用的是虛擬化技術(shù)发笔,并且NVIDIA提供的兩種GPU虛擬化解決方案都沒有開源,GPU共享在資源隔離方面的實(shí)踐資料相對較少凉翻,大多關(guān)注GPU資源的調(diào)度了讨。

1.阿里GPU共享實(shí)踐

相關(guān)資料: Kubernetes的共享GPU集群調(diào)度

優(yōu)點(diǎn):

  • 能夠讓更多的預(yù)測服務(wù)共享同一個(gè)GPU卡上,能夠讓使用者通過API描述對于一個(gè)可共享資源的申請, 并能實(shí)現(xiàn)該種資源的調(diào)度

缺點(diǎn):

  • 不支持該共享資源的隔離

前提條件:

  • 延用Kubernetes Extended Resource定義前计,但是衡量維度最小單位從1個(gè)GPU卡變?yōu)镚PU顯存的MiB
  • 用戶申請的GPU資源上限不會超過一張卡胞谭,也就是申請的資源上限為單卡

實(shí)現(xiàn)思路:
依賴于Kubernetes的現(xiàn)有工作機(jī)制:

  • Extended Resource定義
  • Scheduler Extender機(jī)制
  • Device Plugin機(jī)制
  1. 利用 kubernetes Extended Resource機(jī)制,重新定義GPU資源男杈,主要是對顯存和GPU數(shù)量的定義丈屹。
  2. 利用Device Plugin機(jī)制,在節(jié)點(diǎn)上將GPU資源總量上報(bào)給kubelet,kubelet進(jìn)一步上報(bào)給Kubernetes API Server伶棒。
  3. 利用k8s scheduler Extender機(jī)制旺垒,擴(kuò)展調(diào)度器功能,負(fù)責(zé)在全局調(diào)度器Filter和Bind的時(shí)候判斷節(jié)點(diǎn)上單個(gè)GPU卡是否能夠提供足夠的GPU顯存肤无,并且在Bind的時(shí)刻將GPU的分配結(jié)果通過annotation記錄到Pod Spec以供后續(xù)Filter檢查分配結(jié)果先蒋。
  4. 節(jié)點(diǎn)運(yùn)行:當(dāng)Pod和節(jié)點(diǎn)綁定的事件被Kubelet接收到后,Kubelet就會在節(jié)點(diǎn)上創(chuàng)建真正的Pod實(shí)體宛渐,在這個(gè)過程中, Kubelet會調(diào)用GPU Share Device Plugin的Allocate方法, Allocate方法的參數(shù)是Pod申請的gpu-mem竞漾。而在Allocate方法中,會根據(jù)GPU Share Scheduler Extender的調(diào)度決策運(yùn)行對應(yīng)的Pod窥翩。

2.騰訊GPU共享實(shí)踐

相關(guān)資料:AI 在 K8S 中的實(shí)踐:云智天樞 AI 中臺架構(gòu)揭秘
實(shí)現(xiàn)思路:

  1. 常規(guī)GPU使用业岁,按塊調(diào)度
  2. 使用Nvidia 提供的虛擬化技術(shù)
  3. 自研實(shí)現(xiàn)GPU半虛擬化: 基于驅(qū)動(dòng)函數(shù)實(shí)現(xiàn),改變了函數(shù)顯存申請寇蚊、釋放和線程的發(fā)起函數(shù)叨襟。

3.才云科技GPU共享實(shí)踐

相關(guān)資料:基于 Kubernetes 的 GPU 類型調(diào)度實(shí)現(xiàn)
實(shí)現(xiàn)思路:
利用kubernetes現(xiàn)有的工作機(jī)制:

  • Scheduler Extender 機(jī)制
  • Device Plugin 機(jī)制
  • API Server 擴(kuò)展機(jī)制(CRD)
  • Admission 擴(kuò)展機(jī)制(ResourceQuota)

優(yōu)點(diǎn):

  • 雖未明確解決GPU共享問題,但根據(jù)其設(shè)計(jì)和實(shí)現(xiàn)幔荒,可以支持GPU共享糊闽,方案與方案1類似。相比方案1爹梁,還支持GPU類型調(diào)度以及對資源的使用進(jìn)行限制右犹。

缺點(diǎn):

  • 不支持該共享資源的隔離

1. 通過CRD(CustomResourceDefinition)定義兩種資源:ExtendedResource 和 ResourceClass
ExtendedResource 描述了一種擴(kuò)展資源,比如 NVIDIA GPU姚垃;
ResourceClass 定義了容器選擇哪種擴(kuò)展資源念链,它的使用方式和 Kubernetes 中的 Extended Resource類似,用戶可以直接在容器中指定积糯,就像使用 CPU 和 Memory 一樣掂墓。

2. 利用 Scheduler 的擴(kuò)展機(jī)制擴(kuò)展Scheduler,負(fù)責(zé)調(diào)度容器中使用了ResourceClass資源對象的Pod
通過查詢 ResourceClass 對象的定義過濾選擇節(jié)點(diǎn)上的 ExtendedResource 資源看成,從而找到合適的節(jié)點(diǎn)并綁定君编,并將合適的 ExtendedResource 寫到 Pod Annotation 中,供 Kubelet 組件使用川慌。

3. 利用Nvidia Device Plugin插件吃嘿,擴(kuò)展NVIDIA GPU資源祠乃,負(fù)責(zé)與kubelet組件通信以及創(chuàng)建和維護(hù) ExtendedResource 資源對象
ExtendedResource 資源中包含著 GPU 的頻率、顯存等信息兑燥,當(dāng)多個(gè)容器想使用同一塊 GPU 時(shí)亮瓷,我們可以定義一個(gè) ResourceClass 資源對象,在 ResourceClass 中聲明使用多少顯存(這里共享的是顯存)降瞳。這樣嘱支,應(yīng)用部署時(shí),我們只要在容器中聲明使用該 ResourceClass 資源即可挣饥,之后 Scheduler Extender 會過濾符合條件的 ExtendedResource 對象斗塘,綁定到合適的節(jié)點(diǎn)上。
如果要實(shí)現(xiàn)資源共享亮靴,我們可能需要在 ExtendedResource 中記錄顯存的用量情況,供調(diào)度參考于置。

4.VMware GPU共享實(shí)踐

相關(guān)資料:在 Kubernetes 中使用 vGPU 實(shí)現(xiàn)機(jī)器學(xué)習(xí)任務(wù)共享 GPU
實(shí)現(xiàn)思路:
利用GPU廠家茧吊、虛擬化廠商等提供的GPU虛擬化技術(shù),對GPU進(jìn)行虛擬化八毯,把完整的GPU進(jìn)行分割搓侄。然后按照調(diào)度物理GPU一樣在k8s中調(diào)度GPU。

優(yōu)點(diǎn):

  • 不用對k8s等進(jìn)行而外擴(kuò)展话速,開發(fā)工作量小
  • 具備更好的隔離型

缺點(diǎn):

  • 需要使用如vSphere等虛擬化廠商提供的專門的虛擬化軟件對GPU做虛擬化讶踪,并且需要付費(fèi)
  • 虛擬化對機(jī)器性能有損耗

5.其他相關(guān)資料

k8s官網(wǎng)對GPU調(diào)度的說明提供了Nvidia GPU容器調(diào)度能力,但是只能將一個(gè)GPU卡分配給一個(gè)容器
從零開始入門 K8s:GPU 管理和 Device Plugin 工作機(jī)制
如何在Kubernetes實(shí)現(xiàn)GPU調(diào)度及共享
Kubernetes GPU使用指南
Kubernetes如何通過Device Plugins來使用NVIDIA GPU

你真的了解多個(gè)docker容器如何共享GPU么泊交?
Kubeflow 使用 Kubernetes 進(jìn)行機(jī)器學(xué)習(xí)

總結(jié)

  1. 從社區(qū)乳讥、stackoverflow以及上述各公司的實(shí)踐來看,目前GPU共享主要共享的是GPU的顯存廓俭,資源隔離性差云石,存在資源搶占等情況,是否需要開展GPU共享相關(guān)的開發(fā)工作需要視公司機(jī)器學(xué)習(xí)對GPU的使用場景來決定研乒;

  2. GPU共享存在一定的限制:用戶申請的資源限制為單卡

  3. 從顯存共享的角度來說汹忠,單GPU卡共享具有可行性,主要實(shí)現(xiàn)步驟包括:

    • 擴(kuò)展資源定義雹熬,重新定義GPU資源宽菜,主要是對顯存和GPU數(shù)量的定義
    • 擴(kuò)展調(diào)度器,負(fù)責(zé)在全局調(diào)度器Filter和Bind的時(shí)候判斷節(jié)點(diǎn)上單個(gè)GPU卡是否能夠提供足夠的GPU顯存
    • 利用Nvidia Device Plugin插件機(jī)制竿报,完成資源上報(bào)和分配
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铅乡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烈菌,更是在濱河造成了極大的恐慌隆判,老刑警劉巖犬庇,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侨嘀,居然都是意外死亡臭挽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門咬腕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欢峰,“玉大人,你說我怎么就攤上這事涨共∨μ” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵举反,是天一觀的道長懊直。 經(jīng)常有香客問我,道長火鼻,這世上最難降的妖魔是什么室囊? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮魁索,結(jié)果婚禮上融撞,老公的妹妹穿的比我還像新娘。我一直安慰自己粗蔚,他們只是感情好尝偎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹏控,像睡著了一般致扯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上当辐,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天急前,我揣著相機(jī)與錄音,去河邊找鬼瀑构。 笑死裆针,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寺晌。 我是一名探鬼主播世吨,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呻征!你這毒婦竟也來了耘婚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陆赋,失蹤者是張志新(化名)和其女友劉穎沐祷,沒想到半個(gè)月后嚷闭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赖临,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年胞锰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兢榨。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗅榕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吵聪,到底是詐尸還是另有隱情凌那,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布吟逝,位于F島的核電站帽蝶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏块攒。R本人自食惡果不足惜励稳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局蚀。 院中可真熱鬧,春花似錦恕稠、人聲如沸琅绅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽千扶。三九已至,卻和暖如春骆捧,著一層夾襖步出監(jiān)牢的瞬間澎羞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工敛苇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妆绞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓枫攀,卻偏偏與公主長得像括饶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子来涨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 問題背景 全球主要的容器集群服務(wù)廠商的Kubernetes服務(wù)都提供了Nvidia GPU容器調(diào)度能力图焰,但是通常都...
    城市中迷途小書童閱讀 732評論 0 2
  • 環(huán)境準(zhǔn)備 1. GPU 節(jié)點(diǎn)準(zhǔn)備 GPU共享依賴NVIDIA驅(qū)動(dòng)和nvidia-docker2,需要事先安裝蹦掐。NV...
    王勇1024閱讀 2,844評論 0 1
  • 黑色的海島上懸著一輪又大又圓的明月,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上藤滥。一個(gè)少年白衣白發(fā)鳖粟,悠閑自如地倚坐...
    小水Vivian閱讀 3,108評論 1 5
  • 漸變的面目拼圖要我怎么拼时呀? 我是疲乏了還是投降了张漂? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜谨娜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,246評論 0 13
  • 感覺自己有點(diǎn)神經(jīng)衰弱航攒,總是覺得手機(jī)響了;屋外有人走過趴梢;每次媽媽不聲不響的進(jìn)房間突然跟我說話漠畜,我都會被嚇得半死!一整...
    章魚的擁抱閱讀 2,172評論 4 5