特定 NVIDIA GPU 最多可分成七個獨立實例。 每個執行個體都有自己的 Stream Multiprocessor (SM),負責平行執行指令,以及 GPU 記憶體。 如需 GPU 分割的詳細資訊,請參閱 NVIDIA MIG。
本文將帶你了解如何在 Azure Kubernetes Service (AKS) 叢集中使用相容 MIG 的虛擬機大小,建立一個多實例 GPU 節點池。
提示
若想獲得完全託管的 MIG 體驗,AKS 安裝並維護 NVIDIA 驅動程式、裝置外掛及 DCGM 指標匯出器,請參閱 「建立管理型多實例 GPU(MIG)節點池(預覽版)」。
必要條件和限制
- 一個有有效訂閱的 Azure 帳號。 如果您沒有帳戶,可以免費建立帳戶。
- Azure CLI 版本 2.2.0 或更新版本已安裝並配置。 執行
az --version以尋找版本。 如果你需要安裝或升級,請參考 安裝 Azure CLI。 - Kube 命令行用戶端 kubectl 已安裝並設定。 如果你用 Azure Cloud Shell,
kubectl已經安裝好了。 如果您想要在本地安裝,可以使用az aks install-cli命令。 - 已安裝並設定 Helm v3。 如需詳細資訊,請參閱安裝 Helm \(英文\)。
- 目前 AKS 支援 NVIDIA A100、H100 和 H200 系列 GPU 虛擬機器大小的多執行個體 GPU。
GPU 執行個體設定檔
GPU 執行個體設定檔會定義 GPU 的分割方式。 下表顯示 Standard_ND96asr_v4 可用的 GPU 執行個體設定檔:
| 設定檔名稱 | SM 佔比 | 記憶體佔比 | 建立的執行個體數目 |
|---|---|---|---|
| 米格 1g.5GB | 1/7 | 1/8 | 7 |
| 米格 2g.10GB | 2/7 | 2/8 | 3 |
| 米格 3g.20GB | 3/7 | 4/8 | 2 |
| 米格 4g.20GB | 4/7 | 4/8 | 1 |
| MIG 7g.40GB | 7/7 | 8/8 | 1 |
例如,MIG 1g.5gb 的 GPU 執行個體設定檔表示每個 GPU 執行個體都有 1g SM (串流多處理器) 和 5gb 記憶體。 在此情況下,GPU 會分割成七個執行個體。
此 VM 大小的可用 GPU 執行個體設定檔包括 MIG1g、MIG2g、MIG3g、MIG4g 和 MIG7g。
重要事項
建立節點集區之後,就無法變更套用的 GPU 執行個體設定檔。
建立 AKS 叢集
使用
az group create指令建立一個Azure資源群組。az group create --name myResourceGroup --location southcentralus使用
az aks create命令建立 AKS 叢集。az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys使用
kubectl命令,設定az aks get-credentials以連線到您的 AKS 叢集。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
建立多執行個體 GPU 節點集區
你可以使用 Azure CLI 或對 ARM API 的 HTTP 請求來建立節點池。
使用
az aks nodepool add命令建立多重執行個體 GPU 節點集區,並指定 GPU 執行個體設定檔。 以下範例建立具有Standard_ND96asr_v4MIG 相容 GPU VM 大小的節點集區。az aks nodepool add \ --name aksMigNode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --node-count 1 \ --gpu-instance-profile MIG1g
判斷多重執行個體 GPU (MIG) 策略
安裝 NVIDIA 外掛程式之前,您必須指定要用於 GPU 資料分割的多執行個體 GPU (MIG) 策略:單一策略或混合策略。 這兩種策略不會影響您執行 CPU 工作負載的方式,而會影響 GPU 資源的顯示方式。
-
單一策略:單一策略會將每個 GPU 執行個體視為 GPU。 如果您使用此策略,GPU 資源會顯示為
nvidia.com/gpu: 1。 -
混合策略:混合策略會公開 GPU 執行個體和 GPU 執行個體設定檔。 如果您使用此策略,GPU 資源會顯示為
nvidia.com/mig1g.5gb: 1。
安裝 NVIDIA 裝置外掛程式和 GPU 功能探索 (GFD) 元件
將您的 MIG 策略設定為環境變數。 您可以使用單一或混合策略。
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed使用
helm repo add和helm repo update命令新增 NVIDIA 裝置外掛程式 helm 存放庫。helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update使用
helm install命令安裝 NVIDIA 裝置外掛程式。helm install nvdp nvdp/nvidia-device-plugin \ --version=0.17.0 \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
附註
NVIDIA 裝置外掛程式的 Helm 安裝會合併 Kubernetes 裝置外掛程式和 GFD 存放庫。 使用 AKS 管理的多重實例 GPU 時,不建議個別安裝 GFD 軟體元件。
附註
如果您在 Azure Linux 上透過自訂 DaemonSet 清單而非 Helm 部署 NVIDIA 裝置外掛,必須在裝置外掛容器中包含環境變數 NVIDIA_MIG_MONITOR_DEVICES=all。
確認多執行個體 GPU 功能
使用
kubectl命令驗證叢集的kubectl get連線,以傳回叢集節點清單。kubectl get nodes -o wide使用
kubectl describe node命令確認節點具有多重執行個體 GPU 功能。 下列範例命令描述名為 aksMigNode 的節點,其使用 MIG1g 作為 GPU 實例配置檔。kubectl describe node aksMigNode您的輸出應該與下列範例輸出類似:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
排程工作
下列範例是以 Ubuntu 22.04 的 CUDA 基底映像 12.1.1 版為基礎,標記為 12.1.1-base-ubuntu22.04。
單一策略
建立名為
single-strategy-example.yaml的檔案,然後將下列資訊清單複製進來。apiVersion: v1 kind: Pod metadata: name: nvidia-single spec: containers: - name: nvidia-single image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 1000"] resources: limits: "nvidia.com/gpu": 1使用
kubectl apply命令來部署應用程式,並指定 YAML 資訊清單的名稱。kubectl apply -f single-strategy-example.yaml使用
kubectl exec命令驗證配置的 GPU 裝置。 此命令會傳回叢集節點的清單。kubectl exec nvidia-single -- nvidia-smi -L下列範例類似於輸出,顯示已成功建立部署和服務:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c) MIG 1g.5gb Device 1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc) MIG 1g.5gb Device 2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f) MIG 1g.5gb Device 3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2) MIG 1g.5gb Device 4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e) MIG 1g.5gb Device 5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85) MIG 1g.5gb Device 6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
混合策略
建立名為
mixed-strategy-example.yaml的檔案,然後將下列資訊清單複製進來。apiVersion: v1 kind: Pod metadata: name: nvidia-mixed spec: containers: - name: nvidia-mixed image: nvidia/cuda:12.1.1-base-ubuntu22.04 command: ["/bin/sh"] args: ["-c","sleep 100"] resources: limits: "nvidia.com/mig-1g.5gb": 1使用
kubectl apply命令來部署應用程式,並指定 YAML 資訊清單的名稱。kubectl apply -f mixed-strategy-example.yaml使用
kubectl exec命令驗證配置的 GPU 裝置。 此命令會傳回叢集節點的清單。kubectl exec nvidia-mixed -- nvidia-smi -L下列範例類似於輸出,顯示已成功建立部署和服務:
GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b) MIG 1g.5gb Device 0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
重要事項
CUDA 影像的 latest 標籤已在 Docker Hub 上被棄用。 如需最新的映像和對應的標籤,請參閱 NVIDIA 的存放庫。
疑難排解
如果您在建立節點集區之後未看到多重執行個體 GPU 功能,請確認 API 版本是 2021-08-01 之後的版本。
後續步驟
欲了解更多關於 Azure Kubernetes Service 上的 GPU 資訊,請參閱:
- AKS 管理的 GPU 節點池(預覽版), 提供完整管理的 MIG 體驗,包含驅動程式、裝置外掛及 DCGM 指標匯出器。
- 比較 NVIDIA GPU 在 AKS 節點上可用的不同分區策略。
- 了解 AKS 上 GPU 工作負載的應用案例。