Azure Kubernetes Service (AKS) でフル マネージド GPU ノード プールを作成する (プレビュー)

従来、Azure Kubernetes Service (AKS)で NVIDIA GPU ワークロードを実行するには、各 GPU ノードに NVIDIA GPU ドライバー、Kubernetes デバイス プラグイン、および GPU メトリック エクスポーターをインストールして維持する必要があります。 これらのコンポーネントにより、GPU スケジューリング、コンテナー レベルの GPU アクセス、テレメトリが有効になりますが、手動または NVIDIA GPU オペレーター を使用してインストールすると、運用オーバーヘッドが増加します。

フル マネージド GPU ノード (プレビュー) では、AKS は NVIDIA GPU ドライバー、デバイス プラグイン、および Data Center GPU Manager (DCGM) メトリック エクスポーター をインストールして維持します。 GPU ノード プールの作成は 1 つのステップになり、GPU 容量は他の AKS ノード プールと同様に動作します。

マネージド GPU ノード プールは、 gpuProfile.nvidiaの下の 2 つのフィールドを使用して構成します。

  • managementMode (Managed または Unmanaged) は、AKS がフル マネージド GPU スタック (ドライバー、デバイス プラグイン、DCGM メトリック エクスポーター) をインストールするか、ドライバーのみをインストールするかを制御します。 既定値は Unmanaged です。
  • migStrategy (NoneSingle、または Mixed) は、A100 や H100 などのサポートされている GPU SKU のマルチインスタンス GPU (MIG) 戦略を設定します。 既定値は None です。

この記事では、マネージド GPU ノード プールをプロビジョニングし、必要に応じて MIG を有効にし、スタックを確認し、サンプル GPU ワークロードを実行します。

Important

AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。

開始する前に

マネージド GPU コンポーネント

マネージド GPU ノード プールには、すべてのノードに次のコンポーネントを含めることができます。

コンポーネント 動作内容 AKS が管理する内容
NVIDIA GPU ドライバー OS とコンテナーが GPU ハードウェアと通信できるようにするカーネル モジュールとユーザー空間ライブラリ。 ドライバーのバージョンの選択、ノード プロビジョニングでのインストール、ノード イメージのアップグレード後の再インストール。
NVIDIA Kubernetes デバイス プラグイン ポッドがそれらを要求できるように GPU リソース (nvidia.com/gpunvidia.com/mig-*) を kubelet にアドバタイズする DaemonSet と同等です。 各 GPU ノードでのデプロイ、構成 (MIG 戦略を含む)、ライフサイクル。
NVIDIA DCGM と DCGM メトリック エクスポーター Data Center GPU Manager は、GPU の正常性と使用率のデータを収集し、ポート DCGM_FI_DEV_GPU_UTILで Prometheus メトリック (DCGM_FI_DEV_GPU_TEMP19400 など) を公開します。 インストール、サービスの有効化、およびメトリックをスクレイピングするために使用されるkubernetes.azure.com/dcgm-exporter=enabledノードラベル。
GPU 正常性シグナル NPD は、 UnhealthyNvidiaDevicePluginUnhealthyNvidiaDCGMServicesなどの GPU 固有のノード条件を示します。 GPU ノードの NPD 監視と条件レポート。

プロファイルのインストール

次の 2 つの gpuProfile フィールドで、AKS がインストールするコンポーネントを決定します。

  • gpuProfile.driver (Install または None): AKS が NVIDIA GPU ドライバーをインストールするかどうか。
  • gpuProfile.nvidia.managementMode (Managed または Unmanaged): AKS が Kubernetes に接続する GPU スタックもドライバーの上にインストールするかどうか。

これらによって、次の 3 つのインストール プロファイルが生成されます。

プロファイルのインストール CLI フラグ AKS のインストールと管理
フル マネージド スタック --enable-managed-gpu=true (またはどちらのフラグも使わない) 上記の 4 つのコンポーネントすべて:ドライバー、デバイス プラグイン、DCGM メトリック エクスポーター、NPD での GPU 正常性監視。
ドライバーのみ (既定) --enable-managed-gpu=false NVIDIA GPU ドライバーのみ。 デバイス プラグイン、メトリック エクスポーター、正常性監視を自分でインストールして管理します (たとえば、 NVIDIA GPU オペレーターを使用)。
なし (BYO) --enable-managed-gpu=false --gpu-driver None 何もしない。 AKS では、4 つのコンポーネントはインストールされません。 あなたはフルスタックを完全に管理している。 「 独自の GPU ドライバーを使用する」を参照してください。

