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

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

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

始める前に

このドキュメントのタスクを完了するには、必要な権限をリクエストして環境を準備する必要があります。

IAM ロールをリクエストする

コンテナに GPU をデプロイするために必要な権限を取得するには、特定のロールが必要です。必要なロールは、組織スコープの共有クラスタとプロジェクト スコープの標準クラスタのどちらで作業しているかによって異なります。詳細については、Kubernetes クラスタの構成をご覧ください。

共有クラスタロール

GPU 対応のノードプールを確認し、共有クラスタに GPU ワークロードをデプロイするには、実行するタスクに基づいて次のロールをリクエストします。

  • ユーザー クラスタ管理者user-cluster-admin): 管理 API サーバーでホストされている共有クラスタのリソースを作成、削除、編集、表示します。このロールを使用すると、共有クラスタ内の GPU を確認できます。このロールはプロジェクト Namespace にバインドされていません。
  • Namespace 管理者namespace-admin): プロジェクトでホストされている共有クラスタのリソースを作成、削除、編集、表示します。このロールを使用すると、GPU ワークロードを Standard クラスタにデプロイできます。このロールはプロジェクト Namespace にバインドされます。

標準クラスタロール

GPU 対応のノードプールを確認し、GPU ワークロードを標準クラスタにデプロイするには、プロジェクト IAM 管理者に次のロールの付与を依頼します。

  • Standard クラスタ管理者standard-cluster-admin): 管理 API サーバーでホストされている Standard クラスタのリソースを作成、削除、編集、表示します。このロールを使用すると、共有クラスタ内の GPU を確認できます。このロールはプロジェクト Namespace にバインドされます。
  • クラスタ デベロッパーcluster-developer): 標準クラスタの作成、削除、編集、表示を行います。このロールを使用すると、標準クラスタ内でホストされているデータプレーン API へのアクセス権を付与することで、GPU ワークロードを標準クラスタにデプロイできます。このロールはプロジェクトの名前空間にバインドされます。

環境を準備する

GPU リソースを使用するようにコンテナを構成するには、次のリソースがあることを確認します。

  • GPU マシンクラスを含む Kubernetes クラスタ。詳細については、サポートされている GPU カードをご覧ください。

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

  • Kubernetes クラスタの kubeconfig ファイルにログインして生成します。

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

  • Kubernetes クラスタをホストするゾーン管理 API サーバーの kubeconfig ファイルをログインして生成します。このパスを使用して、この手順の MANAGEMENT_API_SERVER を置き換えます。

  • GPU をホストするゾーンで、組織インフラストラクチャ クラスタの 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 つのパーティションをリクエストします。

     # Several lines of code are omitted here.
     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
     # Several lines of code are omitted here.
    
  3. コンテナが GPU にアクセスするには、追加の権限も必要です。GPU をリクエストするコンテナごとに、次の権限をコンテナ仕様に追加します。

    # Several lines of code are omitted here.
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    # Several lines of code are omitted here.
    
  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 リソースを使用するようにコンテナを構成するときに、これらのリソース名を指定する必要があります。

次のステップ