コンピューティング集中型ワークロードに GPU を使用する (AKS on Azure Stack HCI 23H2)
適用対象: Azure Stack HCI バージョン 23H2
注意
AKS on Azure Stack HCI 22H2 の GPU の詳細については、「 GPU の使用 (HCI 22H2)」を参照してください。
グラフィカル処理ユニット (GPU) は、機械学習、ディープ ラーニングなどのコンピューティング集中型ワークロードに使用されます。 この記事では、Azure Arc で有効になっている AKS でコンピューティング集中型ワークロードに GPU を使用する方法について説明します。
サポートされている GPU モデル
AKS on Azure Stack HCI 23H2 では、次の GPU モデルがサポートされています。
製造元 | GPU モデル | サポートされているバージョン |
---|---|---|
Nvidia | A2 | 2311.2 |
Nvidia | A16 | 2402.0 |
サポートされる VM のサイズ
AKS on Azure Stack HCI 23H2 では、GPU モデルごとに次の VM サイズがサポートされています。
Nvidia A2 は NC2 A2 SKU でサポートされています
VM サイズ | GPU | GPU メモリ: GiB | vCPU | メモリ:GiB |
---|---|---|---|---|
Standard_NC4_A2 | 1 | 16 | 4 | 8 |
Standard_NC8_A2 | 1 | 16 | 8 | 16 |
Standard_NC16_A2 | 2 | 48 | 16 | 64 |
Standard_NC32_A2 | 2 | 48 | 32 | 28 |
Nvidia A16 は NC2 A16 SKU でサポートされています
VM サイズ | GPU | GPU メモリ: GiB | vCPU | メモリ:GiB |
---|---|---|---|---|
Standard_NC4_A16 | 1 | 16 | 4 | 8 |
Standard_NC8_A16 | 1 | 16 | 8 | 16 |
Standard_NC16_A16 | 2 | 48 | 16 | 64 |
Standard_NC32_A16 | 2 | 48 | 32 | 28 |
開始する前に
AKS Arc で GPU を使用するには、クラスターのデプロイを開始する前に、必要な GPU ドライバーをインストールしていることを確認してください。 このセクションの手順に従います。
手順 1: OS をインストールする
Azure Stack HCI クラスター内の各サーバーに、Azure Stack HCI バージョン 23H2 オペレーティング システムをローカルにインストールします。
手順 2: NVIDIA 軽減ドライバーをダウンロードしてインストールする
このソフトウェアには、NVIDIA Corporation またはそのライセンサーによって開発および所有されているコンポーネントが含まれる場合があります。 これらのコンポーネントの使用は、 NVIDIA エンド ユーザー ライセンス契約によって管理されます。
NVIDIA 軽減ドライバーをダウンロードするには、 NVIDIA データ センターのドキュメントを参照してください 。 ドライバーをダウンロードした後、アーカイブを展開し、各ホスト コンピューターに軽減ドライバーをインストールします。
Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\
軽減ドライバーをインストールするには、抽出されたファイルが含まれているフォルダーに移動し、Azure Stack HCI ホストにインストールされている実際の GPU の種類に基づいて GPU ドライバー ファイルを選択します。 たとえば、種類が A2 GPU の場合は、 nvidia_azure_stack_A2_base.inf ファイルを右クリックし、[インストール] を選択 します。
フォルダーに移動し、次のコマンドを実行して軽減ドライバーをインストールすることで、コマンド ラインを使用してインストールすることもできます。
pnputil /add-driver nvidia_azure_stack_A2_base.inf /install
pnputil /scan-devices
軽減ドライバーをインストールすると、GPU は [Nvidia A2_base - マウント解除] の下の [OK] 状態に一覧表示されます。
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
手順 3: 手順 1 と 2 を繰り返す
HCI クラスター内のサーバーごとに手順 1 と 2 を繰り返します。
手順 4: Azure Stack HCI クラスターのデプロイを続行する
Azure Stack HCI バージョン 23H2 デプロイの手順に従って、Azure Stack HCI クラスターのデプロイを続行します。
使用可能な GPU 対応 VM SKU の一覧を取得する
Azure Stack HCI クラスターのデプロイが完了したら、次の CLI コマンドを実行して、デプロイで使用可能な VM SKU を表示できます。 GPU ドライバーが正しくインストールされている場合は、対応する GPU VM SKU が一覧表示されます。
az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>
GPU 対応ノード プールを使用して新しいワークロード クラスターを作成する
現在、GPU 対応ノード プールの使用は Linux ノード プールでのみ使用できます。 新しい Kubernetes クラスターを作成するには:
az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>
次の例では、 STANDARD_NC4_A2 VM SKU を持つ 2 つの GPU 対応 (NVDIA A2) ノードを持つノード プールを追加します。
az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux
GPU をスケジュールできることを確認する
GPU ノード プールを作成したら、Kubernetes で GPU をスケジュールできることを確認します。 まず、kubectl get nodes コマンドを使用して、クラスター内のノードを一覧表示します。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
moc-l9qz36vtxzj Ready control-plane,master 6m14s v1.22.6
moc-lhbkqoncefu Ready <none> 3m19s v1.22.6
moc-li87udi8l9s Ready <none> 3m5s v1.22.6
次に、 kubectl describe node コマンドを使用して、GPU をスケジュールできることを確認します。 [ 容量 ] セクションでは、GPU は nvidia.com/gpu: 1 として表示されます。
kubectl describe <node> | findstr "gpu"
出力にはワーカー ノードからの GPU が表示され、次のようになります。
Capacity:
cpu: 4
ephemeral-storage: 103110508Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7865020Ki
nvidia.com/gpu: 1
pods: 110
GPU 対応ワークロードの実行
前の手順を完了したら、テスト用の新しい YAML ファイルを作成します。たとえば、 gpupod.yaml です。 次の YAML をコピーし、 gpupod.yaml という名前の新しいファイルに貼り付けて保存します。
apiVersion: v1
kind: Pod
metadata:
name: cuda-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
次のコマンドを実行して、サンプル アプリケーションをデプロイします。
kubectl apply -f gpupod.yaml
ポッドが起動し、実行が完了し、GPU が割り当てられていることを確認します。
kubectl describe pod cuda-vector-add | findstr 'gpu'
前のコマンドには、1 つの GPU が割り当てられている必要があります。
nvidia.com/gpu: 1
nvidia.com/gpu: 1
ポッドのログ ファイルを確認して、テストに合格したかどうかを確認します。
kubectl logs cuda-vector-add
前のコマンドからの出力例を次に示します。
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
ドライバーを呼び出すときにバージョンの不一致エラーが発生する場合 ("CUDA ドライバーのバージョンは CUDA ランタイム バージョンでは不十分です" など)、 NVIDIA ドライバー マトリックスの互換性グラフを確認してください。
よく寄せられる質問
GPU 対応ノード プールのアップグレード中はどうなりますか?
GPU 対応ノード プールのアップグレードは、通常のノード プールに使用されるのと同じローリング アップグレード パターンに従います。 新しい VM 内の GPU 対応ノード プールを物理ホスト コンピューターで正常に作成するには、デバイスの割り当てを成功させるために 1 つ以上の物理 GPU を使用できる必要があります。 この可用性により、Kubernetes がこのアップグレードされたノードでポッドをスケジュールするときに、アプリケーションの実行を継続できます。
アップグレードする前に:
- アップグレード中のダウンタイムを計画します。
- Standard_NK6を実行している場合は物理ホストごとに 1 つの GPU を追加し、Standard_NK12を実行している場合は 2 つの GPU を追加します。 フル 容量で実行していて、追加の GPU がない場合は、アップグレードの前にノード プールを 1 つのノードにスケールダウンしてから、アップグレードが成功した後にスケールアップすることをお勧めします。
アップグレード中に物理マシンに追加の物理 GPU がない場合はどうなりますか?
ローリング アップグレードを容易にするために GPU リソースが追加されていないクラスターでアップグレードがトリガーされた場合、GPU が使用可能になるまでアップグレード プロセスがハングします。 フル 容量で実行し、追加の GPU がない場合は、アップグレードの前にノード プールを 1 つのノードにスケールダウンしてから、アップグレードが成功した後にスケールアップすることをお勧めします。
次の手順
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示