次の方法で共有


Azure Kubernetes Service (AKS) でコンピューティングを集中的に使用するワークロードに Windows GPU を使用する (プレビュー)

グラフィック処理装置 (GPU) は、グラフィックや視覚化ワークロードなど、コンピューティング処理の負荷が高いワークロードによく使用されます。 AKS では、コンピューティング処理の負荷が高い Kubernetes ワークロードを実行するための GPU 対応の Windows および Linux ノード プールがサポートされています。

この記事は、新規および既存の AKS クラスターでスケジュール可能な GPU を使用して Windows ノードをプロビジョニングするのに役立ちます (プレビュー)。

サポートされている GPU 対応仮想マシン (VM)

サポートされている GPU 対応 VM を表示するには、Azure での GPU 最適化済み VM サイズに関する記事を参照してください。 AKS ノード プールには、最小サイズの Standard_NC6s_v3 をお勧めします。 NVv4 シリーズ (AMD GPU に基づく) は、AKS ではサポートされていません。

Note

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

制限事項

  • 既存のノード プールの更新による Windows GPU の追加はサポートされていません。
  • Kubernetes バージョン 1.28 以前ではサポートされていません。

開始する前に

  • この記事は、AKS クラスターがすでに存在していることを前提としています。 クラスターがない場合は、Azure CLIAzure PowerShell、または Azure portal を使用して作成します。
  • az aks nodepool add コマンドで --skip-gpu-driver-install フィールドを使用するように Azure CLI バージョン 1.0.0b2 以降をインストールして構成する必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

クラスターの資格情報を取得する

  • az aks get-credentials コマンドを使用して AKS クラスターの資格情報を取得します。 次のコマンド例では、myResourceGroup リソース グループにある myAKSCluster の資格情報を取得します。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Windows GPU を使用し、ドライバーは自動インストールにする

NVIDIA GPU の使用には、Kubernetes 向け DirectX デバイス プラグインなどのさまざまな NVIDIA ソフトウェア コンポーネントのインストールや GPU ドライバーのインストールなどがともないます。 サポートされている GPU 対応 VM を使用して Windows ノード プールを作成すると、これらのコンポーネントと適切な NVIDIA CUDA ドライバーまたは GRID ドライバーがインストールされます。 NC および ND シリーズの VM サイズの場合、CUDA ドライバーがインストールされます。 NV シリーズの VM サイズの場合、GRID ドライバーがインストールされます。

重要

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

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

  • az extension add または az extension update コマンドを利用し、aks-preview 拡張機能を登録するか、更新します。

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

WindowsGPUPreview 機能フラグを登録する

  1. az feature register コマンドを使用して、WindowsGPUPreview 機能フラグを登録します。

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    状態が [登録済み] と表示されるまでに数分かかります。

  2. az feature show コマンドを使用して、登録の状態を確認します。

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. 状態が Registered と表示されたら、az provider register コマンドを使用して Microsoft.ContainerService リソース プロバイダーの登録を最新の情報に更新します。

    az provider register --namespace Microsoft.ContainerService
    

Windows GPU 対応ノード プールを作成する (プレビュー)

Windows GPU 対応ノード プールを作成するには、サポートされている GPU 対応 VM サイズを使用し、Windows として os-type を指定する必要があります。 既定の Windows os-skuWindows2022 ですが、すべての Windows os-sku オプションがサポートされています。

  1. az aks nodepool add コマンドを使用して Windows GPU 対応ノード プールを作成する

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type Windows \
        --kubernetes-version 1.29.0 \
        --node-vm-size Standard_NC6s_v3
    
  2. GPU がスケジュール可能であることを確認します。

  3. GPU がスケジュール可能であることを確認したら、GPU ワークロードを実行できます。

Windows GPU を使用し、ドライバーは手動インストールにする

AKS で N シリーズ (NVIDIA GPU) VM サイズの Windows ノード プールを作成すると、GPU ドライバーと Kubernetes DirectX デバイス プラグインが自動的にインストールされます。 この自動インストールをバイパスするには、次の手順に従います。

  1. --skip-gpu-driver-install を使用して GPU ドライバーのインストールをスキップする (プレビュー)
  2. Kubernetes DirectX デバイス プラグインの手動インストール

GPU ドライバーのインストールをスキップする (プレビュー)

AKS では、GPU ドライバーの自動インストールが既定で有効になっています。 独自のドライバーをインストールするなどの場合、GPU ドライバーのインストールをスキップすることがあります。

