在 Azure Kubernetes Service (AKS) 中建立多重執行個體 GPU 節點集區
Nvidia 的 A100 GPU 最多可以分成七個獨立執行個體。 每個執行個體都有本身的記憶體和串流多處理器 (SM)。 如需 Nvidia A100 的詳細資訊,請參閱 Nvidia A100 GPU。
本文將逐步引導您在 Azure Kubernetes Service (AKS) 叢集中建立多重執行個體 GPU 節點集區。
先決條件與限制
- 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有帳戶,可以免費建立帳戶。
- 已安裝和設定 Azure CLI 2.2.0 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - Kube 命令行用戶端 kubectl 已安裝並設定。 如果您使用 Azure Cloud Shell,則
kubectl
已安裝。 如果您想要在本地安裝,可以使用az aks install-cli
命令。 - 已安裝並設定 Helm v3。 如需詳細資訊,請參閱安裝 Helm \(英文\)。
- 您無法搭配多重執行個體節點集區使用叢集自動調整程式。
GPU 執行個體設定檔
GPU 執行個體設定檔會定義 GPU 的分割方式。 下表顯示 Standard_ND96asr_v4
可用的 GPU 執行個體設定檔:
設定檔名稱 | SM 佔比 | 記憶體佔比 | 建立的執行個體數目 |
---|---|---|---|
MIG 1g.5gb | 1/7 | 1/8 | 7 |
MIG 2g.10gb | 2/7 | 2/8 | 3 |
MIG 3g.20gb | 3/7 | 4/8 | 2 |
MIG 4g.20gb | 4/7 | 4/8 | 1 |
MIG 7g.40gb | 7/7 | 8/8 | 1 |
例如,MIG 1g.5gb
的 GPU 執行個體設定檔表示每個 GPU 執行個體都會有 1g SM (運算資源) 和 5gb 記憶體。 在此情況下,GPU 會分割成七個執行個體。
此執行個體大小的可用 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\ --node-count 1 \ --generate-ssh-keys
建立多執行個體 GPU 節點集區
您可以使用 Azure CLI 或 ARM API 的 HTTP 要求來建立節點集區。
使用
az aks nodepool add
命令建立多重執行個體 GPU 節點集區,並指定 GPU 執行個體設定檔。az aks nodepool add \ --name mignode \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --node-vm-size Standard_ND96asr_v4 \ --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 特徵探索
將您的 MIG 策略設定為環境變數。 您可以使用單一或混合策略。
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
使用
helm repo add
和helm repo update
命令新增 Nvidia 裝置外掛程式和 GPU 功能探索 helm 存放庫。helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo add nvgfd https://nvidia.github.io/gpu-feature-discovery helm repo update
使用
helm install
命令安裝 Nvidia 裝置外掛程式。helm install \ --version=0.14.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvdp/nvidia-device-plugin
使用
helm install
命令安裝 GPU 功能探索。helm install \ --version=0.2.0 \ --generate-name \ --set migStrategy=${MIG_STRATEGY} \ nvgfd/gpu-feature-discovery
確認多執行個體 GPU 功能
使用
az aks get-credentials
命令,設定kubectl
以連線到您的 AKS 叢集。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用
kubectl get
命令來傳回叢集節點的清單,以驗證對您叢集的連線。kubectl get nodes -o wide
使用
kubectl describe node
命令確認節點具有多重執行個體 GPU 功能。 下列範例命令描述名為 mignode 的節點,其中使用 MIG1g 做為 GPU 執行個體設定檔。kubectl describe node mignode
您的輸出應該與下列範例輸出類似:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
排程工作
下列範例是以 Ubuntu22.04 的 cuda 基底映像 12.1.1.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)
重要
Docker Hub 上已淘汰 CUDA 映像的 latest
標籤。 如需最新的映像和對應的標籤,請參閱 NVIDIA 的存放庫。
疑難排解
如果您在建立節點集區之後未看到多重執行個體 GPU 功能,請確認 API 版本是 2021-08-01 之後的版本。
下一步
如需 AKS 節點集區的詳細資訊,請參閱在 AKS 中管理叢集的節點集區。