コンテナで画像処理装置(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 を使用するには、次の操作を行います。
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。共有クラスタの場合は、platformNamespace を使用します。標準クラスタの場合は、クラスタのプロジェクト 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)プロファイルの完全なリストについては、クラスタノードのマシンタイプをご覧ください。
コンテナ仕様に
.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 ...コンテナが GPU にアクセスするには、追加の権限も必要です。GPU をリクエストするコンテナごとに、次の権限をコンテナ仕様に追加します。
... securityContext: seLinuxOptions: type: unconfined_t ...コンテナ マニフェスト ファイルを適用します。
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG次のように置き換えます。
CONTAINER_MANIFEST_FILE: コンテナ ワークロードの YAML マニフェスト ファイル。KUBERNETES_CLUSTER_NAMESPACE: クラスタの Namespace。共有クラスタの場合は、platformNamespace を使用します。標準クラスタの場合は、クラスタのプロジェクト 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 リソースを使用するようにコンテナを構成するときに、これらのリソース名を指定する必要があります。