無需手動輸入命令,簡單3步即可在K8S集群中啟用GPU!


隨着全球各大企業開始廣泛采用Kubernetes,我們看到Kubernetes正在向新的階段發展。一方面,Kubernetes被邊緣的工作負載所采用並提供超越數據中心的價值。另一方面,Kubernetes正在驅動機器學習(ML)和高質量、高速的數據分析性能的發展。

我們現在所了解到的將Kubernetes應用於機器學習的案例主要源於Kubernetes 1.10中一個的功能,當時圖形處理單元(GPUs)成為一個可調度的資源——現在這一功能處於beta版本。單獨來看,這兩個都是Kubernetes中令人興奮的發展。更令人興奮的是,可以使用Kubernetes在數據中心和邊緣采用GPU。在數據中心,GPU是一種構建ML庫的方式。那些訓練過的庫將被遷移到邊緣Kubernetes集群作為機器學習的推理工具,在盡可能靠近數據收集的地方提供數據分析。

在早些時候,Kubernetes還是為分布式應用程序提供一個CPU和RAM資源的池。如果我們有CPU和RAM池,為什么不能有一個GPU池呢?這當然毫無問題,但不是所有的server都有GPU。所以,如何讓我們的server在Kubernetes中可以裝配GPU呢?

在本文中,我將闡述在Kubernetes集群中使用GPU的簡單方法。在未來的文章中,我們還將GPU推向至邊緣並向你展示如何完成這一步驟。為了真正地簡化步驟,我將用Rancher UI來操作啟用GPU的過程。Rancher UI只是Rancher RESTful APIs的一個客戶端。你可以在GitOps、DevOps和其他自動化解決方案中使用其他API的客戶端,比如Golang、Python和Terraform。不過,我們不會在此文中深入探討這些。

本質上看,步驟十分簡單:

  • 為Kubernetes集群構建基礎架構
  • 安裝Kubernetes
  • 從Helm中安裝gpu-operator

使用Rancher和可用的GPU資源啟動和運行

Rancher是一個多集群管理解決方案並且是上述步驟的粘合劑。你可以在NVIDIA的博客中找到一個簡化GPU管理的純NVIDIA解決方案,以及一些關於gpu-operator與構建沒有operator的GPU驅動堆棧有何區別的重要信息。

https://developer.nvidia.com/blog/nvidia-gpu-operator-simplifying-gpu-management-in-kubernetes/

前期准備

以下是在Rancher中啟動和運行GPU所需的材料清單(BOM):

  1. Rancher
  2. GPU Operator(https://nvidia.github.io/gpu-operator/)
  3. 基礎架構——我們將在AWS上使用GPU節點

在官方文檔中,我們有專門的章節闡述如何高可用安裝Rancher,所以我們假設你已經將Rancher安裝完畢:

https://docs.rancher.cn/docs/rancher2/installation/k8s-install/_index/

流程步驟

使用GPUs安裝Kubernetes集群

Rancher安裝之后,我們首先將構建和配置一個Kubernetes集群(你可以使用任何帶有NVIDIA GPU的集群)。

使用Global上下文,我們選擇Add Cluster

並在“來自雲服務商提供的主機”部分,選擇Amazon EC2。

我們是通過節點驅動來實現的—— 一組預配置的基礎設施模板,其中一些模板有GPU資源。

注意到這里有3個節點池:一個是為master准備的,一個是為標准的worker節點准備的,另一個是為帶GPU的worker准備的。GPU的模板基於p3.2xlarge機器類型,使用Ubuntu 18.04亞馬遜機器鏡像或AMI(ami-0ac80df6eff0e70b5)。當然,這些選擇是根據每個基礎設施提供商和企業需求而變化的。另外,我們將 “Add Cluster”表單中的Kubernetes選項設置為默認值。

設置GPU Operator

現在,我們將使用GPU Operator庫(https://nvidia.github.io/gpu-operator)在Rancher中設置一個catalog。(也有其他的解決方案可以暴露GPU,包括使用Linux for Tegra [L4T] Linux發行版或設備插件)在撰寫本文時,GPU Operator已經通過NVIDIA Tesla Driver 440進行了測試和驗證。

使用Rancher Global上下文菜單,我們選擇要安裝到的集群:

然后使用Tools菜單來查看catalog列表。

點擊Add Catalog按鈕並且給其命名,然后添加url:https://nvidia.github.io/gpu-operator

我們選擇了Helm v3和集群范圍。我們點擊Create以添加Catalog到Rancher。當使用自動化時,我們可以將這一步作為集群構建的一部分。根據企業策略,我們可以添加這個Catalog到每個集群中,即使它還沒有GPU節點或節點池。這一步為我們提供了訪問GPU Operator chart的機會,我們接下來將安裝它。

現在我們想要使用左上角的Rancher上下文菜單以進入集群的“System”項目,我們在這里添加了GPU Operator功能。

在System項目中,選擇Apps:

然后點擊右上方的Launch按鈕。

我們可以搜索“nvidia”或者向下滾動到我們剛剛創建的catalog。

點擊gpu-operator app,然后在頁面底部點擊Launch。

在這種情況下,所有的默認值都應該沒問題。同樣,我們可以通過Rancher APIs將這一步驟添加到自動化中。

利用GPU

既然GPU已經可以訪問,我們現在可以部署一個GPU-capable 工作負載。同時,我們可以通過在Rancher中查看Cluster -> Nodes的頁面驗證安裝是否成功。我們看到GPU Operator已經安裝了Node Feature Discovery (NFD)並且給我們的節點貼上了GPU使用的標簽。

總 結

之所以能夠采用如此簡單的方法就能夠讓Kubernetes與GPU一起運行,離不開這3個重要部分:

  1. NVIDIA的GPU Operator
  2. 來自Kubernetes同名SIG的Node Feature Discovery(NFD)。
  3. Rancher的集群部署和catalog app集成

歡迎您根據本教程動手嘗試,也請繼續保持關注,在之后的教程中我們會嘗試將GPU引用至邊緣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM