メインコンテンツまでスキップ

FPT Kubernetes EngineのvGPU機能

FPT Managed GPU Cluster はオープンソースのK8sプラットフォームをベースに構築され、コンテナアプリケーションのデプロイ、スケーリング、管理を自動化します。Container Orchestration、Storage、Networking、Security、PaaSコンポーネントを統合し、クラウド上でアプリケーションを開発・デプロイするための最適な環境を提供します。

FPT Managed GPU Cluster は1つのNVIDIA GPU上で複数のコンテナ/プロセスのためにvGPU機能を提供します。この機能を使用することで、GPUの使用コストを最適化できます。

前提条件

  • FPT managed GPU clusterを初期化するために、managed GPU clusterサービスをアクティベートし、ストレージ、パブリックIPなどのクォータが十分にあること。
  • GPU OperatorがClusterにインストールされていること。
  • Worker groupがPre-installed driverを使用しているか、手動でdriverがインストールされていること。
  • Worker groupがGPU worker groupタイプであること。

インストールガイド

手順1: GPU softwareインストールセクションでvGPU schedulerをインストールし、ステータスがreadyになるまで待ちます。

手順2: GPU worker groupタブで、各worker groupにelastic GPU schedulerコンポーネントを有効にするかどうかを選択できます。

注意:

  • worker groupにvGPU schedulerを有効にした場合、そのworker group上のMIG、MPS、Time Slicingなどの他のすべての共有モードを無効にする必要があります。
  • vGPU schedulerを使用する必要がない場合は、GPU scheduler typeをNoneに設定してください。その場合、通常どおりMIG、MPS、Time SlicingなどのGPU共有ソリューションを使用できます。
  • 1つのGPUを共有できるコンテナの最大数は48ですが、全体的なパフォーマンスを確保するために、1つのGPUあたり20以下のvGPUを使用することを推奨します。

手順3: 指定されたノードのvGPU schedulerのステータスを確認します。

vGPU device pluginポッドがready状態であることを確認する

コマンド:

kubectl get pods --all-namespaces --field-selector spec.nodeName=<node_name> -o wide | grep device-plugin

ノード上のvGPUリソースを確認する:

kubectl describe node <node_name> | grep Allocatable -A9

nvidia.com/vgpu リソースが表示され、値が1より大きい場合、ノード上のvGPUは使用可能な状態です。

手順3: vGPUを使用してKubernetes上にサンプルワークロードをデプロイします。

apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-gpt2
spec:
replicas: 1
selector:
matchLabels:
app: vllm-gpt2
template:
metadata:
labels:
app: vllm-gpt2
spec:
containers:
- name: vllm
image: vllm/vllm:latest
args:
- --model=gpt2
- --tensor-parallel-size=1
- --port=8000
ports:
- containerPort: 8000
resources:
limits:
nvidia.com/vgpu: 1 # 1 vGPUを要求
nvidia.com/vgpumem: 40000 # コンテナに40000 MiB DRAMを要求
restartPolicy: Always

注意:

nvidia.com/vgpu: 1 は1つの物理GPU上でのvGPU共有を使用することを意味します。nvidia.com/vgpu: 2 を要求する場合、2つの物理GPUが必要です。

結果:

ここでは、VLLMコンテナは最大40000 MiBのGPU DRAMしか使用できません。

vGPU schedulerの機能

FPT Cloud vGPU schedulerは以下の機能を提供します:

1. 柔軟なGPUリソース共有 — 設定可能なパラメーター:

  • resourceName: "nvidia.com/vgpu" — podが使用するGPUの数(例:2は2つのGPUに対応)
  • resourceMem: "nvidia.com/vgpumem" — podがGPUごとに使用するメモリ(例:3000は3000 MB GPU Memoryに対応)
  • resourceMemPercentage: "nvidia.com/vgpumem-percentage" — vgpumemと同じですが、パーセンテージで表現
  • resourceCores: "nvidia.com/vgpucores" — GPU coreの最大使用量を制限

2. メモリ分離

FPT device pluginでは、コンテナが使用できるリソースの最大量を管理することをサポートしています。コンテナのリソース要求時に nvidia.com/vgpumem フィールドを編集できます。

3. シングルGPU共有とマルチGPU共有

  • コンテナのGPUリクエスト(nvidia.com/vgpu)を変更することで、podが1つまたは2つのGPUを使用できます。
  • コンテナが要求する各vGPUのgpumemやgpu coresリソースも変更できます。

注意:

コンテナで nvidia.com/gpu: 2 を設定すると、コンテナは2つの異なる物理GPU上に配置された2つのvGPUを使用することになります(同一物理GPU上の2つのvGPUではありません)。

nvidia.com/vgpumem または nvidia.com/vgpucores を指定しない場合、schedulerはノードの対応するリソースをすべて使用したいと解釈します。

このdevice pluginを有効にした場合、すべてのコンテナがGPUを使用する複数コンテナの単一podは使用しないことを推奨します。

vGPU schedulerとNVIDIA GPU共有ソリューションの比較

機能FPTCloud vGPUMPSTime-slicingMIGNvidia vGPU
対象ユースケースGPUを使用するコンテナ向けの柔軟なGPU共有とスケジューリングポリシー。複数アプリケーションを並列実行し、プロセスが突然停止するリスクと引き換えにパフォーマンスを得る。ワークロードをGPUに投入してGPUに残りの処理を任せたいだけの場合の原始的なGPU共有方法。QoSと耐障害性を確保したGPU共有。MIGプロファイルの全体的なパフォーマンス低下と柔軟性の低さを受け入れる。マルチテナント、複数VMが1つの物理GPUを共有。NVIDIAのライセンスコストを受け入れる。
パーティションタイプ論理論理時間的物理的時間的 & 物理的(VM)
最大パーティション数無制限48無制限7変動
SM パフォーマンス分離あり(クライアントごとではなく%単位)あり(クライアントごとではなく%単位)なしありあり
メモリ保護ありありなしありあり
メモリ帯域幅なしなしなしありあり
エラー分離ありなしありありあり
再設定プロセス起動時プロセス起動時タイムスライス期間のみアイドル時なし
テレメトリあり限定的なしあり(コンテナ内を含む)あり(ライブマイグレーションを含む)
その他注目点すべてのGPUをサポートcudaCapability >= 3.5cudaCapability >= 7.0cudaCapability >= 8.0(Hopper、Ampere)ライセンス必要