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 CLI、Azure PowerShell、または Azure portal を使用して作成します。
az aks nodepool add
コマンドで--skip-gpu-driver-install
フィールドを使用するように Azure CLI バージョン 1.0.0b2 以降をインストールして構成する必要があります。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。- Azure CLI バージョン 9.0.0b5 以降をインストールして、
az aks nodepool add
コマンドで--driver-type
フィールドを使用するように構成する必要があります。 バージョンを確認するには、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
機能フラグを登録する
az feature register
コマンドを使用して、WindowsGPUPreview
機能フラグを登録します。az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
状態が [登録済み] と表示されるまでに数分かかります。
az feature show
コマンドを使用して、登録の状態を確認します。az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
状態が Registered と表示されたら、
az provider register
コマンドを使用して Microsoft.ContainerService リソース プロバイダーの登録を最新の情報に更新します。az provider register --namespace Microsoft.ContainerService
Windows GPU 対応ノード プールを作成する (プレビュー)
Windows GPU 対応ノード プールを作成するには、サポートされている GPU 対応 VM サイズを使用し、Windows
として os-type
を指定する必要があります。 既定の Windows os-sku
は Windows2022
ですが、すべての Windows os-sku
オプションがサポートされています。
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
GPU がスケジュール可能であることを確認します。
GPU がスケジュール可能であることを確認したら、GPU ワークロードを実行できます。
GPU ドライバーの種類を指定する (プレビュー)
AKS の既定では、サポートされている GPU 対応 VM ごとに既定の GPU ドライバーの種類が指定されます。 GPU ワークロードが機能するにはワークロードとドライバーの互換性が重要であるため、Windows GPU ノードのドライバーの種類を指定できます。 この機能は、Linux GPU ノード プールではサポートされていません。
GPU をサポートする Windows エージェント プールを作成する場合、--driver-type
フラグを使用して GPU ドライバーの種類を指定するオプションがあります。
使用可能なオプションは次のとおりです。
- GRID: 仮想化のサポートを必要とするアプリケーションの場合。
- CUDA: 科学コンピューティングとデータ集約型アプリケーションの計算タスク用に最適化されています。
Note
--driver-type
フラグを設定した場合、選択したドライバーの種類が特定の VM サイズやノード プールの構成と互換性があることは、お客様が確認する必要があります。 AKS は互換性の検証を試みますが、指定したドライバーの種類と、基となる VM またはハードウェア間に互換性がないことが原因でノード プールの作成が失敗するシナリオがあります。
GPU ドライバーの種類を指定して Windows GPU 対応ノード プールを作成するには、az aks nodepool add
コマンドを使用します。
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 \
--driver-type GRID
たとえば、上記のコマンドを実行すると、GRID
GPU ドライバーの種類を使用して GPU 対応ノード プールを作成できます。 このドライバーの種類を選択すると、NC シリーズ VM SKU の既定の CUDA
ドライバーの種類がオーバーライドされます。
Windows GPU を使用し、ドライバーは手動インストールにする
AKS で N シリーズ (NVIDIA GPU) VM サイズの Windows ノード プールを作成すると、GPU ドライバーと Kubernetes DirectX デバイス プラグインが自動的にインストールされます。 この自動インストールをバイパスするには、次の手順に従います。
--skip-gpu-driver-install
を使用して GPU ドライバーのインストールをスキップする (プレビュー)- Kubernetes DirectX デバイス プラグインの手動インストール。
GPU ドライバーのインストールをスキップする (プレビュー)
AKS では、GPU ドライバーの自動インストールが既定で有効になっています。 独自のドライバーをインストールするなどの場合、GPU ドライバーのインストールをスキップすることがあります。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。 詳細については、次のサポート記事を参照してください。
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
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 デバイス プラグインをデプロイする
kubectl create namespace
コマンドを使って名前空間を作成します。kubectl create namespace gpu-resources
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
DaemonSet を作成し、
kubectl apply
コマンドを使って NVIDIA デバイス プラグインが正常に作成されたことを確認します。kubectl apply -f nvidia-device-plugin-ds.yaml
これで NVIDIA デバイス プラグインが正常にインストールされたので、GPU がスケジュール可能であることを確認できます。
GPU がスケジュール可能であることを確認する
クラスターを作成したら、Kubernetes で GPU がスケジュール可能であることを確認します。
kubectl get nodes
コマンドを使用して、クラスター内のノードを一覧表示します。kubectl get nodes
出力は次の出力例のようになります。
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
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/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
過去のサンプリング期間 (60 秒) 中に、コンテナーに対して GPU がビジーであるかアクティブに処理を行っていた時間の割合。 デューティ サイクルは 1 から 100 までの値です。 |
containerGpuLimits | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName |
各コンテナーでは、1 つまたは複数の GPU として制限を指定できます。 GPU の一部を要求または制限することはできません。 |
containerGpuRequests | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName |
各コンテナーでは、1 つまたは複数の GPU を要求できます。 GPU の一部を要求または制限することはできません。 |
containerGpumemoryTotalBytes | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
特定のコンテナーに使用できる GPU メモリの量 (バイト)。 |
containerGpumemoryUsedBytes | container.azm.ms/clusterId 、container.azm.ms/clusterName 、containerName 、gpuId 、gpuModel 、gpuVendor |
特定のコンテナーに使用された GPU メモリの量 (バイト)。 |
nodeGpuAllocatable | container.azm.ms/clusterId 、container.azm.ms/clusterName 、gpuVendor |
Kubernetes で使用できるノード内の GPU の数。 |
nodeGpuCapacity | container.azm.ms/clusterId 、container.azm.ms/clusterName 、gpuVendor |
ノード内の GPU の合計数。 |
リソースをクリーンアップする
kubectl delete job
コマンドを使用して、この記事で作成した関連する Kubernetes オブジェクトを削除します。kubectl delete jobs windows-gpu-workload
次のステップ
- Apache Spark ジョブを実行するには、AKS での Apache Spark ジョブの実行に関する記事を参照してください。
- Kubernetes スケジューラの機能の詳細については、「Azure Kubernetes Service (AKS) での高度なスケジューラ機能に関するベスト プラクティス」を参照してください。
- Azure Kubernetes Service と Azure Machine Learning の詳細については、次を参照してください。
Azure Kubernetes Service