- Published on
NVIDIA GPU Operator完全ガイド:コンポーネント、インストール、KubeVirt GPUパススルーまで総まとめ
- Authors
- Name
- 1. GPU Operator紹介
- 2. 7大コアコンポーネント詳細分析
- 3. インストールガイド(Helmベース)
- 4. GPU共有戦略
- 5. KubeVirtとGPU Operator統合
- 6. モニタリングとObservability
- 7. 本番デプロイベストプラクティス
- 8. トラブルシューティングガイド
- 9. 参考資料
1. GPU Operator紹介
1.1 GPU Operatorとは?
NVIDIA GPU Operatorは、Kubernetesクラスターでgpuを活用するために必要なすべてのソフトウェアコンポーネントのインストール、設定、管理を自動化するKubernetes Operatorである。Kubernetes Operator Frameworkを基盤に、GPUワークロード実行に必要なドライバー、ランタイム、デバイスプラグイン、モニタリングツールなどをDay-0プロビジョニングからDay-2運用まで一貫して管理する。
従来、KubernetesでGPUを使用するには、以下のような作業を各ノードごとに手動で行う必要があった:
- NVIDIAドライバーのインストール(カーネルバージョンに合った正確なバージョン)
- NVIDIA Container Toolkitのインストールとコンテナランタイム設定
- NVIDIA Device Pluginのデプロイ
- モニタリングツール(DCGM Exporter)のインストール
- Node Feature Discoveryのデプロイ
GPU OperatorはこれらすべてのプロセスをClusterPolicyという単一のCustom Resource Definition(CRD)で宣言的に管理する。
1.2 なぜGPU Operatorが必要なのか?
手動GPUドライバーインストール方式には以下のような深刻な運用上の問題がある:
| 問題点 | 手動管理 | GPU Operator |
|---|---|---|
| ドライバーインストール | 各ノードへSSH接続後手動インストール | DaemonSetで自動デプロイ |
| カーネルアップデート対応 | カーネルアップデート時ドライバー再コンパイル必要 | Pre-compiledドライバー自動マッチング |
| バージョン一貫性 | ノードごとにドライバーバージョン不一致のリスク | ClusterPolicyでバージョン統一 |
| 新規ノード追加 | プロビジョニングスクリプトのメンテナンス必要 | ラベルベースの自動検知とインストール |
| モニタリング | 別途設定が必要 | DCGM Exporter自動デプロイ |
| GPU共有 | MIG/Time-Slicingの手動設定 | ConfigMapベースの宣言的設定 |
| アップグレード | ノードドレイン後手動アップデート | Rolling Updateサポート |
1.3 対応環境
対応OS:
| OS | バージョン |
|---|---|
| Ubuntu | 20.04、22.04、24.04 LTS |
| Red Hat Enterprise Linux | 8.x、9.x |
| CentOS Stream | 8、9 |
| Rocky Linux | 8.x、9.x |
| SUSE Linux Enterprise | 15 SP4+ |
対応GPU:
| GPU世代 | モデル例 | MIGサポート |
|---|---|---|
| Turing | T4、RTX 2080 | X |
| Ampere | A100、A30、A10、A2 | O(A100、A30) |
| Hopper | H100、H200 | O |
| Ada Lovelace | L40、L40S、L4 | X |
| Blackwell | B100、B200、GB200 | O |
対応Kubernetesバージョン: v1.25以上(推奨:v1.28+)
対応Container Runtime: containerd、CRI-O
1.4 アーキテクチャ概要
┌─────────────────────────────────────────────────────────────────────┐
│ Kubernetes Control Plane │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ GPU Operator Controller │ │
│ │ (Deployment in gpu-operator namespace) │ │
│ │ │ │
│ │ ┌────────────────┐ ┌─────────────────────────────────┐ │ │
│ │ │ ClusterPolicy │───▶│ Reconciliation Loop │ │ │
│ │ │ (CRD) │ │ - Watch GPU Nodes │ │ │
│ │ └────────────────┘ │ - Deploy DaemonSets │ │ │
│ │ │ - Manage Lifecycle │ │ │
│ │ └─────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
GPU Operator ControllerはClusterPolicy CRDを監視し、GPUを搭載したワーカーノードを自動的に検知して必要なすべてのコンポーネントをDaemonSet形式でデプロイする。
2. 7大コアコンポーネント詳細分析
2.1 NVIDIA Driver(nvidia-driver-daemonset)
GPUハードウェアと通信するためのカーネルモジュルを各GPUノードに自動インストールする、GPU Operatorの最も基礎的かつ核心的なコンポーネントである。
2.2 NVIDIA Container Toolkit(nvidia-container-toolkit)
Container Runtime(containerd、CRI-O)がコンテナ内からGPUにアクセスできるよう接続するブリッジの役割を果たす。
2.3 NVIDIA Device Plugin(nvidia-device-plugin)
kubeletにGPUをKubernetes Extended Resourceとして登録する役割を果たす。これによりPodがnvidia.com/gpuリソースをリクエストできるようになる。
2.4 NVIDIA DCGM & DCGM Exporter
NVIDIA GPUの状態とパフォーマンスをモニタリングし、メトリクスをPrometheusフォーマットで公開する。
2.5 NVIDIA MIG Manager
Ampere以上のアーキテクチャ(A100、A30、H100など)で1つの物理GPUを複数の独立したGPUインスタンスに分割する管理を行う。
2.6 Node Feature Discovery(NFD)
Kubernetesノードのハードウェア特性を自動検知し、ノードラベルとして登録するコンポーネントである。
2.7 GPU Feature Discovery(GFD)
GPU専用の詳細情報をノードラベルとして登録する役割を果たす。
コンポーネントデプロイ順序(依存関係チェーン):
NFD (Node Feature Discovery)
└──▶ GPU Feature Discovery (GFD)
└──▶ NVIDIA Driver
└──▶ NVIDIA Container Toolkit
└──▶ NVIDIA Device Plugin
└──▶ DCGM / DCGM Exporter
└──▶ MIG Manager (MIG対応GPUのみ)
└──▶ Validator (検証)
コンポーネント別役割要約テーブル:
| コンポーネント | DaemonSet名 | 役割 | ネームスペース |
|---|---|---|---|
| NFD | node-feature-discovery-worker | ノードハードウェアラベリング | gpu-operator |
| GFD | gpu-feature-discovery | GPU詳細情報ラベリング | gpu-operator |
| Driver | nvidia-driver-daemonset | GPUカーネルモジュールインストール | gpu-operator |
| Toolkit | nvidia-container-toolkit-daemonset | Container Runtime GPU連携 | gpu-operator |
| Device Plugin | nvidia-device-plugin-daemonset | GPUリソースkubelet登録 | gpu-operator |
| DCGM | nvidia-dcgm | GPUメトリクス収集デーモン | gpu-operator |
| DCGM Exporter | nvidia-dcgm-exporter | Prometheusメトリクス公開 | gpu-operator |
| MIG Manager | nvidia-mig-manager | MIGパーティション管理 | gpu-operator |
| Validator | nvidia-operator-validator | フルスタック検証 | gpu-operator |
3. インストールガイド(Helmベース)
3.1 前提条件
- NVIDIA GPU搭載ワーカーノード(Turingアーキテクチャ以上推奨)
- PCIe 3.0以上スロット
- IOMMUサポート(KubeVirt GPUパススルー使用時)
3.2 Helm Repo追加と基本インストール
# NVIDIA Helmリポジトリ追加
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
# 基本インストール(最新バージョン)
helm install gpu-operator \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v25.10.1 \
--wait
3.3 検証方法
# nvidia-smi実行確認
kubectl run nvidia-smi \
--restart=Never \
--image=nvcr.io/nvidia/cuda:12.6.0-base-ubuntu22.04 \
--overrides='{"spec":{"restartPolicy":"Never","containers":[{"name":"nvidia-smi","image":"nvcr.io/nvidia/cuda:12.6.0-base-ubuntu22.04","command":["nvidia-smi"],"resources":{"limits":{"nvidia.com/gpu":"1"}}}]}}' \
&& kubectl logs nvidia-smi
4. GPU共有戦略
4.1 Time-Slicing(時分割)
1つの物理GPUを時間ベースで分割して複数のコンテナが共有する方式。すべてのNVIDIA GPUで対応。
4.2 MIG(Multi-Instance GPU)
Ampere以上のアーキテクチャで対応するハードウェアレベルのGPU分割技術。
4.3 vGPU(Virtual GPU)
GPUを仮想化して複数の仮想マシンで共有する技術。NVIDIAの別途ライセンスが必要。
4.4 GPU共有戦略比較
| 特性 | Time-Slicing | MIG | vGPU |
|---|---|---|---|
| 分離レベル | なし(時分割のみ) | ハードウェア(メモリ+演算) | ハードウェア(仮想化) |
| メモリ分離 | X | O | O |
| 障害分離 | X | O | O |
| 対応GPU | すべてのNVIDIA GPU | A100、A30、H100、H200 | vGPU対応GPU |
| ライセンス | 無料 | 無料 | 有料(NVIDIA AI Enterprise) |
| ユースケース | 開発/テスト、軽量推論 | 本番推論、マルチテナント | VMベースワークロード |
5. KubeVirtとGPU Operator統合
5.1 KubeVirt紹介
KubeVirtはKubernetes上で仮想マシン(VM)を管理できるようにするプロジェクトである。KubeVirtとGPU Operatorを統合すると、VMに物理GPUを直接割り当て(パススルー)たり、仮想GPU(vGPU)を割り当てることができる。
重要: 1つのGPUワーカーノードは1種類のGPUワークロードのみ実行可能。container、vm-passthrough、vm-vgpuを同一ノードで混在実行することはできない。
5.2 GPUパススルー(PCIパススルー)
物理GPU全体をKubeVirt VMに直接割り当てる方式。VM内でGPUをネイティブパフォーマンスで使用可能だが、GPU共有は不可。
5.3 vGPU with KubeVirt
1つの物理GPUを複数の仮想GPUに分割して複数のVMで共有する方式。
5.4 Live Migration with GPU制約事項
| 制約事項 | GPUパススルー | vGPU |
|---|---|---|
| Live Migration | サポートなし | 限定的サポート |
| 原因 | PCIeデバイス直接割り当ては移行不可 | vGPU状態転送が必要 |
| 代替手段 | Cold Migration(VM停止後移行) | NVIDIA vGPU Migrationライセンス必要 |
6. モニタリングとObservability
DCGM Exporter -> Prometheus -> Grafanaパイプラインを構築し、GPU使用率、メモリ使用量、温度、電力消費、ECC エラーなどを監視する。Grafana Dashboard ID 12239を使用してNVIDIA DCGM Exporterダッシュボードをインポートできる。
7. 本番デプロイベストプラクティス
- ノードラベリング戦略: GPUノードとCPUノードを明確に区分
- Taints & Tolerations: GPUノードにTaintを設定してGPUワークロードのみスケジューリング
- ResourceQuota: ネームスペースごとにGPU使用量を制限
- PriorityClass: GPUリソース不足時の優先順位設定
- ドライバーアップグレード: Rolling Updateを使用した段階的アップグレード
8. トラブルシューティングガイド
- GPU未検出: ドライバーPodログ確認、Nouveauモジュール競合確認、カーネルヘッダー不足確認
- nvidia-smi not found: Container Toolkit Pod状態確認、Device Plugin Pod状態確認
- CUDAバージョン不一致: ドライバーのCUDAサポートバージョン >= アプリケーションのCUDAバージョンを確認
- MIGパーティション失敗: MIG Manager ログ確認、MIG状態確認
- KubeVirt VMでGPU未認識: ノードワークロードラベル確認、VFIO/vGPU Manager状態確認
9. 参考資料
| リソース | URL |
|---|---|
| NVIDIA GPU Operator公式ドキュメント | https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/ |
| GPU Operatorインストールガイド | https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/getting-started.html |
| GPU Operator with KubeVirt | https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/gpu-operator-kubevirt.html |
| KubeVirt公式ドキュメント | https://kubevirt.io/user-guide/ |
| GPU Operator GitHub | https://github.com/NVIDIA/gpu-operator |
| DCGM Exporter Grafana Dashboard | https://grafana.com/grafana/dashboards/12239 |