特定の NVIDIA GPU は、最大 7 つの独立したインスタンスに分割できます。 各インスタンスには、命令を並列で実行する独自のストリーミング マルチプロセッサ (SM) と GPU メモリがあります。 GPU パーティション分割の詳細については、「 NVIDIA MIG」を参照してください。
AKS クラスターでシングル戦略のマルチインスタンス GPU (MIG) を使用して、均一サイズの GPU パーティションでワークロードを実行します。 各ワークロードは nvidia.com/gpuを要求します。1 つのユニットが物理 GPU 全体ではなく 1 つのパーティションを表します。 AKS は、この方法では NVIDIA ドライバーとデバイス プラグインをインストールして構成します。 戦略の選択とリソースの名前付けについては、AKS のマルチインスタンス GPU 戦略を参照してください。 異なるサイズのパーティションを作成するには、「混合 MIG 戦略を構成する」を参照してください。
この記事では、Azure Kubernetes Service (AKS) クラスターで互換性のある VM サイズを使用して、MIG ノード プールで単一戦略を設定する方法について説明します。
重要
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
Limitations
-
AzureContainerLinuxとWindowsOS SKU を持つノード プールは、現在、この機能ではサポートされていません。 - MIG ノード プールの作成後にプロファイル構成を変更することはできません。 代替プールを作成してレイアウトを変更するか、MIG の使用を停止します。 戦略を
Noneに更新して MIG を無効にしないでください。
始める前の準備
- Azure サブスクリプション。 お持ちでない場合は、Azure無料アカウントを作成してください。
- Azure CLI バージョン
2.85.0以降とaks-previewのバージョン22.0.0b15以降をインストールします。az --versionを実行して、Azure CLIのバージョンを確認します。 - 選択した AKS リージョンで使用可能なサポートされている MIG 対応 GPU VM サイズ。 デプロイする予定の VM サイズとノード数に対して十分なリージョンと GPU ファミリの vCPU クォータがあることを確認します。
- 既存のセルフマネージド NVIDIA デバイス プラグインまたは GPU オペレーターが、新しい MIG ノード プールのノードも管理していないことを確認します。
均一な GPU プロファイルを選択する
AKS が均一なパーティション レイアウトを作成できるように、 Single のプロファイルを 1 つだけ指定します。 次の表に、NVIDIA A100 80 GB GPU のプロファイルを示します。 カウントは、ノードごとではなく、物理 GPU ごとに行われます。
Standard_NC24ads_A100_v4 には 1 つの A100 80 GB GPU があるため、 MIG3g はその VM サイズで 2 つのパーティションを提供します。
| Profile 引数 | Partition | 計算割合 | メモリの割合 | GPU あたりのパーティション数 |
|---|---|---|---|---|
MIG1g |
1g.10gb | 1/7 | 1/8 | 7 |
MIG2g |
2g.20gb | 2/7 | 2/8 | 3 |
MIG3g |
3g.40gb | 3/7 | 4/8 | 2 |
MIG4g |
4g.40gb | 4/7 | 4/8 | 1 |
MIG7g |
7g.80gb | 7月7日 | 8/8 | 1 |
プロファイルごとの GPU メモリは、NVIDIA GPU モデルによって異なります。 GPU 構成を確認せずに、このテーブルのメモリ サイズまたはノード数を別の SKU に適用しないでください。
環境変数を設定し、Azure サブスクリプションを準備する
export SUBSCRIPTION_ID="<subscription-id>"
export RESOURCE_GROUP="<my-resource-group>"
export CLUSTER_NAME="<my-cluster-name>"
export SINGLE_POOL="migsingle"
Azure サブスクリプションを選択:
az account set --subscription "$SUBSCRIPTION_ID"
AKS クラスターに接続する:
az aks get-credentials \
--resource-group "$RESOURCE_GROUP" \
--name "$CLUSTER_NAME"
プレビュー機能を登録する
必要な拡張機能をインストールまたは更新します。
az extension add --name aks-preview --upgrade --yes
ManagedGPUExperiencePreview機能を登録:
az feature register \
--namespace Microsoft.ContainerService \
--name ManagedGPUExperiencePreview
MixedMIGStrategyPreview機能を登録します。
az feature register \
--namespace Microsoft.ContainerService \
--name MixedMIGStrategyPreview
各登録を確認します。
az feature show \
--namespace Microsoft.ContainerService \
--name ManagedGPUExperiencePreview \
--query properties.state --output tsv
az feature show \
--namespace Microsoft.ContainerService \
--name MixedMIGStrategyPreview \
--query properties.state --output tsv
両方とも Registered が返された後、プロバイダーの登録を再度確認します。
az provider register --namespace Microsoft.ContainerService
新しいノード プールで単一戦略 MIG を有効にする
既定の OS SKU を使用するには、OS SKU を指定せずにノード プールを作成します。 ノード プールは、クラスターの Kubernetes バージョンに基づき、既定のオペレーティング システムに対して設定されます。
--enable-managed-gpu=trueと 1 つの MIG プロファイルを使用して、均一プールを作成します。
az aks nodepool add \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$SINGLE_POOL" \
--node-vm-size Standard_NC24ads_A100_v4 \
--enable-managed-gpu=true \
--gpu-mig-strategy Single \
--gpu-mig-profiles MIG3g \
--node-count 1
構成と GPU パーティションの容量を確認する
マネージド GPU 設定、プロファイル リスト、および AKS ノード イメージを確認します。
az aks nodepool show \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$SINGLE_POOL" \
--query "{state:provisioningState,image:nodeImageVersion,gpu:gpuProfile.nvidia}" \
--output json
出力内で、次の値を確認してください。 GPU 値は、 gpu キーの下に表示されます。
| 出力フィールド | 予測値 |
|---|---|
state |
Succeeded |
gpu.managementMode |
Managed |
gpu.driverMode |
DevicePlugin |
gpu.migStrategy |
Single |
gpu.migProfiles |
この例では MIG3g で指定したプロファイルのみ |
image |
--gpu-mig-profiles に必要な 202609.01.0 以降のノード イメージ VHD バージョン |
プールのノードが 準備完了になるまで待ちます。
kubectl wait --for=condition=Ready node \
-l agentpool="$SINGLE_POOL" --timeout=600s
ノード プール内のすべてのノードを確認してください:
kubectl describe nodes -l agentpool="$SINGLE_POOL"
MIG3g プロファイルを持つ 1 つのStandard_NC24ads_A100_v4 ノード (1 つの A100 80 GB GPU、2 つのパーティションを提供) の場合、Allocatableセクションには次のものが含まれている必要があります。
Allocatable:
nvidia.com/gpu: 2
各ユニットの容量は 3g.40gb MIG パーティション 1 つ分です。
1 つの MIG パーティションでワークロードを実行する
次のマニフェストを使用して single-strategy-example.yaml を作成します。 ノード プール名を変更した場合は、セレクターを更新します。
apiVersion: v1
kind: Pod
metadata:
name: nvidia-single
spec:
restartPolicy: Never
nodeSelector:
agentpool: migsingle
containers:
- name: gpu-test
image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: "1"
フル GPU プールでも nvidia.com/gpuをアドバタイズできるため、セレクターは重要です。 Kubernetes は、省略された要求を拡張リソース制限と同じとして扱います。 両方を設定する場合は、等しい整数の値を使用します。
ポッドをデプロイする:
kubectl apply -f single-strategy-example.yaml
正常に完了するまで待つ:
kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \
pod/nvidia-single --timeout=300s
デバイス情報を読み取ります。
kubectl logs nvidia-single
nvidia-smiがエラーなしで実行され、割り当てられたMIGデバイスを報告していることを確認します。 明示的なデバイス一覧チェックの場合は、サンプル コマンドを ["nvidia-smi", "-L"] に変更し、完了したポッドを削除して、マニフェストをもう一度適用します。 完了待機とログ チェックを繰り返します。
Standard_NC24ads_A100_v4とMIG3g プロファイルでは、ログに、割り当てられた3g.40gb MIG デバイスが 1 つ一覧表示されます。
検証と既存機能の互換性を理解する
単一戦略 MIG を構成する方法を比較する
--gpu-instance-profile機能は、独自の NVIDIA GPU デバイス プラグインの構成に引き続き利用可能です。 次のオプションでは、GPU レイアウト構成とデバイス プラグインの所有権を分離します。
| 構成パス | プール作成時のAzure CLI設定 | デバイス プラグインの戦略と所有者 | API表現 |
|---|---|---|---|
| ユーザーが構成したプラグインを使用する既存のプロファイル |
--gpu-instance-profile <profile> マネージド GPU エクスペリエンスを有効にせずに。 |
migStrategy=singleを使用して、セルフマネージド NVIDIA デバイス プラグインをインストールして構成します。 |
gpuInstanceProfile は、均一なレイアウトを指定します。 セルフマネージド デバイス プラグインの migStrategy 設定は、新しい AKS プロファイルリスト設定として保存されません。 セルフマネージド デバイス プラグインのライフサイクルについては、引き続き責任を負います。 |
| マネージド デバイス プラグインを使用した既存のプロファイル |
--enable-managed-gpu=true --gpu-instance-profile <profile>。 |
AKS は、統一された単一戦略パスのプラグインを管理します。個別のプラグインの変更は必要ありません。 |
--gpu-instance-profile フィールドは引き続き表示されます。
migStrategyのみが指定されている場合、API は--gpu-instance-profileまたはmigProfilesを合成しません。 |
| マネージド プラグインを使用したプロファイル リスト |
--enable-managed-gpu=true --gpu-mig-strategy Single --gpu-mig-profiles <profile>。 プロファイルを 1 つだけ指定します。 |
AKS は、 Single用にマネージド NVIDIA デバイス プラグイン プラグインを構成します。手動で構成する必要はありません。 |
gpuProfile.nvidia.migStrategy と gpuProfile.nvidia.migProfiles は構成を明示的に記述します。 |
3 つの単一戦略パスはすべて、NVIDIA GPU ノード プールで構成されている場合、パーティションを nvidia.com/gpu として公開します。 リソース名だけでは、パーティション サイズや AKS がプラグインを管理しているかどうかは識別されません。
MIG プロファイルの構成を検証する
- パーティション数を指定するためにエントリを繰り返すのではなく、
--gpu-mig-profiles用にSingleに指定するプロファイル値を正確に 1 つだけ指定します。 -
--gpu-instance-profileフラグも指定しないでください。 同じ MIG ノード プールで--gpu-instance-profileと--gpu-mig-profilesを組み合わせることはできません。
--gpu-instance-profile フラグは 1 つの戦略で引き続きサポートされ、AKS では自動的に --gpu-mig-profiles に変換されません。
--gpu-mig-strategyと--gpu-mig-profilesで作成された新しいノード プールを確認するには、az aks nodepool showを実行し、gpuProfile.nvidia.migStrategyとgpuProfile.nvidia.migProfilesを確認します。
マネージド MIG プロファイルを使用するように移行する
現在のプールの VM サイズ、
gpuInstanceProfile、ノード イメージ、およびアドバタイズされたパーティション容量を棚卸しします。 ワークロード セレクター、アフィニティ、テイント、トレランス、GPU 要求を記録します。 既存の NVIDIA デバイス プラグインまたは GPU オペレーターが他のノード プールに対応しているかどうかを確認します。セルフマネージド NVIDIA デバイス プラグインと GPU オペレーターが、置換 MIG プールのノードに対して再調整を行わないことを確認します。 インストールでサポートされている構成を使用して、ノードのターゲティングを調整します。
別の名前を持つ置換 MIG ノード プールを作成します。 たとえば、
MIG3gでStandard_NC24ads_A100_v4レイアウトを保持するには、次のコマンドを使用します。 サポートされている SKU と、移行計画に合致する単一のプロファイルに置き換えてください。--gpu-instance-profileを渡さないでください。az aks nodepool add \ --resource-group "$RESOURCE_GROUP" \ --cluster-name "$CLUSTER_NAME" \ --name migreplacement \ --node-vm-size Standard_NC24ads_A100_v4 \ --enable-managed-gpu=true \ --gpu-mig-strategy Single \ --gpu-mig-profiles MIG3g \ --node-count 1この記事の構成、レディネス、容量、ワークロードのチェックを
migreplacementに対して実行します。 サンプル セレクターをagentpool: migreplacementに更新します。 アプリケーション ワークロードを移動する前に、予想されるパーティション サイズとデバイス アクセスを確認します。プール セレクターまたはアフィニティと必要な Toleration を更新して、ワークロードを段階的に移動します。 単一戦略ワークロードは引き続き
nvidia.com/gpuを要求します。 置き換えプールでのアプリケーションの動作、スループット、待機時間、およびメモリ使用量を確認します。交換を確認した後、古いノードプールのワークロードをドレインまたは廃止し、それを削除します。 容量に余裕がある場合は、移行の検証が完了するまで、古いプールを使用可能な状態に保ちます。 セルフマネージド NVIDIA デバイス プラグインのインストールは、それを必要とする残りのプールがないことを確認した後でのみ削除します。
ノード プールのトラブルシューティングと削除
スケジューリングとパーティションアドバタイズのトラブルシューティング
対象となるノードが提供できるよりも多くの nvidia.com/gpu リソースを要求するポッドは、リソース不足のスケジューリング イベントが発生したまま、保留中のままです。 その状態とイベントを調べる:
kubectl describe pod nvidia-single
ノードがパーティションを通知しない場合は、ノードの条件、管理設定、選択したイメージとプロファイルを調べます。 回避策として、2 つ目のプラグインをインストールしたり、AKS で管理されるコンポーネントにパッチを適用したりしないでください。
ノード プールを作成すると、次のエラーが発生する可能性があります。
| エラー コード | Cause | Resolution |
|---|---|---|
MIGNotSupportedForVMSize |
VM サイズは MIG をサポートしていません。 | サポートされている MIG 対応 GPU VM サイズを使用します。 |
InvalidOrNoneMIGProfile |
プロファイルが無効であるか、None を指定しました。 |
VM サイズに対して有効な MIG プロファイルを 1 つだけ指定します。 |
MIGProfilesNodeImageNotSupported |
AKS ノード イメージが、サポートされている最小バージョンより古い。 |
202609.01.0 以降のノード イメージ バージョンを使用します。 |
Azure CLIBadRequestを最上位のコードとして表示する場合があるため、検証メッセージも読んでください。
サンプル ポッドと MIG ノード プールを削除する
サンプル ポッドを削除します。
kubectl delete pod nvidia-single --ignore-not-found=true
他のワークロードを実行するノード プールを削除する前に、代替容量を作成し、ワークロードを移行し、アプリケーションの正常性を確認します。 次に、ノード プールを削除します。
az aks nodepool delete \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--name "$SINGLE_POOL"
MIG ノード プールが削除されていることを確認します。
az aks nodepool list \
--resource-group "$RESOURCE_GROUP" \
--cluster-name "$CLUSTER_NAME" \
--query "[?name=='$SINGLE_POOL'].name" --output json
出力は [] であるはずです。 プールに対して Kubernetes ノードが残っていないことを確認します。
kubectl get nodes -l agentpool="$SINGLE_POOL"
次のステップ
- AKS の単一および混合の MIG パーティション分割戦略を比較します。
- 混合 MIG 戦略 (プレビュー) を構成します。
- マネージド GPU ノードの詳細を確認します。