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 ランタイムで動作します。 |
典型的なワークフロー
- ノードの準備 – NVIDIA ドライバー(≈ 384.81+)、
nvidia‑container‑toolkit(またはnvidia‑docker≥ 2.0)をインストールし、nvidia‑container‑runtimeをデフォルトの OCI ランタイムとして設定します。 - プラグインのデプロイ – 静的 DaemonSet マニフェストを適用するか、提供されている Helm chart 経由でインストールします。
- GPU pod の実行 – pod 仕様で
nvidia.com/gpu: 1(または MIG スライス)を要求します。スケジューラーは空き GPU を持つノードに pod を配置し、ランタイムがデバイスファイルを注入します。 - (オプション) 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– KubernetesCPUManagerとの相互作用を有効にします(特権 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 から直接取得したものであり、外部の推測は追加されていません。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト