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 対応ノード プールの更新はサポートされていません。
-
AzureLinux、Windows、AzureLinuxOSGuard、およびflatcarは、AMD GPU ではサポートされていません。
開始する前に
- この記事は、AKS クラスターがすでに存在していることを前提としています。 クラスターがない場合は、Azure CLI、Azure PowerShell、または Azure portal を使用して作成します。
-
--gpu-driverフィールドを設定するには、Azure CLI バージョン 2.72.2 以降がインストールされている必要があります。 バージョンを確認するには、az --versionを実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。 -
aks-previewAzure 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 機能を登録する
の名前付け規則 ( など) を使用して AMD GPU VM サイズが RDMA 対応の場合は、ノード プール内のマシンが同じ物理 Infiniband ネットワーク上に存在することを確認する必要があります。 これを実現するには、
AKSInfinibandSupportコマンドを使用してaz feature register機能フラグを登録します。az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService次のように
az feature showコマンドを使用して、登録状態を確認します。az feature show \ --namespace "Microsoft.ContainerService" \ --name AKSInfinibandSupportaz aks nodepool addコマンドを使用して AMD GPU 対応ノード プールを作成し、API フィールド--gpu-driver値none設定して、既定のドライバーのインストールをスキップします。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 ドライバーの自動インストールをスキップする必要があることを意味します。
AMD のドキュメントに従って GPU オペレーターをインストールします。
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 がスケジュール可能であることを確認します。
kubectl get nodesコマンドを使用して、クラスター内のノードを一覧表示します。kubectl get nodeskubectl describe nodeコマンドを使用して GPU がスケジュール可能であることを確認します。kubectl describe node aks-gpunp-00000000Capacity セクションで、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 ジョブを実行します。
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"kubectl applyコマンドを使用してジョブを実行します。これにより、マニフェスト ファイルが解析され、定義された Kubernetes オブジェクトが作成されます。kubectl apply -f samples-tf-mnist-demo.yaml
GPU 対応ワークロードの状態を表示する
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 3m36skubectl --watchで プロセスを終了します。kubectl get podsコマンドを使用してポッドの名前を取得します。kubectl get pods --selector app=samples-tf-mnist-demo
リソースをクリーンアップする
kubectl delete job コマンドを使用して、この記事で作成した関連する Kubernetes オブジェクトを削除します。
kubectl delete jobs samples-tf-mnist-demo
次のステップ
- AKS 上の GPU ベースのアプリケーションのさまざまな ストレージ オプション について説明します。
- AKS 上の Ray クラスターの詳細を確認します。
- コンピューティング集中型の AKS ワークロードには NVIDIA GPU を 使用します。