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

コンテナでグラフィック プロセッシング ユニット(GPU)リソースを有効にして管理できます。たとえば、GPU 環境で AI と ML のノートブックを実行することが望ましい場合があります。Google Distributed Cloud(GDC)エアギャップ アプライアンスでは、GPU サポートはデフォルトで有効になっています。

始める前に

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

  • プロジェクトの Namespace に GPU ワークロードをデプロイする Namespace 管理者ロール(namespace-admin)。

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

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

コンテナで GPU を使用する手順は次のとおりです。

  1. Kubernetes クラスタノードが GPU リソースの割り当てをサポートしていることを確認します。

    kubectl describe nodes NODE_NAME
    

    NODE_NAME は、検査する GPU を管理するノードに置き換えます。

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

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. コンテナ仕様に .containers.resources.requests フィールドと .containers.resources.limits フィールドを追加します。Kubernetes クラスタは GPU マシンで事前構成されているため、構成はすべてのワークロードで同じです。

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

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

    • CONTAINER_NAME: コンテナの名前。
    • CONTAINER_IMAGE: GPU マシンにアクセスするコンテナ イメージ。REGISTRY_PATH/hello-app:1.0 など、コンテナ レジストリのパスとイメージのバージョンを含める必要があります。
  3. コンテナが GPU にアクセスするには、追加の権限も必要です。GPU をリクエストするコンテナごとに、次の権限をコンテナ仕様に追加します。

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

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

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

    • CONTAINER_MANIFEST_FILE: コンテナ ワークロード カスタム リソースの YAML ファイル。
    • NAMESPACE: コンテナ ワークロードをデプロイするプロジェクト Namespace。
    • CLUSTER_KUBECONFIG: コンテナ ワークロードをデプロイするベアメタル Kubernetes クラスタの kubeconfig ファイル。
  5. Pod が実行され、GPU を使用していることを確認します。

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

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

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1