重要

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

  1. az extension add または az extension update コマンドを利用し、aks-preview 拡張機能を登録するか、更新します。

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. az aks nodepool add コマンドを使用して (--skip-gpu-driver-install フラグを指定) ノード プールを作成し、GPU ドライバーの自動インストールをスキップします。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --skip-gpu-driver-install
    

Note

使用している --node-vm-size がまだ AKS にオンボードされていない場合、GPU を使用できず、--skip-gpu-driver-install は機能しません。

Kubernetes DirectX デバイス プラグインの手動インストール

Kubernetes DirectX デバイス プラグイン用の DaemonSet をデプロイできます。このプラグインは、各ノードでポッドを実行して、GPU に必要なドライバーを提供します。

  • az aks nodepool add コマンドを使用して、クラスターにノード プールを追加します。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

名前空間を作成し、Kubernetes DirectX デバイス プラグインをデプロイする

  1. kubectl create namespace コマンドを使って名前空間を作成します。

    kubectl create namespace gpu-resources
    
  2. k8s-directx-device-plugin.yaml という名前のファイルを作成し、Kubernetes プロジェクトの NVIDIA デバイス プラグインの一部として提供される次の YAML マニフェストを貼り付けます。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nvidia-device-plugin-daemonset
      namespace: gpu-resources
    spec:
      selector:
        matchLabels:
          name: nvidia-device-plugin-ds
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
          # reserves resources for critical add-on pods so that they can be rescheduled after
          # a failure.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
            name: nvidia-device-plugin-ctr
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
    
  3. DaemonSet を作成し、kubectl apply コマンドを使って NVIDIA デバイス プラグインが正常に作成されたことを確認します。

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. これで NVIDIA デバイス プラグインが正常にインストールされたので、GPU がスケジュール可能であることを確認できます。

GPU がスケジュール可能であることを確認する

クラスターを作成したら、Kubernetes で GPU がスケジュール可能であることを確認します。

  1. kubectl get nodes コマンドを使用して、クラスター内のノードを一覧表示します。

    kubectl get nodes
    

    出力は次の出力例のようになります。

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. kubectl describe node コマンドを使用して GPU がスケジュール可能であることを確認します。

    kubectl describe node aks-gpunp-28993262-0
    

    Capacity セクションで、GPU は microsoft.com/directx: 1 と表示されているはずです。 出力は、次の要約された出力例のようになります:

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

Container Insights を使用して GPU の使用状況を監視する

AKS を使用したコンテナーの分析情報では、次の GPU 使用状況メトリックが監視されます。

メトリックの名前 メトリック ディメンション (タグ) 説明
containerGpuDutyCycle container.azm.ms/clusterIdcontainer.azm.ms/clusterNamecontainerNamegpuIdgpuModelgpuVendor 過去のサンプリング期間 (60 秒) 中に、コンテナーに対して GPU がビジーであるかアクティブに処理を行っていた時間の割合。 デューティ サイクルは 1 から 100 までの値です。
containerGpuLimits container.azm.ms/clusterIdcontainer.azm.ms/clusterNamecontainerName 各コンテナーでは、1 つまたは複数の GPU として制限を指定できます。 GPU の一部を要求または制限することはできません。
containerGpuRequests container.azm.ms/clusterIdcontainer.azm.ms/clusterNamecontainerName 各コンテナーでは、1 つまたは複数の GPU を要求できます。 GPU の一部を要求または制限することはできません。
containerGpumemoryTotalBytes container.azm.ms/clusterIdcontainer.azm.ms/clusterNamecontainerNamegpuIdgpuModelgpuVendor 特定のコンテナーに使用できる GPU メモリの量 (バイト)。
containerGpumemoryUsedBytes container.azm.ms/clusterIdcontainer.azm.ms/clusterNamecontainerNamegpuIdgpuModelgpuVendor 特定のコンテナーに使用された GPU メモリの量 (バイト)。
nodeGpuAllocatable container.azm.ms/clusterIdcontainer.azm.ms/clusterNamegpuVendor Kubernetes で使用できるノード内の GPU の数。
nodeGpuCapacity container.azm.ms/clusterIdcontainer.azm.ms/clusterNamegpuVendor ノード内の GPU の合計数。

リソースをクリーンアップする

  • kubectl delete job コマンドを使用して、この記事で作成した関連する Kubernetes オブジェクトを削除します。

    kubectl delete jobs windows-gpu-workload
    

次のステップ