Kubernetes1.6新特性:全面支援多顆GPU
(一) 背景資料
GPU就是圖形處理器,是Graphics Processing Unit的縮寫。電腦顯示器上顯示的影象,在顯示在顯示器上之前,要經過一些列處理,這個過程有個專有的名詞叫“渲染" ,以前計算機上是沒有GPU的,都是通過CPU來進行“渲染”處理的,這些涉及到“渲染”的計算工作非常耗時,佔用了CPU的大部分時間。之後出現了GPU,是專門為了實現“渲染”這種計算工作的,用來將CPU解放出來,GPU是專為執行復雜的數學和幾何計算而設計的,這些計算是“渲染”所必需的。
下面看看百度百科上CPU同GPU的對比圖,其中綠色的是計算單元:
可以看出來GPU有大量的計算單元,所以GPU是專門為“渲染”這種計算工作設計的。
(二) 應用領域
最開始同GPU相關的應用只是簡單地停留在圖形相關應用上,比如遊戲中3D圖形“渲染”等影象處理應用,現在GPU的應用已經非常廣泛的,在遊戲、娛樂、科研、醫療、網際網路等涉及到大規模計算的領域都有GPU應用的存在,比如高效能運算應用、機器學習應用、人工智慧應用、自動駕駛應用、虛擬現實應用、自然語言處理應用等等。
1、下面看看Nvidia提供的深度學習領域使用GPU的分析結果:
可以看出來從2013年到2015年在深度學習領域呈現出爆發性增長的趨勢。
2、下面看看Nvidia提供的資料:
使用GPU來實現深度學習應用後,在自動駕駛、醫療診斷和機器學習三方面效率提高的十分明顯。
(三) Kubernetes 1.3中支援GPU的實現
在kubernetes1.3中提供了對Nvidia品牌GPU的支援,在kubernetes管理的叢集中每個節點上,通過將原有的Capacity和Allocatable變數進行擴充套件,增加了一個針對Nvidia品牌GPU的α特性:alpha.kubernetes.io/nvidia-gpu。其中Capacity變數表示每個節點中實際的資源容量,包括cpu、memory、storage、alpha.kubernetes.io/nvidia-gpu,而Allocatable變數表示每個節點中已經分配的資源容量,同樣包括包括cpu、memory、storage、alpha.kubernetes.io/nvidia-gpu。
在啟動kubelet的時候,通過增加引數--experimental-nvidia-gpu來將帶有GPU的節點新增到kubernetes中進行管理。這個引數experimental-nvidia-gpu用來告訴kubelet這個節點中Nvidia品牌GPU的個數,如果為0表示沒有Nvidia品牌GPU,如果不增加這個引數,那麼系統預設為這個節點上沒有Nvidia品牌GPU。
當節點上安裝有多塊Nvidia品牌GPU的時候,引數experimental-nvidia-gpu是可以輸入大於1的數值的,但是對於kubernetes1.3這個版本,GPU還是個α特性,在程式碼中引數experimental-nvidia-gpu其實只支援兩個值,分別是0和1,我們通過下面程式碼就可以看出來:
在執行docker的時候,需要對映節點上的裝置到docker中,這段程式碼是在告訴docker,只對映第一塊Nvidia品牌GPU。通過上面程式碼可以看出來,在kubernetes1.3中,GPU這個α特性,引數experimental-nvidia-gpu其實只支援兩個值,分別是0和1。通過上面程式碼也可以看出來,為什麼在kubernetes1.3中只支援Nvidia品牌GPU,對於不同品牌的GPU,對映到linux作業系統裡面有著不同的裝置路徑,需要針對不同的GPU品牌分別進行實現。
(四) Kubernetes 1.6中支援GPU的實現
在kubernetes1.6中更全面的提供了對Nvidia品牌GPU的支援,保留了kubernetes1.3中針對Nvidia品牌GPU的α特性:alpha.kubernetes.io/nvidia-gpu,但是在啟動kubelet的時候,去掉了引數--experimental-nvidia-gpu,改成了通過配置Accelerators為true來啟動這個α特性,完整的啟動引數是--feature-gates="Accelerators=true"。
在kubernetes1.3中只能利用節點上的一顆NvidiaGPU,但是在kubernetes1.6中會自動識別節點上的所有Nvidia GPU,並進行排程。
從上面程式碼中就可以看出來,在1.6中可以獲取節點中所有NvidiaGPU裝置。
下面是1.6中在kubelet中增加的Nvidia GPU相關結構體:
在nvidiaGPUManager這個結構體中,allGPUs變數表示這個節點上所有的GPU資訊;allocated變數表示這個節點上已經被分配使用的GPU資訊,這個allocated變數是一個podGPUs結構體變數,用來表示POD同已使用GPU的對應關係;dockerClient變數是docker介面變數,用來表示所有使用GPU的docker;activePodsLister變數表示這個節點上所有活動狀態的POD,通過這個變數,可以釋放已經處於終止狀態POD所繫結的GPU資源。
在kubernetes中Nvidia GPU這個特性只是在容器是docker的時候才生效,如果容器使用的是rkt,是無法使用到Nvidia GPU的。
在1.6中可以參照下面樣例使用Nvidia GPU:
可以看到,在1.6中使用GPU的時候,不同docker之間是無法共享GPU的,也就是說每個docker都會獨佔整個GPU,而且其實還需要kubernetes叢集中所有節點上面的NvidiaGPU型別都是相同的,如果在一個叢集中有的不同節點上面的Nvidia GPU型別不同,那麼還需要給排程器配置節點標籤和節點選擇器,用來區分不同Nvidia GPU型別的節點。
在節點啟動時,可以指明Nvidia GPU型別,並且作為節點標籤傳遞給kubelet,如下所示:
在使用的時候,可以參考下面樣例:
在這個樣例中,利用到了節點親和性規則,保證POD只能使用GPU型別是"TeslaK80"或"Tesla P100"的節點。
如果已經在節點上安裝了CUDA(Compute UnifiedDevice Architecture,是顯示卡廠商NVIDIA推出的運算平臺。 CUDA™是一種由NVIDIA推出的通用平行計算架構,該架構使GPU能夠解決複雜的計算問題。它包含了CUDA指令集架構以及GPU內部的平行計算引擎),那麼POD可以通過hostPath卷外掛來訪問CUDA庫:
(五) 未來展望
以後會逐漸完善這個α特性,讓GPU成為kubernetes中原生計算資源的一部分,而且會提高使用GPU資源的方便性,還會讓kubernetes自動確保使用GPU的應用可以達到最佳效能。
隨著機器學習的火熱,為了支撐各種以GPU為主的機器學習計算平臺,相信kubernetes在GPU處理上還會繼續快速完善,逐漸成為機器學習的底層編排架構。
相關文章
- Android N新特性--多視窗支援Android
- Python 3.8 新特性全面解讀Python
- Seata 新特性,APM 支援 SkyWalking
- MySQL8.0新特性-CTE語法支援MySql
- LightDB 23.1相容Oracle新特性支援Oracle
- 雲資料庫MongoDB全面支援3.4版本,支援多儲存引擎資料庫MongoDB儲存引擎
- Oracle 20C 多租戶_新特性Oracle
- 深度解讀 MongoDB 最全面的增強版本 4.4 新特性MongoDB
- 全面煥新|詳解 Grafana v9.0.x 新增功能特性Grafana
- vGPU 7.X新特性解讀,NVIDIA為何力推虛擬GPU?GPU
- 【新特性速遞】表格多列排序(SortingMulti)排序
- LightDB23.1新特性支援Oracle hint增強DB2Oracle
- Entity Framework 6 Code First新特性:支援儲存過程Framework儲存過程
- 單顆GPU計算能力太多、太貴?阿里雲釋出雲上首個輕量級GPU例項GPU阿里
- 三大特性,多個場景,Serverless 應用引擎 SAE 全面升級Server
- Golang Agent 可觀測性的全面升級與新特性介紹Golang
- Oracle 20c 的 In-Memory 新特性 Spatial 和 Text 支援Oracle
- kubernetes1.5新特性(二):支援Photon卷外掛
- 11gR2新特性之二 - Flash Cache 的SSD支援
- 新特性解讀 | MySQL 8.0 多因素身份認證MySql
- .net 4.0 中對多執行緒新特性(轉)執行緒
- Vue特性支援表Vue
- 新特性
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(六)OracleSQL
- Oracle11新特性——PLSQL新特性(五)OracleSQL
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- Oracle11新特性——PLSQL新特性(二)OracleSQL
- Oracle11新特性——PLSQL新特性(一)OracleSQL
- 7月新特性 | 軟體開發生產線CodeArts釋出多項新特性等你體驗!
- WijmoJS 全面支援 Angular 7JSAngular
- Swift 5 新特性預覽(最低支援Xcode 10.2 beta版)SwiftXCode
- Oracle goldengate 12c 新特性之完美支援Active Data GuardOracleGo
- DX12超強新特性:支援A卡與N卡混合交火
- 多圖預警,種草 DevTools 新特性( Chrome 80 )devChrome
- Redis 6.0 新特性-多執行緒連環13問!Redis執行緒
- Tensorflow多GPU使用詳解GPU