次の方法で共有


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

Azure 上の AMD GPU 仮想マシン (VM) のサイズは、パフォーマンスとコストの柔軟性を提供し、高いコンピューティング容量を提供しながら、ワークロード要件に適した構成を選択できます。 AKS では、コンピューティング集中型 Kubernetes ワークロードを実行するための AMD GPU 対応 Linux ノード プールがサポートされています。

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

制限事項

  • AKS は現在、Standard_ND96isr_MI300X_v5 を搭載した Azure VM サイズをサポートしています。
  • 既存のノード プールを更新して AMD GPU VM サイズを追加することは、AKS ではサポートされていません。
  • AMD GPU VM サイズを使用した非 AMD GPU 対応ノード プールの更新はサポートされていません。
  • AzureLinuxWindowsAzureLinuxOSGuard 、および flatcar は、AMD GPU ではサポートされていません。

開始する前に

  • この記事は、AKS クラスターがすでに存在していることを前提としています。 クラスターがない場合は、Azure CLIAzure PowerShell、または Azure portal を使用して作成します。
  • --gpu-driver フィールドを設定するには、Azure CLI バージョン 2.72.2 以降がインストールされている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。
  • aks-preview Azure CLI 拡張機能がインストールされている場合は、バージョンを 18.0.0b2 以降に更新してください。

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

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

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

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

AMD GPU を使用するためのオプション

AMD GPU の使用には、 Kubernetes、GPU ドライバーなどの AMD デバイス プラグインなど、さまざまな AMD GPU ソフトウェア コンポーネントのインストールが含まれます。

現時点では、AKS は、GPU ドライバーまたは AMD GPU 対応ノード プールへの AMD GPU デバイス プラグインのインストールを管理または自動化しません。

AKSInfinibandSupport 機能を登録する

  1. の名前付け規則 ( など) を使用して AMD GPU VM サイズが RDMA 対応の場合は、ノード プール内のマシンが同じ物理 Infiniband ネットワーク上に存在することを確認する必要があります。 これを実現するには、AKSInfinibandSupport コマンドを使用してaz feature register機能フラグを登録します。

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. 次のように az feature show コマンドを使用して、登録状態を確認します。

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. az aks nodepool add コマンドを使用して AMD GPU 対応ノード プールを作成し、API フィールド--gpu-drivernone設定して、既定のドライバーのインストールをスキップします。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_ND96isr_MI300X_v5 \
        --gpu-driver none
    

    AKS では現在、AMD GPU ノード プールの作成時にドライバーの自動インストールをスキップするために、 gpu-driver フィールドの使用が強制されています。

AKS に AMD GPU オペレーターをデプロイする

AMD GPU オペレーターは、ドライバーのインストール、Kubernetes 用の AMD デバイス プラグイン、AMD コンテナー ランタイムなど、GPU のプロビジョニングに必要なすべての AMD ソフトウェア コンポーネントの管理とデプロイを自動化します。 AMD GPU オペレーターはこれらのコンポーネントを処理するため、AKS クラスターに AMD デバイス プラグインを個別にインストールする必要はありません。 これは、AKS で AMD GPU オペレーターを使用するために、GPU ドライバーの自動インストールをスキップする必要があることを意味します。

  1. AMD のドキュメントに従って GPU オペレーターをインストールします

  2. kubectl get nodes コマンドを使用して、ノード プール内の AMD GPU の状態を確認します。

    kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
    

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

    NAME                    STATUS   ROLES   AGE    VERSION
    aks-gpunp-00000000      Ready    agent   2m4s   v1.31.7
    

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

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

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

    kubectl get nodes
    
  2. kubectl describe node コマンドを使用して GPU がスケジュール可能であることを確認します。

    kubectl describe node aks-gpunp-00000000
    

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

    Name:               aks-gpunp-00000000
    Roles:              agent
    Labels:             accelerator=amd
    
    [...]
    
    Capacity:
    [...]
     amd.com/gpu:                 1
    [...]
    

AMD GPU 対応ワークロードを実行する

AMD GPU の動作を確認するには、適切なリソース要求を使用して GPU 対応ワークロードをスケジュールできます。 この例では、MNIST データセットに対して Tensorflow ジョブを実行します。

  1. samples-tf-mnist-demo.yaml という名前のファイルを作成し、amd.com/gpu: 1 という制限のある次の YAML マニフェストを貼り付けます。

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               amd.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. kubectl apply コマンドを使用してジョブを実行します。これにより、マニフェスト ファイルが解析され、定義された Kubernetes オブジェクトが作成されます。

    kubectl apply -f samples-tf-mnist-demo.yaml
    

GPU 対応ワークロードの状態を表示する

  1. kubectl get jobs フラグを指定して --watch コマンドを使用し、ジョブの進行状況を監視します。 最初にイメージをプルしてデータセットを処理するには、数分かかる場合があります。

    kubectl get jobs samples-tf-mnist-demo --watch
    

    次の出力例に示すように、COMPLETIONS 列に 1/1 と表示されている場合、ジョブは正常に完了しました。

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. kubectl --watch プロセスを終了します。

  3. kubectl get pods コマンドを使用してポッドの名前を取得します。

    kubectl get pods --selector app=samples-tf-mnist-demo
    

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

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

kubectl delete jobs samples-tf-mnist-demo

次のステップ