コンテナで画像処理装置(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 を使用するには、次の操作を行います。
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 つのパーティションをリクエストします。# 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.コンテナが GPU にアクセスするには、追加の権限も必要です。GPU をリクエストするコンテナごとに、次の権限をコンテナ仕様に追加します。
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.コンテナ マニフェスト ファイルを適用します。
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 リソースを使用するようにコンテナを構成するときに、これらのリソース名を指定する必要があります。