GPU コンテナ ワークロードを管理する

コンテナで画像処理装置(GPU)リソースを有効にして管理できます。たとえば、GPU 環境で AI と ML のノートブックを実行することを希望する場合があります。GPU コンテナ ワークロードを実行するには、GPU デバイスをサポートする Kubernetes クラスタが必要です。GPU マシンがプロビジョニングされている Kubernetes クラスタでは、GPU サポートはデフォルトで有効になっています。

このドキュメントは、組織のアプリケーション ワークロードの作成を担当するアプリケーション オペレーター グループ内のアプリケーション デベロッパーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。

始める前に

コンテナに GPU をデプロイするには、次のものが必要です。

  • GPU マシンクラスを含む Kubernetes クラスタ。クラスタ マシンで構成できるオプションについては、サポートされている GPU カードのセクションをご覧ください。

  • 共有クラスタ内の GPU を確認するためのユーザー クラスタ管理者ロール(user-cluster-admin)と、共有クラスタに GPU ワークロードをデプロイするためのプロジェクト Namespace の Namespace 管理者ロール(namespace-admin)。

  • 標準クラスタ内の GPU を確認するための標準クラスタ管理者ロール(standard-cluster-admin)と、標準クラスタに GPU ワークロードをデプロイするための標準クラスタのクラスタ デベロッパー ロール(cluster-developer)。

  • Kubernetes クラスタに対してコマンドを実行するには、次のリソースがあることを確認してください。

    • Kubernetes クラスタ名を確認するか、プラットフォーム管理者グループのメンバーにクラスタ名を確認します。

    • まだ Kubernetes クラスタの kubeconfig ファイルがない場合は、ログインして生成します。

    • これらの手順で KUBERNETES_CLUSTER_KUBECONFIG を置き換えるには、Kubernetes クラスタの kubeconfig パスを使用します。

  • Kubernetes クラスタをホストするゾーン管理 API サーバーの kubeconfig パス。kubeconfig ファイルがない場合は、ログインして生成します。

  • GPU をホストするゾーンの組織インフラストラクチャ クラスタの kubeconfig パス。kubeconfig ファイルがない場合は、ログインして生成します。

GPU リソースを使用するようにコンテナを構成する

コンテナでこれらの GPU を使用するには、次の操作を行います。

  1. Kubernetes クラスタに GPU をサポートするノードプールがあることを確認します。

    kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    次のように置き換えます。

    • KUBERNETES_CLUSTER_NAME: クラスタの名前。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。標準クラスタの場合は、クラスタのプロジェクト Namespace を使用します。
    • MANAGEMENT_API_SERVER: Kubernetes クラスタがホストされているゾーン API サーバーの kubeconfig パス。ターゲット ゾーンの API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。

    関連する出力は次のスニペットのようになります。

    # Several lines of code are omitted here.
    spec:
      nodePools:
      - machineTypeName: a2-ultragpu-1g-gdc
        nodeCount: 2
    # Several lines of code are omitted here.
    

    サポートされている GPU マシンタイプとマルチインスタンス GPU(MIG)プロファイルの完全なリストについては、クラスタノードのマシンタイプをご覧ください。

  2. コンテナ仕様に .containers.resources.requests フィールドと .containers.resources.limits フィールドを追加します。各リソース名は、マシンクラスによって異なります。GPU リソースの割り当てを確認して、GPU リソース名を確認します。

    たとえば、次のコンテナ仕様では、a2-ultragpu-1g-gdc ノードから GPU の 3 つのパーティションをリクエストします。

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  3. コンテナが GPU にアクセスするには、追加の権限も必要です。GPU をリクエストするコンテナごとに、次の権限をコンテナ仕様に追加します。

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. コンテナ マニフェスト ファイルを適用します。

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    次のように置き換えます。

    • CONTAINER_MANIFEST_FILE: コンテナ ワークロードの YAML マニフェスト ファイル。
    • KUBERNETES_CLUSTER_NAMESPACE: クラスタの Namespace。共有クラスタの場合は、platform Namespace を使用します。標準クラスタの場合は、クラスタのプロジェクト Namespace を使用します。
    • KUBERNETES_CLUSTER_KUBECONFIG: クラスタの kubeconfig パス。

GPU リソースの割り当てを確認する

  • GPU リソースの割り当てを確認するには、次のコマンドを使用します。

    kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    次のように置き換えます。

    • NODE_NAME: 検査する GPU を管理するノード。
    • KUBERNETES_CLUSTER_KUBECONFIG: クラスタの kubeconfig パス。

    関連する出力は次のスニペットのようになります。

    # Several lines of code are omitted here.
    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    # Several lines of code are omitted here.
    

GPU のリソース名をメモします。GPU リソースを使用するようにコンテナを構成するときに、これらのリソース名を指定する必要があります。

次のステップ