動的リソース割り当て(DRA)を使用すると、Google Kubernetes Engine(GKE)ワークロードのデバイスを柔軟にリクエストできます。このドキュメントでは、クラスタ内のノードプールにある既存のデバイスをリクエストする ResourceClaimTemplate を作成し、ワークロードを作成して、Kubernetes がデバイスを Pod に柔軟に割り当てる方法を確認する方法について説明します。
このドキュメントは、AI/ML やハイ パフォーマンス コンピューティング(HPC)などのワークロードを実行するアプリケーション オペレーターとデータ エンジニアを対象としています。
DRA によるデバイスのリクエストについて
DRA 用に GKE インフラストラクチャを設定すると、ノードの DRA ドライバがクラスタ内に DeviceClassDeviceClass オブジェクトを作成します。DeviceClass は、ワークロードにリクエストできるデバイスのカテゴリ(GPU など)を定義します。必要に応じて、プラットフォーム管理者は、特定のワークロードでリクエストできるデバイスを制限する追加の DeviceClass をデプロイできます。
DeviceClass 内のデバイスをリクエストするには、次のいずれかのオブジェクトを作成します。
- ResourceClaim を使用すると、Pod またはユーザーは DeviceClass 内の特定のパラメータをフィルタして、ハードウェア リソースをリクエストできます。
- ResourceClaimTemplate は、Pod ごとの新しい ResourceClaim を自動的に作成するために Pod が使用できるテンプレートを定義します。
ResourceClaim と ResourceClaimTemplate の詳細については、ResourceClaim と ResourceClaimTemplate を使用する場面をご覧ください。
このドキュメントの例では、基本的な ResourceClaimTemplate を使用して、指定されたデバイス構成をリクエストします。指定できるすべてのフィールドの詳細については、ResourceClaimTemplate API リファレンスをご覧ください。
制限事項
次の制限が適用されます。
- GKE での DRA の制限事項
- デバイス固有の制限事項(DRA を使用するかどうかに関係なく適用されます): Standard クラスタでの GPU ワークロード
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
- GKE クラスタが DRA ワークロード用に構成されていることを確認します。
デバイスを申請してワークロードをデプロイする
Pod ごとのデバイス割り当てをリクエストするには、特定タイプの GPU など、リクエストしたデバイス構成を含む ResourceClaimTemplate を作成します。ResourceClaimTemplate を参照するワークロードをデプロイすると、Kubernetes は ResourceClaimTemplate に基づいてワークロード内の各 Pod の ResourceClaim を作成します。Kubernetes は、リクエストされたリソースを割り振り、対応するノードに Pod をスケジュールします。
DRA を使用してワークロードで GPU をリクエストする手順は次のとおりです。
次のマニフェストを
gpu-claim-template.yamlとして保存します。apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: gpu-claim-template spec: spec: devices: requests: - name: single-gpu exactly: deviceClassName: gpu.nvidia.com allocationMode: ExactCount count: 1ResourceClaimTemplate を作成します。
kubectl create -f gpu-claim-template.yamlResourceClaimTemplate を参照するワークロードを作成するには、次のマニフェストを
dra-gpu-example.yamlとして保存します。apiVersion: apps/v1 kind: Deployment metadata: name: dra-gpu-example spec: replicas: 1 selector: matchLabels: app: dra-gpu-example template: metadata: labels: app: dra-gpu-example spec: containers: - name: ctr image: ubuntu:22.04 command: ["bash", "-c"] args: ["echo $(nvidia-smi -L || echo Waiting...); sleep infinity"] resources: claims: - name: single-gpu resourceClaims: - name: single-gpu resourceClaimTemplateName: gpu-claim-template tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"ワークロードをデプロイします。
kubectl create -f dra-gpu-example.yaml
ハードウェアの割り当てを確認する
ワークロードにハードウェアが割り当てられていることを確認するには、ResourceClaim を確認するか、Pod のログを調べます。割り当てを確認する手順は次のとおりです。
デプロイしたワークロードに関連付けられている ResourceClaim を取得します。
kubectl get resourceclaims出力は次のようになります。
NAME STATE AGE dra-gpu-example-64b75dc6b-x8bd6-single-gpu-jwwdh allocated,reserved 9sPod に割り当てられたハードウェアの詳細を取得します。
kubectl describe resourceclaims RESOURCECLAIMRESOURCECLAIMは、前の手順の出力から取得した ResourceClaim のフルネームに置き換えます。出力は次のようになります。
Name: dra-gpu-example-68f595d7dc-prv27-single-gpu-qgjq5 Namespace: default Labels: <none> Annotations: resource.kubernetes.io/pod-claim-name: single-gpu API Version: resource.k8s.io/v1 Kind: ResourceClaim Metadata: # Multiple lines are omitted here. Spec: Devices: Requests: Exactly: Allocation Mode: ExactCount Count: 1 Device Class Name: gpu.nvidia.com Name: single-gpu Status: Allocation: Devices: Results: Device: gpu-0 Driver: gpu.nvidia.com Pool: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Request: single-gpu Node Selector: Node Selector Terms: Match Fields: Key: metadata.name Operator: In Values: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm Reserved For: Name: dra-gpu-example-68f595d7dc-prv27 Resource: pods UID: e16c2813-08ef-411b-8d92-a72f27ebf5ef Events: <none>デプロイしたワークロードのログを取得します。
kubectl logs deployment/dra-gpu-example --all-pods=true出力は次のようになります。
[pod/dra-gpu-example-64b75dc6b-x8bd6/ctr] GPU 0: Tesla T4 (UUID: GPU-2087ac7a-f781-8cd7-eb6b-b00943cc13ef)この出力は、GKE がコンテナに 1 つの GPU を割り当てたことを示しています。