Node SelectorとTolerations付きGPUワークロードPod

nodeSelector、tolerations、nvidia.com/gpuリソースリクエストを使用して、GPU搭載Kubernetesノードにおける GPU集約型ワークロード(ML推論、動画処理)をスケジュールします。

Scheduling

詳細な説明

KubernetesでのGPUワークロード

GPUワークロードにはGPUハードウェアを持つノードに着陸するための特定のスケジューリングが必要です。Kubernetesはノードラベル、tolerations、拡張リソースを使用してGPUスケジューリングを管理します。

主要な設定

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ml-inference
  labels:
    app: "ml-inference"
    workload: "gpu"
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: inference
          image: my-ml-model:latest
          ports:
            - name: grpc
              containerPort: 8500
          resources:
            requests:
              cpu: "500m"
              memory: "2Gi"
            limits:
              cpu: "2000m"
              memory: "4Gi"
      nodeSelector:
        accelerator: "nvidia-tesla-v100"
      tolerations:
        - key: "nvidia.com/gpu"
          operator: "Exists"
          effect: "NoSchedule"

Node Selector vs Node Affinity

機能 nodeSelector nodeAffinity
構文 シンプルなキーバリュー 表現力のあるオペレーター
ソフトプリファレンス いいえ はい(preferredDuringScheduling)
複数条件 ANDのみ ANDとOR
ユースケース シンプルなGPUスケジューリング 複雑なマルチゾーンスケジューリング

シンプルなGPUスケジューリングにはnodeSelectorで十分です。ソフトプリファレンスや複雑なマッチングロジックが必要な場合はnodeAffinityを使用してください。

Tolerations

GPUノードには通常、非GPUワークロードのスケジュールを防ぐtaintが設定されています(無駄を避けるため)。tolerationによりGPUワークロードがこれらのtaintされたノードに配置可能になります。tolerationがないと、スケジューラは利用可能なリソースがあってもGPUノードを考慮しません。

ユースケース

Kubernetesクラスタの専用GPUノードで機械学習推論、モデルトレーニング、ビデオトランスコーディング、その他のGPUアクセラレーションワークロードを実行する。

試してみる — K8s Pod Spec Builder

フルツールを開く