既定値と上書き

  • 既定値: --enable-managed-gpuまたは--gpu-driverを渡さない場合、AKS は NVIDIA GPU 対応 VM サイズで作成されたノード プールにドライバーのみのプロファイルを適用します。
  • オーバーライド: managementMode: Managedはドライバーを必要とするため、--gpu-driver Noneとドライバーがまだインストールされている場合、--enable-managed-gpu=trueは無視されます。 ドライバーをスキップするには、 --enable-managed-gpu=false--gpu-driver Noneの両方を設定します。
  • 不変性: managementModemigStrategydriver はすべて作成時に固定されます。 プロファイルを変更するには、新しいノード プールを作成します。

aks-preview CLI 拡張機能をインストールする

  1. aks-preview コマンドを使用して az extension add CLI 拡張機能をインストールします。 バージョン 19.0.0b29 以降が必要です。

    az extension add --name aks-preview
    
  2. az extension update コマンドを使用して拡張機能を更新して、最新バージョンが確実にインストールされた状態にします。

    az extension update --name aks-preview
    

ManagedGPUExperiencePreview フィーチャーフラグを登録する

ManagedGPUExperiencePreview コマンドを使用してサブスクリプションに az feature register 機能フラグを登録します。

az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview

制限事項

  • この機能は現在、 NVIDIA GPU 対応の仮想マシン (VM) サイズ のみをサポートしています。
  • 汎用ノード プールを更新して GPU VM サイズを追加することは、AKS ではサポートされていません。
  • GPU メトリックはサポートされていないため、Windowsノード プールはこの機能ではサポートされていません。 WINDOWS GPU ノード プールを作成すると、AKS によってドライバーと DirectX デバイス プラグインが自動的にインストールおよび管理されます。 詳細については、AKS Windows GPU のドキュメントを参照してください。
  • この機能を使用するための既存 のマルチインスタンス GPU ノード プールの移行はサポートされていません。
  • 既存の NVIDIA GPU ノード プールからマネージド GPU ノード プールへのインプレース アップグレードはサポートされていません。 既存の GPU ノードを移行、切断、ドレインするには、 --enable-managed-gpu=trueで作成された新しい GPU ノード プールにワークロードを再デプロイします。 詳細については、「 AKS でのノード プールのサイズ変更」を参照してください。
  • managementModemigStrategydriver、およびgpuProfileフィールドは、ノード プールの作成後に変更できません。 これらの値を変更するには、新しいノード プールを作成します。
  • クラスター オートスケーラーは、プレビュー期間中、マネージド GPU ノード プールではサポートされていません。 これらのプールを手動でスケーリングします。

GPU 対応 VM には、より高い価格が適用され、利用可能なリージョンが限られる特殊なハードウェアが含まれます。 詳細については、価格ツールと利用可能なリージョンを参照してください。

AKS マネージド GPU ノード プールを作成する (プレビュー)

--enable-managed-gpu=trueaz aks nodepool addに渡して、マネージド GPU ノード プールを既存の AKS クラスターに追加します。 AKS は gpuProfile.nvidia.managementModeManaged に設定し、GPU ドライバー、デバイス プラグイン、DCGM メトリック エクスポーターを自動的にインストールします。

既定の Ubuntu オペレーティング システム (OS) SKU を使用するには、OS SKU を指定せずにノード プールを作成します。 ノード プールは、クラスターの Kubernetes バージョンに基づき、既定のオペレーティング システムに対して設定されます。

  1. az aks nodepool add フラグを指定して --enable-managed-gpu=true コマンドを使用して、クラスターにノード プールを追加します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_NC6s_v3 \
        --node-taints sku=gpu:NoSchedule \
        --enable-managed-gpu=true
    
  2. マネージド NVIDIA GPU ソフトウェア コンポーネントが正常にインストールされていることを確認します。

    az aks nodepool show \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp
    

    出力には、次の値が含まれている必要があります。

    ...
    "gpuProfile": {
        "driver": "Install",
        "driverType": "",
        "nvidia": {
            "managementMode": "Managed",
            "migStrategy": null
        }
    },
    ...
    

マネージド マルチインスタンス GPU (MIG) ノード プールの作成 (プレビュー)

