Kubeflow 這個基於 Kubernetes 構建的開源平台,因它提供了一套標準化且整合的工具,涵蓋了數據準備、模型訓練、超參數調優、模型部署和監控等各個階段,大幅簡化了 AI 模型的落地過程。目前已經成成為許多資料科學家和機器學習工程師經常使用的平台。

然而,不少開發者在使用 Kubeflow 時,仍碰上 GPU 資源無法切割的問題,因其本身特性,讓單一容器會佔用到整張GPU資源,當專案所需資源較小時,會導致有些 GPU 算力閒置無法被有效利用,今天這篇文章將手把手教大家,如何使用數位無限的 ixGPU 模組,在 Kubeflow 上做 GPU 切割。

在 Kubeflow 平台運用 ixGPU 模組,進行 GPU 彈性切割

客製化 YAML PodDefault 配置

我們以 Tesla P4 GPU 來做 GPU 切割的示範,在將 ixGPU 模組應用到 Kubeflow 上之前,需準備 yaml 檔。我們準備了兩個yaml 檔, poddefault1.yaml 和 poddefault2.yaml。

如圖中所示,透過下面兩個指令,我們看到了兩個 yaml 檔裡面所定義的 PodDefault 資源的詳細配置。

cat poddefault1.yaml
cat poddefault2.yaml

這兩份 yaml 文件定義了兩個不同的 PodDefault 配置,它們分別為 Kubeflow 環境中標記有特定標籤的 Pod,預設分配不同大小,將Tesla P4 GPU 記憶體資源切割成 1GB 和 3GB。

接著下apply yaml 指令,從 yaml 檔中讀取定義的 PodDefault 配置 ,也就是 GPU 切割配置資訊,並將其應用到 Kubernetes 叢集上。

kubectl apply -f poddefault1.yaml
kubectl apply -f poddefault2.yaml

再來輸入 kubectl get poddefault -A 指令,可查詢目前 Kubernetes 叢集中所有命名空間裡所有 PodDefault 資源的詳細資訊。

Kubeflow Notebooks GPU 切割

前置作業準備好後,我們來到 Kubeflow 平台上面,建立新的 notebook 容器。

點開下面 Advanced Options,即可在 Configurations 的選項中看到剛剛新增的兩個 GPU 資源規格,Tesla P4 1GB 和 Tesla P4 3GB。

分別建立好兩個容器後 (notebook1 的 1GB 和 notebook2 的 3GB),我們可以來看看容器的資源配置是否真的有被切割。按下 CONNECT 打開 notebook1 的 Jupyter Lab。

接著,我們可以透過 !nvidia-smi 指令來確認目前容器中的資源,如圖中所示,notebook 1 中的記憶體資源為1GB

notebook 2也是一樣的步驟,按CONNECT啟動Jupyter Lab

輸入 !nvidia-smi 指令後可以看到,該容器中有 3GB的記憶體資源。

如此一來, Kubeflow 單張 GPU 資源彈性切割就完成啦!是不是很簡單呢?

接下來,我們將實際演示如何在 Kubeflow Pipeline 功能上應用 ixGPU 模組,讓我們能夠針對整個流程中不同的任務目標需求,去分配所需的 GPU 記憶體資源,實現更精確且高效的彈性分配,最大化運算效益。

整合 ixGPU 模組至 Kubeflow Pipeline ,高效分配GPU資源

在這個範例中,我們簡單設定 Pipeline 有兩個流程,分別為模型訓練(Trainning ) 和測試(Testing)。

機器學習 Pipeline GPU 資源分配前置設定

我們在 pipeline.py 這個用來定義 Kubeflow Pipeline 的 Python 腳本中,針對 Trainning 和 Testing 兩個步驟,先去定義GPU資源的分配。因 Trainning 對於算力的需求較大,我們分配了 3GB 的 GPU 記憶體;而 Testing 對算力要求較低,所以我們分配了 1GB 的資源。相關程式碼請參考下圖。

接著我們在 TERMINAL 輸入 python pipeline.py 去編譯(compile) 整個工作流程,執行後會看到左邊的清單中出現 mnist-pipeline.yaml 檔,這表示我們的 Python 腳本已被執行,並且將我們在 Python 程式碼中定義的整個機器學習工作流,編譯成一個符合 Kubeflow Pipeline 規範的 YAML 檔案。

Kubeflow 平台 pipeline 配置

接著我們就可以到Kubeflow上的 Pipelines 頁面,按右上角的 + Upload pipeline 來創建一個新的 pipeline 版本。

選擇 Upload a file 選項,並上傳剛剛編譯好的 mnist-pipeline.yaml 檔。這是將在本地開發和定義好的機器學習工作流,部署到 Kubeflow 叢集上以便執行和管理的核心步驟。

創建成功後,在 Kubeflow Pipelines 的使用者介面,會呈現一個已經成功上傳的 mnist-pipeline 的概覽頁面。我們可以按下 + Create run 來開始執行我們的機器學習 Pipeline。

訓練流程執行完畢後,我們可以點進去看一下logs。

可以看到在這個機器學習模型訓練的工作流程中,我們只使用了 3GB 的 GPU 記憶體資源並成功完成訓練任務。

再來可以看一下測試任務的執行logs

我們成功的將GPU切割,並且分配 1GB的資源到測試任務。

結論

以上就是我們 ixGPU 模組在Kubeflow平台上應用的完整教學啦!

想看影片教學可參考下面這個影片

數位無限的 ixGPU 模組可以幫助企業更彈性的運用 GPU 算力資源,看完 ixGPU 模組結合 Kubeflow 的 GPU 切割應用,你們是否也對該功能感到很有興趣呢? 歡迎與我們聯繫,了解更多資訊!

想更了解 ixGPU 模組的核心優勢,請見該文章: 突破 Kubeflow 限制:數位無限 ixGPU 模組,實現 GPU 靈活切割與高效利用!