隨着全球各大企業開始廣泛采用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):
- Rancher
- GPU Operator(https://nvidia.github.io/gpu-operator/)
- 基礎架構——我們將在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個重要部分:
- NVIDIA的GPU Operator
- 來自Kubernetes同名SIG的Node Feature Discovery(NFD)。
- Rancher的集群部署和catalog app集成
歡迎您根據本教程動手嘗試,也請繼續保持關注,在之后的教程中我們會嘗試將GPU引用至邊緣。