マルチインスタンス GPU (A100 や H100 など) をサポートする GPU SKU の場合は、 --gpu-mig-strategy フラグを使用してノード プールの作成時に MIG 戦略を構成します。 この戦略では、MIG パーティションを Kubernetes に公開する方法を制御します。

  • Single: すべての MIG インスタンスは、標準の nvidia.com/gpu リソースで集計されます。
  • Mixed: 各 MIG プロファイルは、 nvidia.com/mig-1g.10gbなどの個別のリソースとして公開されます。
  • None (既定値): MIG が構成されていません。

migStrategy フィールドは、ノード プールの作成後は変更できません。

MIG パーティション分割、サポートされている VM サイズ、GPU インスタンス プロファイルの背景については、「 AKS と NVIDIA Multi-Instance GPU でのマルチインスタンス GPU ノード プールの作成 」を 参照してください。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mignp \
    --node-count 1 \
    --node-vm-size Standard_NC24ads_A100_v4 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=true \
    --gpu-instance-profile MIG1g \
    --gpu-mig-strategy Single

この構成では、ポッドは標準の nvidia.com/gpu リソース名を使用して GPU リソースを要求します。

マネージド GPU ノード プールを確認する (プレビュー)

ノード プールの準備ができたら、次のチェックを実行して、完全なマネージド スタックがインストールされていて正常であることを確認します。

  1. Node Problem Detector (NPD) から GPU 固有のノード条件を確認します。

    GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}')
    kubectl describe node $GPU_NODE
    

    マネージド GPU ノードでは、次の条件の両方が Falseを報告する必要があります。

    状態 地位 理由
    UnhealthyNvidiaDevicePlugin False HealthyNvidiaDevicePlugin
    UnhealthyNvidiaDCGMServices False HealthyNvidiaDCGMServices
  2. マネージド GPU ラベルがノードに存在することを確認します。

    kubectl get node $GPU_NODE -o jsonpath='{.metadata.labels.kubernetes\.azure\.com/dcgm-exporter}'
    

    予想される出力: enabled

  3. GPU リソースがノードの割り当て可能なリソースでアドバタイズされていることを確認します。

    kubectl get node $GPU_NODE -o jsonpath='{.status.allocatable}'
    

    MIG 以外のノード プールの場合、出力には "nvidia.com/gpu": "1" (SKU に応じて複数) が含まれます。 MIG Mixed ノード プールの場合、出力には、 "nvidia.com/mig-1g.10gb": "7"などの MIG 固有のリソースが含まれます。

  4. サンプル ワークロードを実行して、コンテナー内からの GPU アクセスを確認します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: managed-gpu-test
    spec:
      restartPolicy: Never
      tolerations:
        - key: "sku"
          operator: "Equal"
          value: "gpu"
          effect: "NoSchedule"
      containers:
      - name: gpu-test
        image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
        command: ["nvidia-smi"]
        resources:
          limits:
            nvidia.com/gpu: 1
    

    ポッド ログを表示して、GPU デバイス、ドライバーのバージョン、CUDA のバージョンを示す nvidia-smi 出力を確認します。

    kubectl logs managed-gpu-test
    

マネージド GPU ノード プールのスケーリング (プレビュー)

az aks nodepool scaleを使用して、マネージド GPU ノード プールを手動でスケーリングします。 新しいノードは、フル マネージド GPU スタックをインストールします。

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 2

Important

プレビュー期間中、マネージド GPU ノード プールはクラスター オートスケーラーをサポートしていません。 これらのプールを手動でスケーリングします。

別のインストール用プロファイル

フル マネージド スタック プロファイルが適切でない場合、AKS は GPU ノード プールで 2 つの代替プロファイルをサポートします。

このプロファイルは、AKS で NVIDIA GPU ドライバーをインストールして保守するが、デバイス プラグインとメトリック エクスポーターを自分でデプロイする ( NVIDIA GPU オペレーターなど) 場合に使用します。 --enable-managed-gpu=falseを設定します。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=false

この構成では、次の操作を行います。

  • AKS は NVIDIA GPU ドライバーをインストールして管理します (gpuProfile.driverInstall)。
  • AKS では、デバイス プラグイン、DCGM メトリック エクスポーター、または GPU 正常性規則はインストールされません。 gpuProfile.nvidianullです。
  • デバイス プラグインをデプロイするまで、 nvidia.com/gpu リソースはアドバタイズされません。

次のステップ