OpenShift 4.16 × NVIDIA L4 GPU環境における vGPU と TimeSlicing の比較と導入方法
vSphere環境にOpenShiftを構築し、AIワークロードやGPU活用を進める際、GPUのリソースを複数Podで共有したいというニーズが高まっています。特にNVIDIAのL4 GPUを使う場合、その性能を最大限に活かすために「vGPU(仮想GPU)」と「TimeSlicing(時分割)」という2つのアプローチがあります。
本記事では、OpenShift 4.16 上に構築されたGPUノードで、vGPUとTimeSlicingをどのように選択・設定すべきかを、メリット・デメリットも含めて解説します。
はじめに:今回の前提環境
- OpenShiftバージョン:4.16
- GPUモデル:NVIDIA L4(Ampereアーキテクチャ)
- 仮想化基盤:vSphere上のESXiホスト
- 目的:GPUリソースの効率的な共有(1ノードを複数Podで利用)
なお、L4はMIG(Multi-Instance GPU)に対応していないため、MIGの構成は対象外とし、vGPU と TimeSlicing のみを比較対象とします。
vGPU(仮想GPU)とは?
特徴
vGPUは、GPUをハイパーバイザー(今回はESXi)レベルで仮想化し、仮想マシン単位にGPUリソースを割り当てる技術です。仮想マシンごとにvGPUプロファイル(例:1GB, 4GBなど)を指定することで、GPUの物理リソースを複数VMに分割可能です。
メリット
- ハード的にリソースを分割するため、安定性・セキュリティに優れる
- QoSの担保がしやすく、ワークロードごとに明確な割り当てが可能
- VMware vSphereとの親和性が高く、管理が一元化しやすい
デメリット
- vGPUライセンス(NVIDIA vGPUソフトウェア)が必要
- Pod単位のスケジューリングは難しく、仮想マシン単位の制御になる
- 柔軟な分割(1GPUを多数のPodで共有など)がしづらい
設定方法(概要)
- ESXiでvGPU機能が有効なホストを用意
- NVIDIA vGPU Manager をESXiにインストール
- vGPUプロファイルを指定してOpenShiftノード用のVMを作成
※同じノードに異なるvGPUプロファイルを指定することはNG
podからの要求はvGPUの個数のためサイズを区別できない - VM内にNVIDIAドライバを導入し、Device Pluginを設定
- Pod定義で
nvidia.com/gpu
をリクエストしてスケジューリングapiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: gpu-container
image: nvidia/cuda:12.2.0-base-ubuntu22.04
resources:
limits:
nvidia.com/gpu: 1 # ← GPUを1つリクエスト
TimeSlicing(時分割共有)とは?
特徴
TimeSlicingは、物理的な1枚のGPUを時間的に分割し、複数のPodに割り当てる方法です。OpenShiftのGPU Device Pluginにより、論理的な「1GPU = nPod」の構成が可能になります。
メリット
- ライセンス不要(NVIDIA A100 などの特別なハード前提なし)
- 物理GPUの柔軟な共有が可能(例:1枚のL4を4つのPodで共有)
- Pod単位でのGPU利用が可能になり、Kubernetes的な運用がしやすい
デメリット
- ハードウェアリソースを時間的に共有するため、性能の揺らぎが出る
- セキュリティ/安定性の担保がvGPUに比べて劣る
- OpenShift側の設定やカスタムがやや複雑
設定方法(概要)
- GPUドライバ(NVIDIA L4対応)とCUDAツールキットをVMに導入
- NVIDIA GPU Operator をOpenShiftに導入
pod-resource-api
を使ってnvidia.com/gpu.shared
のようなリソースリクエストを定義- ConfigMapなどで
time-slicing
の割当単位を設定(例:4Pod分割)apiVersion: v1
kind: Pod
metadata:
name: gpu-timeslice-pod
spec:
containers:
- name: app
image: your-gpu-app
resources:
limits:
nvidia.com/gpu: 0.25
比較まとめ
vGPUとTimeSlicingの比較表
項目 | vGPU | TimeSlicing |
---|---|---|
仮想化単位 | VM単位(vSphere依存) | Pod単位(K8sネイティブ) |
ライセンス | 有償(NVIDIA vGPUライセンス) | 不要(NVIDIAドライバで可) |
安定性・QoS | 高い | 中程度(共有による揺らぎ) |
柔軟性 | 中(プロファイル依存) | 高(柔軟なPod分割可能) |
設定の複雑さ | 低〜中(VM設定中心) | 中〜高(K8s構成の理解が必要) |
導入ハードル | 高(vSphere + vGPUセットアップ必要) | 中(K8sにnvidia-device-pluginで済む) |
GPUリソースの粒度 | 粗い(プロファイル単位) | 細かい(時間スライスで分割) |
Kubernetesとの親和性 | 低(外部仮想化に依存) | 高(K8sネイティブに統合可能) |
可搬性 | 低(vSphere環境前提) | 高(任意のK8s環境で利用可能) |
モニタリング・運用 | vCenter等の外部ツールが必要 | K8s内のツールで一元管理が可能 |
結論:どちらを選ぶべきか?
- 高い安定性と明確なリソース分割を求める場合:vGPUがおすすめ。特に既存のvSphere環境を活かしつつ、商用環境でのGPU運用を前提とするケースに適しています。
- 柔軟性とコストを重視する場合:TimeSlicingが有効。PoCや軽量ワークロード、小規模クラスタでのGPU活用に最適です。
本番環境では、まずPoCでTimeSlicingを試し、性能や安定性に課題があればvGPUに移行する、というアプローチも現実的です。
OpenShift × GPUの世界は日々進化しています。OpenShift 4.16はNVIDIA GPU Operatorとの相性も良く、TimeSlicingなどの共有設定も進化しています。vSphere環境でもGPU活用が広がる中で、適切な構成選定が今後の運用を大きく左右します。ぜひ本記事を参考に、最適なGPU活用戦略を練ってみてください。
コメント