共用方式為


在 Azure Kubernetes Service (AKS) 中建立多重執行個體 GPU 節點集區

特定 NVIDIA GPU 最多可分成七個獨立實例。 每個實例都有自己的 Stream Multiprocessor (SM),負責平行執行指令,以及 GPU 記憶體。 如需 GPU 分割的詳細資訊,請參閱 NVIDIA MIG

本文將逐步引導您瞭解如何在 Azure Kubernetes Service (AKS) 叢集中使用 MIG 相容的 VM 大小來建立多重實例 GPU 節點集區。

先決條件與限制

  • 具有有效訂用帳戶的 Azure 帳戶。 如果您沒有帳戶,可以免費建立帳戶
  • 已安裝和設定 Azure CLI 2.2.0 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • Kube 命令行用戶端 kubectl 已安裝並設定。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。 如果您想要在本地安裝,可以使用 az aks install-cli 命令。
  • 已安裝並設定 Helm v3。 如需詳細資訊,請參閱安裝 Helm \(英文\)。
  • Azure Linux 目前不支援多重實例 GPU 節點集區。
  • 目前 AKS 上的 Standard_NC40ads_H100_v5 和 A100 GPU VM 大小支援多實例 GPU。

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 會分割成七個執行個體。

此 VM 大小的可用 GPU 實體設定檔包括 MIG1g、、MIG2gMIG3gMIG4gMIG7g

重要

建立節點集區之後,就無法變更套用的 GPU 執行個體設定檔。

建立 AKS 叢集

  1. 使用 az group create 命令建立 Azure 資源群組。

    az group create --name myResourceGroup --location southcentralus
    
  2. 使用 az aks create 命令建立 AKS 叢集。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. 使用 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_v4 MIG 相容 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) 元件

  1. 將您的 MIG 策略設定為環境變數。 您可以使用單一或混合策略。

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. 使用 helm repo addhelm repo update 命令新增 NVIDIA 裝置外掛程式 helm 存放庫。

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. 使用 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 軟體元件。

確認多執行個體 GPU 功能

  1. 使用 kubectl 命令驗證叢集的kubectl get連線,以傳回叢集節點清單。

    kubectl get nodes -o wide
    
  2. 使用 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.0412.1.1-base-ubuntu22.04

單一策略

  1. 建立名為 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
    
  2. 使用 kubectl apply 命令來部署應用程式,並指定 YAML 資訊清單的名稱。

    kubectl apply -f single-strategy-example.yaml
    
  3. 使用 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)
    

混合策略

  1. 建立名為 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
    
  2. 使用 kubectl apply 命令來部署應用程式,並指定 YAML 資訊清單的名稱。

    kubectl apply -f mixed-strategy-example.yaml
    
  3. 使用 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 之後的版本。

下一步

若要深入瞭解 Azure Kubernetes Service 上的 GPU,請參閱: