Skip to content
Published on

NVIDIA GPU Operator完全ガイド:コンポーネント、インストール、KubeVirt GPUパススルーまで総まとめ

Authors
  • Name
    Twitter

1. GPU Operator紹介

1.1 GPU Operatorとは?

NVIDIA GPU Operatorは、Kubernetesクラスターでgpuを活用するために必要なすべてのソフトウェアコンポーネントのインストール、設定、管理を自動化するKubernetes Operatorである。Kubernetes Operator Frameworkを基盤に、GPUワークロード実行に必要なドライバー、ランタイム、デバイスプラグイン、モニタリングツールなどをDay-0プロビジョニングからDay-2運用まで一貫して管理する。

従来、KubernetesでGPUを使用するには、以下のような作業を各ノードごとに手動で行う必要があった:

  1. NVIDIAドライバーのインストール(カーネルバージョンに合った正確なバージョン)
  2. NVIDIA Container Toolkitのインストールとコンテナランタイム設定
  3. NVIDIA Device Pluginのデプロイ
  4. モニタリングツール(DCGM Exporter)のインストール
  5. 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バージョン
Ubuntu20.04、22.04、24.04 LTS
Red Hat Enterprise Linux8.x、9.x
CentOS Stream8、9
Rocky Linux8.x、9.x
SUSE Linux Enterprise15 SP4+

対応GPU:

GPU世代モデル例MIGサポート
TuringT4、RTX 2080X
AmpereA100、A30、A10、A2O(A100、A30)
HopperH100、H200O
Ada LovelaceL40、L40S、L4X
BlackwellB100、B200、GB200O

対応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名役割ネームスペース
NFDnode-feature-discovery-workerノードハードウェアラベリングgpu-operator
GFDgpu-feature-discoveryGPU詳細情報ラベリングgpu-operator
Drivernvidia-driver-daemonsetGPUカーネルモジュールインストールgpu-operator
Toolkitnvidia-container-toolkit-daemonsetContainer Runtime GPU連携gpu-operator
Device Pluginnvidia-device-plugin-daemonsetGPUリソースkubelet登録gpu-operator
DCGMnvidia-dcgmGPUメトリクス収集デーモンgpu-operator
DCGM Exporternvidia-dcgm-exporterPrometheusメトリクス公開gpu-operator
MIG Managernvidia-mig-managerMIGパーティション管理gpu-operator
Validatornvidia-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-SlicingMIGvGPU
分離レベルなし(時分割のみ)ハードウェア(メモリ+演算)ハードウェア(仮想化)
メモリ分離XOO
障害分離XOO
対応GPUすべてのNVIDIA GPUA100、A30、H100、H200vGPU対応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. 参考資料