NVIDIA/k8s-device-plugin

NVIDIA device plugin for Kubernetes

NVIDIA k8s‑device‑plugin – Kubernetes 向け GPU サポート

これは何か

  • NVIDIA GPU 向けに Kubernetes device plugin API を実装した公式 NVIDIA DaemonSet。
  • デプロイすると、各ノード上の GPU を自動的に検出し、そのヘルス状態を報告し、リソースタイプ nvidia.com/gpu(およびオプションの MIG や共有 GPU リソース)を介してコンテナで利用できるようにします。

AI/ML において重要な理由

  • ほとんどのディープラーニングのトレーニングおよび推論ワークロードは NVIDIA GPU で実行されます。Kubernetes クラスターは、TensorFlow、PyTorch、RAPIDS などのフレームワークがコンテナ内で実行できるように、これらの GPU を pod に公開する方法を必要とします。
  • このプラグインは、クラスターのスケジューラーと NVIDIA ドライバー/ランタイムスタック間の橋渡しとして機能し、他のリソースと同様に GPU アクセラレーションを伴うジョブをスケジュールできます。

主な機能(README に記載されている通り)

機能 内容
GPU 検出とヘルス 各ノード上の GPU の数を検出し、kube‑let にヘルス状態を報告します。
MIG サポート オプションの戦略(none、single、mixed)で、Multi‑Instance GPU スライスを個別のリソース(nvidia.com/mig‑…)として公開します。
共有 GPU アクセス 設定ファイル経由でタイムスライシングまたは NVIDIA MPS を有効にし、オーバーサブスクリプション(例:物理 GPU あたり 10 個の論理 nvidia.com/gpu)を許可します。
設定可能なデバイスリスト配信 割り当てられた GPU をコンテナランタイムに伝える方法を選択します。環境変数、ボリュームマウント、CDI アノテーション、または CDI‑CRI フィールド。
Helm chart と ConfigMap サポート Helm でプラグインをデプロイし、ConfigMap 経由でフラグ、環境変数、または YAML 設定ファイルを渡します。
GPU Feature Discovery との統合 より豊富なスケジューリングのために、GPU 機能(メモリ、コンピュート機能など)を記述するノードラベルを送出します。
複数ランタイムのサポート Docker(非推奨)、containerd、CRI‑O、および NVIDIA Container Toolkit を使用できる任意の OCI ランタイムで動作します。

典型的なワークフロー

  1. ノードの準備 – NVIDIA ドライバー(≈ 384.81+)、nvidia‑container‑toolkit(または nvidia‑docker ≥ 2.0)をインストールし、nvidia‑container‑runtime をデフォルトの OCI ランタイムとして設定します。
  2. プラグインのデプロイ – 静的 DaemonSet マニフェストを適用するか、提供されている Helm chart 経由でインストールします。
  3. GPU pod の実行 – pod 仕様で nvidia.com/gpu: 1(または MIG スライス)を要求します。スケジューラーは空き GPU を持つノードに pod を配置し、ランタイムがデバイスファイルを注入します。
  4. (オプション) YAML 設定ファイルでタイムスライシングまたは MPS を有効にし、ConfigMap 経由でマウントして、多くの pod が単一の GPU を共有できるようにします。

はじめに(クイックスタートの抜粋)

# 1. Install NVIDIA Container Toolkit (see NVIDIA docs)
# 2. Deploy the plugin (static DaemonSet example)
kubectl create -f \
  https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.1/deployments/static/nvidia-device-plugin.yml

# 3. Launch a test pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  restartPolicy: Never
  containers:
  - name: cuda-container
    image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
    resources:
      limits:
        nvidia.com/gpu: 1
  tolerations:
  - key: nvidia.com/gpu
    operator: Exists
    effect: NoSchedule
EOF

pod はシンプルな CUDA ベクトル加算サンプルを実行し、Test PASSED と出力します。

設定オプション(概要)

  • --mig-strategy – MIG スライスの公開を制御します(none、single、mixed)。
  • --device-list-strategy – GPU をランタイムに渡す方法(envvar(デフォルト)、volume-mounts、cdi-annotations、cdi-cri)。
  • --device-id-strategy – GPU UUID またはインデックス番号を使用します。
  • --fail-on-init-error – 初期化エラー時にプラグインを失敗させます(デフォルト true)。
  • --pass-device-specs – Kubernetes CPUManager との相互作用を有効にします(特権 DaemonSet が必要)。
  • --config-file – タイムスライシングまたは MPS の共有設定も含めることができる YAML 設定へのパス。

README に記載されている制限事項/注意点

  • プラグイン API はまだ ベータ版 です(Kubernetes v1.10 時点)。
  • ヘルスチェックと GPU クリーンアップは包括的ではありません。
  • 共有 GPU モード(タイムスライシング、MPS)は相互に排他的であり、ノード上のすべての GPU に適用されます。
  • GPU の要求を忘れた場合、プラグインはコンテナ内のすべての GPU を公開します – 常に制限を指定する必要があります。
  • このプラグインは公式サポートのみを受けています。フォークは対象外です。

詳細情報の場所

  • 完全なドキュメントは docs/ にあります(例:GPU Feature Discovery、CDI の使用方法)。
  • リリースノートと変更履歴はリポジトリにリンクされています。
  • イシューや貢献のガイドラインは Issues and Contributing セクションに記載されています。

上記の情報はすべてリポジトリの README から直接取得したものであり、外部の推測は追加されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト