Skip to content
Published on

[仮想化] 04. GPU仮想化技術総まとめ: Passthrough、vGPU、MIG、SR-IOV

Authors

はじめに

GPU仮想化はAI/MLワークロードとクラウドコンピューティングの爆発的な成長により、重要なインフラ技術となりました。物理GPUを複数のVMやコンテナで共有したり、逆にVMにGPUを独占割り当てしたりする様々な方式があります。

[GPU仮想化技術スペクトラム]

独占割当 <-----------------------------------> 最大共有

GPU Passthrough    vGPU (SR-IOV)    MIG    vGPU (mdev)    Time-Slicing
 (1 GPU : 1 VM)   (HWパーティション) (空間分割) (SWタイムスライス) (K8s共有)

GPU Passthrough (VFIO-PCI)

概要

GPU Passthroughは物理GPUをVMに直接接続する最もシンプルで強力な方式です。

+------------------+     +------------------+
|    VM 1          |     |    VM 2          |
|  GPU Driver      |     |  GPU Driver      |
|  (Full Access)   |     |  (Full Access)   |
+--------+---------+     +--------+---------+
         |                         |
    IOMMU/VT-d                IOMMU/VT-d
         |                         |
+--------+---------+     +--------+---------+
|  Physical GPU 1  |     |  Physical GPU 2  |
|  (Exclusive)     |     |  (Exclusive)     |
+------------------+     +------------------+

特徴

項目内容
パフォーマンスネイティブの95〜99%
GPU共有不可(1 GPU = 1 VM)
対応GPUすべてのGPU(NVIDIA、AMD、Intel)
ライセンス追加ライセンス不要
必須要件IOMMU(VT-d/AMD-Vi)対応CPU/マザーボード
ドライバゲストOSに通常のGPUドライバをインストール
制限事項GPU 1台につき1つのVMのみ使用可能

セットアップフロー

# 1. BIOSでVT-d/AMD-Vi(IOMMU)を有効化

# 2. ブートパラメータにIOMMUを追加
# /etc/default/grub:
# GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"

# 3. IOMMUグループの確認
find /sys/kernel/iommu_groups/ -type l | sort -V

# 4. GPUをvfio-pciドライバにバインド
# /etc/modprobe.d/vfio.conf:
# options vfio-pci ids=10de:2484,10de:228b

# 5. initramfsの再生成
update-initramfs -u

# 6. 再起動後に確認
lspci -nnk -s 01:00.0
# Kernel driver in use: vfio-pci

vGPU (NVIDIA GRID)

アーキテクチャ

vGPUは1つの物理GPUを複数のVMで共有可能にします。

+--------+ +--------+ +--------+ +--------+
| VM 1   | | VM 2   | | VM 3   | | VM 4   |
| vGPU   | | vGPU   | | vGPU   | | vGPU   |
| 4GB    | | 4GB    | | 4GB    | | 4GB    |
+--------+ +--------+ +--------+ +--------+
|            vGPU Manager                  |
|        (Hypervisor Module)               |
+------------------------------------------+
|          Physical GPU (16GB)             |
|        (NVIDIA A100/L40S/etc.)          |
+------------------------------------------+

mdev(Mediated Devices)- Volta以前

[ソフトウェアタイムスライシング]

時間 -->  |  VM1  |  VM2  |  VM3  |  VM1  |  VM2  |  VM3  |
          +-------+-------+-------+-------+-------+-------+
GPU全体    使用    使用    使用    使用    使用    使用

- GPU全体を時分割で共有
- vGPU Managerがコンテキストスイッチを管理
- VRAMは静的にパーティショニング
- 演算リソースは時間ベースで共有

SR-IOV - Ampere以降

[ハードウェアパーティショニング - SR-IOV]

+-------------------------------------------+
| Physical Function (PF)                     |
| - GPU管理、設定                            |
+-------------------------------------------+
| VF 0        | VF 1        | VF 2          |
| (VM 1)      | (VM 2)      | (VM 3)        |
| 独立キュー   | 独立キュー   | 独立キュー    |
| 独立割込み   | 独立割込み   | 独立割込み    |
+-------------------------------------------+
|          Physical GPU (PCIe)              |
+-------------------------------------------+

- PF (Physical Function): ホストが管理
- VF (Virtual Function): 各VMに直接割り当て
- IOMMUがVF間のメモリ分離を保証
- ハードウェアレベルの分離でより安定

vGPUプロファイルシリーズ

シリーズ用途VRAM代表的なユースケース
C-seriesCompute大容量AI/MLトレーニング、HPC
Q-seriesQuadro中〜大CAD、3Dレンダリング、プロフェッショナルグラフィックス
B-seriesDesktop小〜中VDI、一般デスクトップ
A-seriesApp Streaming小〜中アプリ仮想化、リモートワークステーション
[NVIDIA A100 vGPUプロファイル例]

GPU: NVIDIA A100 40GB

プロファイル      VRAM    最大インスタンス
A100-1-5C         5GB      7
A100-2-10C       10GB      4
A100-4-20C       20GB      2
A100-8-40C       40GB      1
A100-1-5CME       5GB      7  (MIG-backed)
A100-2-10CME     10GB      4  (MIG-backed)

ライセンス要件:

  • NVIDIA vGPU Software License必須(vApps、vPC、vCS、vWS)
  • ライセンスサーバー(DLSまたはCLS)が必要
  • GPUモデルとプロファイルによりライセンスタイプが決定

MIG (Multi-Instance GPU)

概要

MIGはNVIDIA A100で初めて導入されたハードウェアレベルの空間分割技術です。

[MIGアーキテクチャ - A100例]

+-----------------------------------------------------------+
|                    NVIDIA A100 (80GB)                       |
+-----------------------------------------------------------+
| GPC 0-1  | GPC 2-3  | GPC 4   | GPC 5   | GPC 6          |
| MIG 1    | MIG 2    | MIG 3   | MIG 4   | MIG 5          |
| 2g.20gb  | 2g.20gb  | 1g.10gb | 1g.10gb | 1g.10gb        |
+----------+----------+---------+---------+-----------------+
| Memory   | Memory   | Memory  | Memory  | Memory          |
| Ctrl 0-1 | Ctrl 2-3 | Ctrl 4  | Ctrl 5  | Ctrl 6          |
| 20GB HBM | 20GB HBM | 10GB HBM| 10GB HBM| 10GB HBM       |
+----------+----------+---------+---------+-----------------+
| L2 Cache | L2 Cache | L2 $    | L2 $    | L2 $            |
| Slice 0-1| Slice 2-3| Slice 4 | Slice 5 | Slice 6         |
+-----------------------------------------------------------+

主要特徴

  • ハードウェア空間分割: 最大7つの独立インスタンス
  • 専用リソース: 各インスタンスにSM、メモリコントローラ、L2キャッシュ、HBMが独立割当
  • 完全な分離: インスタンス間のリソース競合なし
  • エラー分離: 1つのインスタンスのエラーが他に影響しない

対応GPU

GPU最大インスタンスHBMアーキテクチャ
A100 40GB740GB HBM2eAmpere
A100 80GB780GB HBM2eAmpere
A30424GB HBM2eAmpere
H100780GB HBM3Hopper
H2007141GB HBM3eHopper

MIG設定例

# MIGモード有効化(再起動必要)
sudo nvidia-smi -i 0 --mig 1

# 再起動後、MIGインスタンスを作成
# プロファイル一覧確認
nvidia-smi mig -lgip

# 3g.40gbインスタンスを2つ作成(A100 80GB基準)
sudo nvidia-smi mig -cgi 9,9 -C

# 作成されたインスタンスの確認
nvidia-smi mig -lgi
nvidia-smi mig -lci

# MIGインスタンスの削除
sudo nvidia-smi mig -dci
sudo nvidia-smi mig -dgi

# MIGモード無効化(再起動必要)
sudo nvidia-smi -i 0 --mig 0

MIG-backed vGPU

MIGとvGPUを組み合わせることで、ハードウェア分離とVMサポートを同時に提供します。

+--------+ +--------+ +--------+
| VM 1   | | VM 2   | | VM 3   |
| vGPU   | | vGPU   | | vGPU   |
+--------+ +--------+ +--------+
| vGPU Manager                  |
+------+-------+-------+-------+
| MIG 1| MIG 2 | MIG 3 | MIG 4 |  <-- ハードウェア分離
+------+-------+-------+-------+
|        Physical GPU           |
+-------------------------------+

- MIGスライス間: ハードウェア分離
- 同じMIG内の複数vGPU: タイムスライシング

SR-IOV for GPUs

PCIeレベルの仮想化

[SR-IOV構造]

PCIe Bus
    |
+---+---+---+---+---+---+
| PF    | VF 0 | VF 1 | VF 2 |
| (Host)| (VM1)| (VM2)| (VM3)|
+-------+------+------+------+
|          Physical GPU       |
+-----------------------------+

PF = Physical Function (ホスト管理)
VF = Virtual Function (VMに直接割当)
  • NVIDIA Ampere以降でGPU SR-IOVをサポート
  • AMD MxGPUもSR-IOVベース(Radeon Instinct/Pro)
  • 各VFは独立したPCIe機能として、IOMMUで分離
  • PFがGPU全体を管理しVFを作成/構成

KubernetesでのGPUタイムスライシング

最もシンプルなGPU共有方式で、特別なハードウェア機能なしにソフトウェアのみで実装されます。

[K8s GPU Time-Slicing]

+---Pod A---+ +---Pod B---+ +---Pod C---+
|  Process  | |  Process  | |  Process  |
|  CUDA     | |  CUDA     | |  CUDA     |
+-----------+ +-----------+ +-----------+
|    NVIDIA Device Plugin (time-slicing)  |
+-----------------------------------------+
|          Physical GPU                   |
|     (全プロセスが共有)                  |
+-----------------------------------------+

- NVIDIA GPU OperatorのTimeSlicing設定
- ハードウェア分離なし
- メモリ空間共有(OOM可能)
- MPS(Multi-Process Service)オプションでパフォーマンス改善可能
# NVIDIA GPU Operator ConfigMap例
# time-slicing-config
apiVersion: v1
kind: ConfigMap
metadata:
  name: time-slicing-config
data:
  any: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        renameByDefault: false
        failRequestsGreaterThanOne: false
        resources:
          - name: nvidia.com/gpu
            replicas: 4

総合比較表

項目PassthroughvGPU (mdev)vGPU (SR-IOV)MIGTime-Slicing
GPU共有不可可能 (SW)可能 (HW)可能 (HW)可能 (SW)
分離レベル完全(独占)タイムスライスPCIe VF空間分割なし
メモリ分離完全VRAMパーティションVRAMパーティションHBMパーティション共有
パフォーマンス95〜99%85〜95%88〜96%85〜95%可変
最大インスタンス1GPU依存VF数依存最大7制限なし
対応GPUすべてのGPUNVIDIA vGPUNVIDIA Ampere+A100/H100等すべてのNVIDIA
ライセンス不要NVIDIA vGPUNVIDIA vGPU不要不要
主な用途専用GPU VMVDI、マルチユーザーエンタープライズAI/MLマルチテナンシーK8s開発/テスト

選択ガイド

[GPU仮想化方式選択フローチャート]

開始: GPUを共有する必要がありますか?
  |
  +-- いいえ --> GPU Passthrough
  |              (最高パフォーマンス、1:1割当)
  |
  +-- はい --> ハードウェア分離が必要ですか?
               |
               +-- いいえ --> Kubernetesですか?
               |               |
               |               +-- はい --> Time-Slicing
               |               |          (最もシンプル)
               |               |
               |               +-- いいえ --> vGPU (mdev)
               |                              (VMベース共有)
               |
               +-- はい --> A100/H100等MIG対応GPUですか?
                           |
                           +-- はい --> MIG or MIG-backed vGPU
                           |          (最高レベルの分離)
                           |
                           +-- いいえ --> vGPU (SR-IOV)
                                          (Ampere+ HWパーティショニング)

クイズ: GPU仮想化理解度チェック

Q1. GPU PassthroughとvGPUの根本的な違いは?

GPU Passthroughは物理GPUを1つのVMに独占割り当てしネイティブ性能を提供します。vGPUは1つのGPUを複数のVMが共有可能にし、タイムスライシングまたはSR-IOVでリソースを分配します。

Q2. MIGが他のGPU共有方式より分離が優れている理由は?

MIGはGPUをハードウェアレベルで空間的に分割します。各インスタンスが専用のSM、メモリコントローラ、L2キャッシュ、HBMを持つため、インスタンス間のリソース競合が原理的に存在しません。エラーも分離されます。

Q3. SR-IOVにおけるPFとVFの役割は?

PF(Physical Function)はホストがGPU全体を管理するためのPCIe機能です。VF(Virtual Function)はPFから生成される仮想PCIe機能で、各VMに直接割り当てられ独立したGPUアクセスを提供します。

Q4. Kubernetes Time-Slicingの最大の弱点は?

ハードウェア分離が全くなく、すべてのPodがGPUメモリを共有します。1つのPodの過度なメモリ使用が他のPodにOOMを引き起こす可能性があり、セキュリティ境界も不明確です。

Q5. vGPUを使用するために必ず必要なものは?

NVIDIA vGPU Software Licenseが必要です。ライセンスサーバー(DLSまたはCLS)を構築し、vGPU Managerソフトウェアをハイパーバイザーにインストールする必要があります。GPU PassthroughやMIG単独使用にはライセンスは不要です。