本文說明如何有效率地執行在 Azure Kubernetes Service (AKS) 叢集上使用 GPU 節點的工作負載。 瞭解如何選擇正確的 SKU、使用 GPU 節點來定型機器學習模型,以及使用 GPU 節點在 AKS 上執行推斷。
案例
GPU 工作負載的執行成本可能很高。 若要避免不必要的成本,請知道何時在 AKS 叢集中部署 GPU 型節點。
GPU 是專為圖形、AI 和機器學習和特製化工作所建置,因此非常適合計算密集型工作負載。 CPU 可有效地管理複雜的邏輯和分支。 GPU 已針對輸送量進行優化。 它們可以有效率地處理直接的算術和向量運算。
若要判斷何時使用 GPU 進行 AKS 工作負載,您必須瞭解 GPU 優化和計算強度,但也應該考慮其他因素。 若要深入瞭解 AKS 工作負載的 GPU 使用量,請考慮下列受益於 AKS 叢集中 GPU 節點的工作負載範例。
數據科學和分析
您可以使用 GPU 來加速數據科學工作流程中的數據前置處理、特徵工程和模型定型。 為了有效率地使用 GPU,RAPIDS 和 Dask GPU 等架構會擴充熱門的數據處理連結庫,例如 pandas 和 scikit-learn。
開放原始碼軟體 (OSS)加速的 SQL 查詢引擎和 BlazingSQL 和 HeavyDB 等單欄式資料庫會使用 GPU 快速執行大型數據集的查詢和分析。
機器學習和深度學習
TensorFlow 和 PyTorch 等熱門機器學習和深度學習架構受益於 GPU,因為它們可以加速定型和推斷工作。
深度學習模型具有複雜的神經網路。 GPU 上的平行處理可加速模型的計算。 GPU 提供高效矩陣乘法和卷積,這是深度學習的核心作業。
您也可以使用 GPU 來加速影像分類、物件偵測、自然語言處理和語音辨識等工作。
計算機視覺和圖像處理
計算機視覺工作會解譯視覺數據以擷取有意義的資訊。 這些工作在 AI 支援的應用程式、自動駕駛汽車、醫療成像、監視系統和擴增實境中越來越常見。 GPU 會使用平行處理,因此它們可以針對對象偵測、影像分類和特徵擷取等工作,有效率地處理大規模的影像數據和複雜的計算。
視訊處理和串流
影片在企業中越來越普遍,因此組織需要 GPU 支援的硬體,而不是 CPU。 視訊處理工作負載,包括轉碼、編碼和串流,會耗用大量計算,特別是如果它們具有高畫質內容或 4K 內容。 GPU 提供有效率的平臺,可跨各種應用程式提供高效能、低延遲的視訊體驗,例如串流體育賽事或公司影片。
已啟用 GPU 的代理程式節點在虛擬桌面環境中提供豐富的客戶體驗,因為它們會將大量圖形工作卸除至 GPU。 GPU 加速的視訊編碼和譯碼功能可協助改善即時視訊串流、視訊轉碼和影片分析。
若要加速電腦視覺工作,例如物件偵測、對象追蹤和影像或視訊處理,您可以使用 OpenCV、OpenCL、NVIDIA CUDA 和 NVIDIA cuDNN 等架構。
遊戲平臺和雲端遊戲服務依賴 GPU 來提供高品質的圖形和流暢的遊戲體驗。
高效能運算
高效能運算 (HPC) 應用程式通常需要複雜的模擬、數值分析和科學計算。 若要快速執行這些工作,您可以使用 GPU 將工作負載平行處理到多個核心。 需要大規模平行處理能力的 HPC 應用程式範例包括科學模擬、天氣預報、計算流體動態和分子模型化。 GPU 非常適合平行計算,並大幅加速 HPC 工作負載。 以科學研究為導向的努力受益於 GPU。
為了加速 HPC 應用程式,NVIDIA CUDA、OpenCL 和 OpenACC 等架構會提供已啟用 GPU 的 API 和連結庫。
基因分析和生物資訊學
健康與生命科學工作負載,如基因分析和生物資訊學應用程序,越來越常見。 這些工作負載牽涉到處理基因數據,例如DNA序列和蛋白質結構,而且需要複雜的演算法來進行序列對齊、變異呼叫和基因組數據採礦。 GPU 可加速基因分析工作流程,讓研究人員可以更快速地處理數據並發現見解。
在 AKS 叢集中部署 GPU 節點之前,請考慮成本影響。 了解計算密集型工作的 GPU 優化,例如電腦視覺、視訊處理、HPC 和基因分析工作。 當您比較 GPU 資源與 AKS 叢集中的 CPU 資源時,請考慮這些因素。
Generative AI 模型
大型語言模型 (LLM),例如 OpenAI GPT、 Meta Llama、 Falcon 或 Mistral,可以利用 GPU 平行處理功能。 搭配這些模型使用 GPU 來改善效能。
GPU 可以加速定型和推斷工作,這些工作牽涉到複雜的計算和大量數據。 GPU 具有平行處理功能,可將指定模型的大型計算工作分割成同時執行的較小子工作。 此程式提供快速的結果並改善效能。
語言模型通常具有具有數個層級和參數的複雜類神經網路,這可能會增加計算需求。 GPU 加速語言處理中的關鍵作業,例如矩陣乘法和卷積,以加速定型和推斷時間。
GPU 提供足夠的記憶體容量、頻寬和處理能力,以處理具有交談介面和文字產生之 LLM 型應用程式。 例如,GPU 增強功能可為與聊天機器人和 AI 助理互動的使用者提供快速回應時間。
並非所有工作負載都受益於已啟用 GPU 的代理程序節點,在某些情況下,CPU 就已足夠。 例如,主要為輸入和輸出系結或不需要大量計算的工作負載可能無法透過 GPU 改善。
客戶案例
許多Microsoft客戶利用 GPU 工作負載來為客戶創新。 請參考下列範例:
NBA 播放機使用 Azure AI 基礎結構上的 AI 來改善效能。
OriGen 使用 Azure AI 基礎結構,將能源儲層模擬加速 1,000 倍。
Sensyne Health 在 COVID-19 中使用 Microsoft HPC 和 AI 技術來協助全國 健全狀況服務。
星座 Clearsight 使用 Azure 機器學習 影像的自動化機器學習功能,增強電力基礎結構檢查。
GPU 工作負載部署最佳做法
AKS 提供各種選項來部署已啟用 GPU 的 Linux 和 Windows 節點集區和工作負載。 若要確保 GPU 工作負載的順利運作,請遵循這些最佳做法。
Linux 工作負載部署
使用支援的 GPU 虛擬機器 (VM) 建立節點集區,並手動安裝 NVIDIA 裝置外掛程式以部署已啟用 GPU 的 Linux 節點集區。 此方法不支援更新現有的節點集區以新增 GPU。
在 Azure 中檢視 支援 GPU 的 VM 。 建議您針對 AKS 節點集區使用最小大小 Standard_NC6s_v3 。 AKS 不支援以 AMD GPU 為基礎的 NVv4 系列。
瞭解使用已啟用 Azure Linux GPU 的節點集區時的限制。 不會套用自動安全性修補程式,且叢集的預設行為為 Unmanaged。
Windows 工作負載部署
建立具有 支援 GPU 的 VM 的節點集區,以部署已啟用 GPU 的 Windows 節點集區。 AKS 會自動安裝驅動程式 和必要的 NVIDIA 元件。 此方法不支援更新現有的節點集區以新增 GPU。
當您選取支援 GPU 的 VM 時,AKS 會自動安裝適當的 NVIDIA CUDA 或 GRID 驅動程式。 某些工作負載相依於特定驅動程式,這可能會影響您的部署。 針對 NC 系列和 ND 系列 VM 大小,AKS 會安裝 CUDA 驅動程式。 針對 NV 系列 VM 大小,AKS 會安裝 GRID 驅動程式。
在 Azure 中檢視 支援 GPU 的 VM 。 建議您針對 AKS 節點集區使用最小大小 Standard_NC6s_v3 。 AKS 不支援以 AMD GPU 為基礎的 NVv4 系列。
瞭解使用 Windows 節點集區時的限制。 Kubernetes 1.28 版和更新版本不支援 Windows GPU。
注意
Windows GPU 是預覽功能。 您必須 註冊 WindowsGPUPreview
功能旗標。
NVIDIA GPU 運算元
NVIDIA GPU 操作員是一種工具,可用來在 Kubernetes 叢集中有效率地部署和管理 GPU 資源。 您可以使用 操作員將軟體元件的安裝、設定和維護自動化。 這種方法可確保 NVIDIA GPU 最適合用於需求工作負載,例如 AI 和機器學習工作負載。
NVIDIA GPU 操作員會自動管理部署 GPU 所需的所有 NVIDIA 軟體元件,例如 Kubernetes 的 NVIDIA 裝置外掛程式和 NVIDIA 容器運行時間。 運算子會自動安裝驅動程式。 如需詳細資訊,請參閱 NVIDIA 概觀。
如果您想要提高進階 GPU 工作負載的控制和彈性,您可以在 AKS 上使用 NVIDIA GPU 操作員搭配已啟用 GPU 的節點。 NVIDIA GPU 操作員不支援 Windows GPU。
考量下列最佳做法:
使用 NVIDIA GPU 操作員來執行進階 GPU 設定,例如驅動程式版本選取和時間配量。
使用 GPU 運算子之前,請先略過自動驅動程式安裝。
當您搭配叢集自動調整程式使用 GPU 運算子時,請將最小計數設定為 1。
注意
當您使用 GPU 運算符時,Microsoft不支援或管理 NVIDIA 驅動程式的維護和相容性,做為節點映像部署的一部分。
LLM 的 GPU 工作負載部署
Kubernetes AI 工具鏈運算符 (KAITO) 是 Kubernetes 操作員,可簡化您在 Kubernetes 叢集上執行開放原始碼 LLM 的方式,例如 Falcon 和 Llama2。 您可以將 AKS 叢集上的 KAITO 部署為 AKS 的受控附加元件。 KAITO 會使用 Karpenter ,根據所選模型的工作區自定義資源定義中的規格,自動布建和部署 GPU 節點。 KAITO 會將推斷伺服器建立為 LLM 的端點,並降低整體上線時間,讓您可以執行機器學習作業,而不是基礎結構設定和維護。
為了改善機器學習作業,KAITO 提供下列功能:
容器映像管理:使用容器映射來管理 LLM。 KAITO 提供 HTTP 伺服器,讓您可以使用 支援的模型連結庫 來執行推斷呼叫。
GPU 硬體設定:KAITO 提供根據模型需求自動套用的預設設定。 您不需要手動調整部署參數以符合 GPU 硬體。
自動 GPU 節點布建:KAITO 會根據模型需求自動布建 GPU 節點,並建議低成本的 GPU VM 大小來設定分散式推斷。
與 Microsoft 成品登錄 整合:如果您的 LLM 授權允許,KAITO 可以在公用成品登錄中裝載模型映射。 此方法可簡化對支援模型的存取和部署。 對於 MIT 或 Apache2 授權不支援的開放原始碼模型,您可以 提交新模型上線的要求 。
如需 KAITO 的詳細資訊,請參閱下列資源:
工作負載和叢集調整
針對 AI 和機器學習案例,您必須區分定型工作負載與使用預先定型模型推斷。 若要建置和定型機器學習模型,請考慮使用專為深度學習和平行處理 AI 計算而設計的 GPU 計算。 定型通常需要逐步調整,以及跨 GPU 散發大量數據,才能使用數據平行處理原則達到高精確度。
模型分區化是常見的進階技術,可用來分割模型定型的階段。 您可以將 GPU 指派給不同的工作,並將其使用最大化。 GPU 可以相應增加和相應放大 HPC 工作負載,例如 Azure 上的 NV 系列或 ND 系列 VM。 這項功能可協助維護高資源使用量,並減少使用者對冗長且昂貴之機器學習訓練程式的介入。
或者,您可以使用預先定型的開放原始碼 AI 和機器學習模型來推斷。 相較於從頭開始建置和訓練 LLM,開始使用像 Llama、Falcon 或 Mistral 這樣的熱門車型,是更快速且更具成本效益的選項。 如需詳細資訊,請參閱 AKS 上的語言模型。
當您使用預先定型的模型進行推斷時,可能會根據您處理的數據量,遇到動態和變動的資源使用量。 當您透過所選的模型執行實時數據時,流量的尖峰有時會根據模型大小和需求而發生。 您必須在整個推斷程式中維持可接受的低延遲層級。 若要有效地使用 GPU 以達到高效能和低延遲,您可以使用 KAITO 支援的模型進行分散式推斷。 此方法會擴充計算選項,以包含每個 GPU 有一或兩個 GPU 的較低 GPU 計數 SKU、提供跨 Azure 區域的高可用性,並降低維護成本。
GPU 工作負載成本管理
GPU 可以增加成本。 正確監視工作負載,以協助瞭解哪些驅動 GPU 成本,並找出優化機會。 若要提高成本可見度,您可以使用 AKS 成本分析 附加元件。
下列案例受益於成本可見度。
已啟用 GPU 的 VM 大小成本
選取啟用 GPU 的正確 VM 大小,以優化執行 GPU 的成本。 每日成本可能會根據您選擇的 VM 大小而有所不同。 A100 GPU 的成本很高。 除非您的工作負載有特定需求,否則您應該避免它們。 AKS 成本分析會顯示每個 VM 的每日成本,並細分在已啟用 GPU 的 VM 上執行之每個工作負載的相關成本。 使用此數據來評估您是否有適當的 VM 大小,或是否需要更符合成本效益的選項。
閑置成本
建立已啟用 GPU 的節點集區之後,即使您未執行 GPU 工作負載,仍會產生 Azure 資源的成本。 閑置成本代表工作負載不使用的可用資源容量成本。 如果您有數個未使用的節點,此成本會快速增加。 若要避免高閑置成本,請只在您執行工作負載時建立節點集區,並在您未執行工作負載時使用叢集停止功能等方法。 AKS 成本分析會顯示每個節點的閑置成本。
過度布建和不足
過度布建是當您為 Pod 配置比必要資源更多時。 過度布建會導致資源浪費和不足。 即使您未使用資源,仍會保留給節點的過多資源。 若要減少過度布建,請使用 垂直 Pod 自動調整程式 ,根據先前的使用模式來設定精確的要求和限制。
當您的工作負載未完全使用 GPU 時,可能會發生不足的情況。 請考慮使用進階 GPU 共用和數據分割技術。 您可以使用具有分割的單一節點來最大化 GPU 使用量,而不是使用多個節點。 這些技術可協助您為每個工作負載配置適當的 GPU 加速量,以增強使用量並降低部署的營運成本。
AKS 上的Linux GPU工作負載部署支援 多個實例 GPU。 使用這項功能,將 NVIDIA A100 GPU 分割成最多七個獨立實例。 每個實例都有自己的記憶體和數據流多處理器。
NVIDIA 支援其他數據分割技術,例如時間配量和多進程服務實作。 若要 手動套用這些設定,請使用 NVIDIA GPU 運算符。
針對進階案例,您可以改善節點上的資源量化封裝。 您可以設定排程器組態,然後執行第二個排程器。 設定和維護次要排程器,以使用與預設 AKS 排程器不同的工作負載放置策略。 如需詳細資訊,請參閱 在 Kubernetes 上設定多個排程器。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Ayobami Ayodeji |資深項目經理
其他投稿人:
- Steve Buchanan |主體計劃管理員
- Sachi Desai |產品經理
- Ally Ford |Product Manager 2
- Paolo Salvatori | 首席服務工程師
- 愛琳·沙弗 |內容開發人員 2
若要查看非公開的 LinkedIn 個人檔案,請登入 LinkedIn。
下一步
- 使用 KAITO 將您自己的 AI 模型帶到 AKS 上的智慧型手機應用程式
- 使用 KAITO 在 AKS 上部署 AI 模型
- 部署在 AKS 上使用 OpenAI 的應用程式
- 使用 Terraform 在 AKS 上部署 KAITO
- 在 AKS 或已啟用 Azure Arc 的 Kubernetes 叢集上部署 Azure 機器學習 擴充功能
- 瞭解 Azure 上的模型目錄和集合
- 在 AKS 上使用 Windows 節點集區的 GPU
- 在 AKS 上使用 GPU