商傳媒|葉安庭/綜合外電報導

隨著人工智慧(AI)技術的爆炸性成長,企業在擴展其複雜的 AI 工作負載時,面臨前所未有的技術挑戰。對此,容器(Container)技術——一種將應用程式及其所有依賴項封裝成單一可攜式單位的軟體虛擬化技術——正成為關鍵解決方案。

機器學習(ML)模型與其運行環境的依賴關係樹極為脆弱,一個 CUDA 版本不匹配或是不經意的程式庫更新,都可能在不通知的情況下破壞推論準確性,或是導致訓練任務崩潰。容器技術的優勢在於能將模型、其運行環境、Python 依賴項和配置打包成一個可攜式單元,確保環境一致性。而 Kubernetes(一個用於自動化部署、擴展和管理容器化應用程式的開源平台)則負責處理這些容器的營運管理。

Kubernetes 負責處理容器的營運管理,例如重新啟動失敗的 Pod(Kubernetes 中最小的可部署計算單元),在不同節點間分配負載,以及擴展複本。Google 曾以一個橫跨 65,000 個節點的 Google Kubernetes Engine 叢集進行基準測試,專門用於 AI 工作負載,展現了其大規模運算能力。

AI 工作負載主要分為訓練與推論兩大類。訓練任務(指透過大量資料來優化模型參數的運算過程)通常是爆發性、資源密集型且容許中斷的,往往需要使用高階繪圖處理器(GPU)運行數小時甚至數天。

相較之下,推論服務(指模型完成訓練後,用其來預測或分析新資料的過程)則對延遲性敏感,需要持續運行,通常在較小且成本較低的加速器上也能良好運作。

將訓練和推論的工作負載分開管理,能有效利用低成本的現貨實例(Spot instance,一種雲端服務供應商提供的備用運算資源,價格較低但可能隨時被收回)進行訓練,同時保持推論基礎設施的穩定性。報導指出,這種分離策略可節省高達 60% 至 70% 的運算成本。

針對 AI 工作負載中至關重要的 GPU 資源,輝達(NVIDIA)提供了一系列工具來優化 Kubernetes 中的管理。NVIDIA Container Toolkit 擴展了容器運行時,使其能夠將主機的 GPU 設備和驅動程式庫暴露給容器的隔離檔案系統,而無需將驅動程式直接內建到容器映像中。NVIDIA device plugin 則以 DaemonSet(一種確保所有或部分節點運行一個 Pod 副本的 Kubernetes 控制器)的形式部署在每個 GPU 節點上,將節點的 GPU 數量作為可分配資源(nvidia.com/gpu)暴露給 Kubernetes 調度器。如此一來,為 Pod 請求 GPU 資源就像在 resources.limits 區塊中指定 nvidia.com/gpu: 1 一樣簡單。

此外,NVIDIA GPU Operator 是一個可透過 Helm(Kubernetes 的套件管理工具)安裝的套件,負責處理 GPU 啟用堆疊,包括驅動程式管理、NVIDIA Container Toolkit 和 device plugin,甚至支援將單一實體 GPU 分割給多個 Pod 同時使用。

為確保最佳效率與成本效益,業界建議的基準架構包括:為訓練和推論任務使用不同的容器映像檔、依工作負載類型分離的節點池或叢集、透過 NVIDIA device plugin 暴露 GPU,以及使用 KServe 等模型服務層。KServe 透過客製化資源擴展 Kubernetes,專為模型服務設計,能處理自動擴展、健康檢查、金絲雀部署(Canary rollout,一種軟體部署策略,先將新版本推送到一小部分用戶,觀察其行為後再逐步擴大)以及縮放至零(指當沒有請求時自動關閉服務以節省資源)。早期實施這種工作負載分離,可避免失控的訓練任務佔用推論 Pod 的資源,並確保 GPU 的花費與實際使用情況相符。

Kubernetes 原生功能,如節點選擇器、汙點與容忍度,以及資源請求與限制,都能與 GPU 和模型生命週期結合運用。