共用方式為


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

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

本文將逐步引導您瞭解如何在 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 節點集區。
  • 您無法搭配多重實例 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. 使用 az aks get-credentials 命令,設定 kubectl 以連線到您的 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 aks-mignode \
        --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.15.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

注意

NVIDIA 裝置外掛程式 0.15.0 版和更新 版本的 Helm 安裝會合併裝置外掛程式 GFD 存放庫。 本教學課程不建議個別安裝 GFD 軟體元件。

確認多執行個體 GPU 功能

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

    kubectl get nodes -o wide
    
  2. 使用 kubectl describe node 命令確認節點具有多重執行個體 GPU 功能。 下列範例命令描述名為 aks-mignode 的節點,其使用 MIG1g 作為 GPU 實例配置檔。

    kubectl describe node aks-mignode
    

    您的輸出應該與下列範例輸出類似:

    # 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

單一策略

  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,請參閱: