Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

GPU アクセラレーションコンテナを実行する (EC2 G シリーズでの Windows)

フォーカスモード
GPU アクセラレーションコンテナを実行する (EC2 G シリーズでの Windows) - アマゾン EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

重要

TensorWorks による DirectX 用 Kubernetes Device Plugin は、AWS によって承認、サポート、または保守されていないサードパーティーのツールです。AWS は、このプラグインのセキュリティ、信頼性、またはパフォーマンスについて責任を負いません。

TensorWorks の DirectX 用 Kubernetes デバイスプラグインで NVIDIA GPU を使用して、Amazon EKS (Elastic Kubernetes Service) で GPU アクセラレーション Windows コンテナワークロードを実行する方法について説明します。詳細については、「Kubernetes Device Plugin for DirectX」を参照してください。

Windows コンテナの GPU アクセラレーションをセットアップするには、主に 2 つの方法があります。

  • オプション 1: 必要な GPU ドライバーがプリインストールされたカスタム EKS Windows 最適化 AMI を構築します。

    • このアプローチは、GPU アクセラレーションされた Windows コンテナをすぐに実行できる、一貫性のある事前設定済みの環境が必要で、カスタム AMI を構築して維持するために追加の労力を費やすことができる場合に使用します。

  • オプション 2: インスタンスの起動後に、必要な GPU ドライバーを EKS ワーカーノードにインストールします。

    • このアプローチは、より簡単なセットアッププロセスが必要で、新しいワーカーノードそれぞれに GPU ドライバーをインストールしたくない場合に使用します。GPU アクセラレーションのワークロードを評価またはプロトタイプ化する開発環境により適しています。

どちらのアプローチも、本ガイドで説明されているステップで活用することができます。

考慮事項

本ガイドでは、NVIDIA GPU、NVIDIA GRID ドライバー、および TensorWorks による DirectX 用 Kubernetes デバイスプラグインを使用して、Windows コンテナの GPU アクセラレーションをインストールしてセットアップする手順について説明します。これらのステップは、Amazon EKS の Windows コンテナワークロードに GPU アクセラレーションを提供するようにテストおよび検証されています。互換性のあるドライバーとデバイスプラグインの詳細については、「既知の制限事項」を参照してください。先に進める前に、次の点に注意してください。

  • NVIDIA GRID ドライバーを使用する G ファミリーインスタンスタイプのみが、本ガイドで動作することがテストおよび検証されています。他のインスタンスタイプとドライバーの組み合わせでも GPU アクセラレーション Windows コンテナを実行できる場合がありますが、本ガイドでは説明されていない追加の設定手順が必要になる場合があります。

  • DirectX ベースのワークロードのみが、本ガイドで動作することがテストおよび検証されています。OpenGL、Vulkan、OpenCL などの他の GPU API でも、GPU アクセラレーションされた Windows コンテナの実行と互換性がある可能性がありますが、このガイドでは説明されていない追加の設定手順が必要になる場合があります。

  • GPU アクセラレーション Windows コンテナを実行する前に注意すべき既知の制限がいくつかあります。詳細については、既知の制限事項 のセクションを参照してください。

前提条件

Amazon EKS で Windows コンテナの GPU アクセラレーションを有効にするには、手順を進める前に次の要件を準備する必要があります。

  • Kubernetes v1.27 以降で Amazon EKS クラスターを起動します。

  • Windows Server 2022 以降で Windows ノードをプロビジョニングします。

  • G4G5 などのインスタンスタイプの G ファミリーで Windows ノードをプロビジョニングします。

  • containerd 1.7.x または 2.x.x でコンテナランタイムを使用して Windows ノードをプロビジョニングします。(Amazon EKS 最適化 AMI 内の containerd バージョンを確認するには、「Windows AMI バージョンに関する情報を取得する」を参照してください。)

各 Windows ノードに GPU ドライバーをインストールする

EKS ワーカーノードに NVIDIA GRID ドライバーをインストールするには、Amazon EC2 インスタンスの NVIDIA ドライバーで説明されているステップに従ってください。インストールオプション - オプション 3: GRID ドライバーに移動し、インストール手順に従ってください。

Windows Server Core のためのインストール

デスクトップエクスペリエンスのない Windows Server Core の場合は、次のコマンドを使用して NVIDIA GRID ドライバーをサイレントインストールします。

$nvidiaInstallerFilePath = nvidia-driver-installer.exe # Replace with path to installer $installerArguments = "-s -clean -noreboot -noeula" Start-Process -FilePath $nvidiaInstallerFilePath -ArgumentList $installerArguments -Wait -NoNewWindow -PassThru

インストールを確認する

次の PowerShell コマンドを実行して、インスタンスの GPU に関する診断情報を表示します。

nvidia-smi

このコマンドは、NVIDIA ドライバーのバージョンと GPU ハードウェアに関する情報を表示します。このコマンドの出力が、インストールされると想定している NVIDIA GRID ドライバーのバージョンと一致することを確認します。

各ノードに GPU デバイスプラグインをデプロイする

GPU リソースの検出と Windows ノード上のコンテナへの公開を有効にするには、デバイスプラグインが必要になります。EKS クラスターで DaemonSet として実行することで、各ワーカーノードに Tensorworks による DirectX デバイスプラグインをデプロイします。README.md で指定されているインストールガイドに従ってください。これには、次のステップが求められます。以下を行うことをお勧めします。

  • デバイスプラグインを kube-system 名前空間にデプロイします。

  • DaemonSet に適切なリソース制限を設定して、ノードでリソースを過剰に消費しないようにします。

注記

デバイスプラグイン DaemonSet は、昇格された権限を持つホストプロセスコンテナとしてすべてのノードで実行されます。この DaemonSet へのアクセスを制限する RBAC コントロールを実装して、権限のあるユーザーのみが特権コマンドを実行できるようにすることをお勧めします。

GPU アクセラレーションコンテナを実行する場合、デバイスプラグインは 2 つのモードをサポートします。

  • シングルテナンシーモード: このモードは、すべての GPU リソースをインスタンス上の 1 つのコンテナ専用にします。次のコマンドを使用して、シングルテナンシーをサポートするデバイスプラグインをインストールします。詳細については、「README.md」を参照してください。

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/default-daemonsets.yml"
  • マルチテナンシーモード: このモードでは、インスタンス上の複数のコンテナ間で GPU リソースを共有できます。次のコマンドを使用して、マルチテナンシーをサポートするデバイスプラグインをインストールします。詳細については、「README.md」を参照してください。

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-inline.yml"

    または、ConfigMap を使用してマルチテナンシーを指定します。

    kubectl apply -f "https://raw.githubusercontent.com/TensorWorks/directx-device-plugins/main/deployments/multitenancy-configmap.yml"

デバイスプラグインのデプロイの検証

デバイスプラグインをデプロイしたら、次のコマンドを実行して、DirectX Device Plugin がすべての Windows ノードで正しく実行されていることを確認します。

kubectl get ds device-plugin-wddm -n <namespace>

コンテナをデプロイする準備が整っていることの検証

デバイスプラグイン DaemonSet が GPU 搭載の Windows ワーカーノードで実行されると、次のコマンドを使用して、各ノードに割り当て可能な GPU があることを確認します。対応する番号は、各ノードの DirectX デバイスの番号と一致する必要があります。

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,DirectX:.status.allocatable.directx\.microsoft\.com/display"

GPU アクセラレーションを使用した Windows コンテナの実行

ポッドを起動する前に、.spec.containers[].resources でリソース名 directx.microsoft.com/display を指定します。これは、コンテナに GPU が対応している機能が必要であることを示し、kube-scheduler は使用可能な GPU リソースを持つ事前設定された Windows ノードにポッドを配置しようとします。

例として、pi の値を推定するモンテカルロ・シミュレーションを実行する Job を起動する以下のサンプル・コマンドをご覧ください。この例は、DirectX 用の Kubernetes Device Plugins を持つ GitHub リポジトリのものです。このリポジトリには、Windows ノード GPU の機能をテストするために実行できる複数の例があります。

cat <<EOF | kubectl apply -f - apiVersion: batch/v1 kind: Job metadata: name: example-cuda-montecarlo-wddm spec: template: spec: containers: - name: example-cuda-montecarlo-wddm image: "index.docker.io/tensorworks/example-cuda-montecarlo:0.0.1" resources: limits: directx.microsoft.com/display: 1 nodeSelector: "kubernetes.io/os": windows restartPolicy: Never backoffLimit: 0 EOF

既知の制限事項

すべての GPU が使用可能です

インスタンスのすべての GPU は、特定のコンテナに対して特定の数の GPU をリクエストした場合でも、ホストで実行中の各コンテナで使用できるようになります。さらに、デフォルトの動作では、ノードで使用可能な複数の GPU がある場合でも、ホストで実行されているすべてのコンテナがインデックス 0 の GPU を使用します。したがって、マルチ GPU タスクを正しく動作させるには、アプリケーションのコード内で使用される特定の GPU デバイスを明示的に指定する必要があります。

アプリケーションに使用するデバイスを割り当てるための正確な実装は、使用しているプログラミング言語やフレームワークによって変わります。例えば、CUDA プログラミングを使用している場合、特定の GPU を選択するために、関数 cudaSetDevice() を使用して、アプリケーションコードで使用するデバイスを明示的に指定できます。

デバイスを明示的に指定する必要があるのは、Windows コンテナに影響する既知の問題があるからです。この問題の解決の進捗状況は、microsoft/Windows-Containers の問題 #333 で追跡できます。次の表は、この GPU 割り当て動作の視覚的な表現と実例を示しています。

EC2 インスタンスタイプ g4dn.12xlarge の Windows ノードが 1 つあり、4 つの GPU が搭載されているというシナリオを考えてみましょう。このインスタンスで起動されるポッドが 3 つあるシナリオを考えてみましょう。この表は、各コンテナがリクエストした GPU の数に関係なく、3 つのポッドすべてがインスタンス上の 4 つの GPU すべてにアクセスできることを示しており、デフォルトではデバイスインデックス 0 の GPU を利用できます。

ポッド リクエストされた GPU 実際の GPU アクセス デフォルトの GPU 使用率 使用可能な GPU インデックス インスタンス GPU の合計

Pod 1

1 GPU

すべての 4 GPU

インデックス 0 の GPU

0、1、2、3

4

Pod 2

GPU 2 個

すべての 4 GPU

インデックス 0 の GPU

0、1、2、3

4

Pod 3

1 GPU

すべての 4 GPU

インデックス 0 の GPU

0、1、2、3

4

Kubernetes デバイスプラグインのサポート

NVIDIA の Kubernetes デバイスプラグインの公式実装は Windows をサポートしていません。NVIDIA/k8s-device-plugin issue #419 で、Windows の公式サポート追加の進行状況を追跡できます。

GPU コンピューティングインスタンスの制限

AWS アカウント設定によっては、起動できる Amazon EC2 GPU コンピューティングインスタンスの数とタイプにサービス制限がある場合があります。追加の容量が必要な場合は、クォータの引き上げをリクエストできます。

Windows GPU 最適化 AMI を構築する必要があります

Amazon EKS が提供する EKS Windows GPU 最適化 AMI または EC2 Image Builder マネージドコンポーネントはありません。このガイドの手順に従って、必要な GPU ドライバーがプリインストールされたカスタム EKS Windows 最適化 AMI を構築するか、インスタンスの起動後に必要な GPU ドライバーを EKS ワーカーノードにインストールする必要があります。

Inferentia と Trainium はサポートされていません

AWS Inferentia および AWS Trainium ベースのワークロードは Windows ではサポートされていません。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.