<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GPU Mounter - 支持 GPU 熱掛載的 Kubernetes 插件

          共 2449字,需瀏覽 5分鐘

           ·

          2021-03-11 21:24


          前言

          GPU Mounter 是一個(gè)支持動(dòng)態(tài)調(diào)整運(yùn)行中 Pod 可用 GPU 資源的 Kubernetes 插件,已經(jīng)開源在 GitHub[1]

          • 支持 Pod 可用 GPU 資源的動(dòng)態(tài)調(diào)整
          • 兼容 Kubernetes 調(diào)度器
          • 無侵入式修改
          • REST API 接口
          • 一鍵部署

          下面聊一聊我對(duì) GPU 容器化和 GPU 掛載的認(rèn)識(shí),以及為什么需要 GPU 熱掛載。

          1. GPU 容器化與 GPU 掛載

          GPU 掛載很好理解,即為容器或 Pod 掛載 GPU 資源,允許容器中的應(yīng)用程序使用。在容器化的趨勢席卷各個(gè)領(lǐng)域的今天,深度學(xué)習(xí)也同樣無法 “幸免”。各大云服務(wù)提供商,推出了自己的深度學(xué)習(xí)云平臺(tái)(如國內(nèi)阿里 PAI、騰訊 TI-ONE、百度 BML,國外 AWS Sagemaker 等),深度學(xué)習(xí)領(lǐng)域的研究者,也開始傾向于在本地采用 Docker 容器的方式構(gòu)建深度學(xué)習(xí)訓(xùn)練環(huán)境。截止到目前 DockerHub 上 tensorflow 鏡像被超過 10M 次,pytorch 鏡像被拉取超過 1M 次,可見容器化的影響。

          談到深度學(xué)習(xí)的容器化,GPU 掛載是一個(gè)繞不開的話題,為此 Docker、Kubernetes、Nvidia 都做出了很多貢獻(xiàn):

          • Nvidia 貢獻(xiàn)了 nvidia-docker、nvidia-container-runtime、k8s-deivice-plugin 等,支持在 Docker 和 Kubernetes 環(huán)境下使用 Nvidia GPU 資源

          • Docker 從 19.03 版本開始原生支持--gpus參數(shù)對(duì)接 nvidia-container-runtime

          • Kubernetes 從 1.8 版本開始提供 Device Plugin 接口,解耦源代碼中對(duì) Nvidia GPU 的原生支持

          因?yàn)橛辛松鲜龉ぷ鳎覀冊(cè)?Docker 或 Kubernetes 環(huán)境中想要使用 GPU,只需一個(gè)--gpus參數(shù)或者一個(gè)nvidia.com/gpu資源字段即可完成 GPU 資源的掛載。

          2. 當(dāng)前 GPU 掛載方案的不足

          當(dāng)前的 GPU 容器化的方案仍然存在一點(diǎn)不足,無法動(dòng)態(tài)調(diào)整一個(gè)已經(jīng)正在運(yùn)行的容器或 Pod 可用的 GPU 資源。即我們必須在啟動(dòng)容器時(shí)就一次設(shè)定好容器可用的 GPU 資源,如果容器已經(jīng)啟動(dòng)而我們又想要調(diào)整其 GPU 資源,只能先關(guān)掉這個(gè)容器,重新設(shè)定后再啟動(dòng)。

          也許正處于這一限制,當(dāng)前各大深度學(xué)習(xí)云平臺(tái)均無法支持調(diào)整一個(gè)運(yùn)行中實(shí)例的 GPU 資源的特性。

          關(guān)于 Docker 和 Kubernetes 為什么沒有解決這一問題,我的理解是容器或 Pod 通常被認(rèn)為應(yīng)該是無狀態(tài)的(Stateless),應(yīng)該維持其不變性(Immutability),即容器啟動(dòng)后就不應(yīng)該更改其配置,如果有需要,應(yīng)該基于一個(gè)滿足要求的鏡像重新開啟新的容器。從容器的通用應(yīng)用場景來看,這種觀點(diǎn)是沒有問題的,但是在深度學(xué)習(xí)平臺(tái)場景下,這一點(diǎn)我認(rèn)為值得商榷,深度學(xué)習(xí)應(yīng)用的依賴通常比較復(fù)雜,難以構(gòu)建標(biāo)準(zhǔn)統(tǒng)一的 “萬能” 鏡像即插即用。而出于安全的原因,平臺(tái)一般只允許用戶使用平臺(tái)提供的通用鏡像,因此用戶不得不破壞不變性,在運(yùn)行中的容器里安裝各種復(fù)雜依賴,因此深度學(xué)習(xí)平臺(tái)的容器應(yīng)該被認(rèn)為是有狀態(tài)的。

          3. 什么是 / 為什么需要 GPU 熱掛載?

          GPU 熱掛載即調(diào)整一個(gè)運(yùn)行中容器的 GPU 資源,能夠增加或刪除一個(gè)運(yùn)行中的容器可用的 GPU 資源而無需暫停或重啟容器。

          GPU 熱掛載這個(gè)場景在深度學(xué)習(xí)云平臺(tái)上其實(shí)很常見,我們來考慮下用戶使用深度學(xué)習(xí)云平臺(tái)的基本流程。

          • 用戶啟動(dòng)一個(gè)實(shí)例后實(shí)際上還需要基于平臺(tái)提供的基礎(chǔ)鏡像環(huán)境再去下載導(dǎo)入數(shù)據(jù)集和安裝其他復(fù)雜的依賴庫,這一過程數(shù)據(jù)集規(guī)模較大或代碼依賴在較為復(fù)雜時(shí)可能需要耗費(fèi)較長時(shí)間,然而由于無法在環(huán)境準(zhǔn)備完成后再掛載 GPU 資源,用戶不得不在一開始啟動(dòng)實(shí)例時(shí)就申請(qǐng)所需 GPU 資源。在上述準(zhǔn)備環(huán)境的過程中 GPU 實(shí)際上處于閑置狀態(tài),對(duì)用戶來說需要承受昂貴的 GPU 費(fèi)用,對(duì)平臺(tái)而言降低了整個(gè)平臺(tái)的資源利用率。

          而如果有了 GPU 熱掛載的特性,我們就可以將上述流程優(yōu)化成下圖:

          顯而易見 GPU 的閑置時(shí)間可以大大減少。

          4. GPU Mounter - 支持 GPU 熱掛載的 Kubernetes 插件

          出于上面的原因,我開源了一個(gè) Kubernetes 插件支持 GPU 資源的熱掛載。

          利用 GPU 熱掛載這一特性我們就可以將上述的流程優(yōu)化成如下:

          具體部署與使用詳見 GitHub 倉庫[2]的 README。

          如果覺得有價(jià)值希望能點(diǎn)一個(gè) star 讓更多人看到,也歡迎提 Issue 和 PR 幫助我更好的改進(jìn)這個(gè)項(xiàng)目。

          參考資料

          [1]

          GitHub: https://link.zhihu.com/?target=https%3A//github.com/pokerfaceSad/GPUMounter

          [2]

          GitHub 倉庫: https://link.zhihu.com/?target=https%3A//github.com/pokerfaceSad/GPUMounter


          原文鏈接:https://zhuanlan.zhihu.com/p/338251170



          你可能還喜歡

          點(diǎn)擊下方圖片即可閱讀

          Jenkins 大叔與 kubernetes 船長手牽手

          云原生是一種信仰 ??


          關(guān)注公眾號(hào)

          后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點(diǎn)擊 "閱讀原文" 獲取更好的閱讀體驗(yàn)!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久精品99久久久久久 | 天天操天天日天天干男 | 亚洲国产内射 | 草久网 | 亚洲免费黄色影视 |