CUDA 13.4とKAI SchedulerでKubernetesにおけるGPUメモリ制限を強制する
NVIDIA CUDA 13.4は、GPU共有のための透過的なメモリ強制機能を導入しました。新しいGPU Fractioning OperatorとKAI Scheduler v0.18.0により、これらの機能がKubernetesクラスタに提供されます。
英語の原文から自動翻訳されました。
NVIDIAはCUDA 13.4をリリースし、GPUワークロードに対する透過的なメモリ境界の強制を導入しました。これをKubernetesで運用可能にするため、オープンソースのGPU Fractioning OperatorがKAI Scheduler v0.18.0と連携し、フラクショナルなGPUリソースを管理します。この組み合わせにより、プラットフォームチームは厳格なメモリ分離を維持しながら、より効率的にGPUを共有できるようになります。
何が起きたか
多くのAI推論および開発ワークロードでは、GPU全体を必要としません。小さなジョブにフルデバイスを割り当てると、大幅なアイドル容量が発生します。NVIDIA GPUは以前からMulti-instance GPU (MIG)、タイムスライシング、またはMulti-Process Service (MPS)による共有をサポートしていましたが、従来の方法では共有モードでの堅牢なメモリ強制機能がありませんでした。タイムスライシングではプロセスが順番に実行できますが、あるプロセスがすべての利用可能なメモリを消費することを防ぐことはできませんでした。MPSでは並行実行が可能でしたが、メモリ使用量はアプリケーションレベルの規律に依存していました。
CUDA 13.4は、ドライバレベルでメモリ境界を透過的に強制することでこのギャップを解消します。アプリケーションは自分に割り当てられたメモリ割合のみを表示し、この制限を超える割り当ては直ちに失敗します。この低レベルの機能とKubernetesオーケストレーション間のギャップを埋めるため、NVIDIAはGPU Fractioning Operatorを導入しました。GitHub上のKAI Scheduler組織の下でホストされているこのオペレータは、NVIDIA GPU Operatorと並行して動作します。ノードごとのMPSセットアップの管理、ワークロード単位のメモリ制限の適用、そしてGPU全体ではなくフラクションごとの使用状況の報告を行います。
KAI Scheduler v0.18.0は、NvFractionsと呼ばれる新しいGPU共有モードを通じて、このオペレータと直接統合されています。スケジューラは利用可能なメモリに基づいて適切なGPUを選択し、Pod仕様に特定の注釈(アノテーション)を書き込みます。GPU Fractioning Operatorはこれらの注釈を読み取り、コンテナ起動前に要求されたメモリ制限と計算モードを強制するようにノードを設定します。この関心事の分離により、スケジューリング決定とノードレベルの強制が明確に区別されることが保証されます。
仕組み
システムは、GPUリソース共有のために2つの計算モード、すなわちタイムスライシングとsm-sharing(SM共有)に依存しています。タイムスライシングでは、ワークロードがGPU全体を順番に使用します。あるワークロードがアイドル状態の場合、その時間スロットは他のワークロードに再配分されます。このモードは完全なエラー分離を提供するため、あるワークロードのクラッシュが他に影響を与えることはありません。sm-sharingでは、GPUのストリーミングマルチプロセッサ(SM)が並行ワークロード間で分割されます。すべてのアクティブなワークロードが同時に実行され、未使用のSMは動的に再割り当てされます。しかし、sm-sharingではワークロードが単一のエラードメインに配置されるため、あるワークロードの障害が他に影響を与える可能性があります。
CUDA 13.4は、計算モードに関係なくメモリ制限を強制します。ワークロードは正確なメモリ量、または保証された最小値とバースト可能な最大値で構成される範囲を要求できます。ワークロードが制限を超えてメモリを割り当てようとすると、より小さい物理GPU上で発生する場合と同様に、割り当ては失敗します。この強制はアプリケーションに対して透過的であり、コードの変更は不要です。GPU Fractioning Operatorは、基盤となるMPSデーモンを設定し、フラクションごとの使用状況を監視することで、これらの制限が適用されることを保証します。
スケジューラは、標準的なKubernetes Pod注釈を使用して要件をオペレータに伝えます。これらの注釈には、保証されたメモリリクエスト、オプションのバーストリミット、希望する計算モード、および割り当てられた具体的なGPUデバイスが指定されます。オペレータはこれらのフィールドを解析し、ノードレベルの設定に変換します。このメカニズムにより、これらの注釈を書き込める任意のKubernetesスケジューラがCUDAのメモリ強制機能を活用できますが、ネイティブ統合を提供するのはKAI Schedulerが初めてです。
主要な詳細
- CUDA 13.4は透過的なメモリ境界強制を導入し、共有GPUワークロードに対して正確なメモリ量またはバースト可能な範囲を許可します。
- GPU Fractioning Operatorは、MPSの設定、メモリ制限の適用、およびGPUフラクションごとの使用計測を行うオープンソースツールです。
- KAI Scheduler v0.18.0には、オペレータが強制するために必要なPod注釈を書き込む
NvFractionsモードが含まれています。 - ワークロードは、タイムスライシング(エラー分離を伴うシリアル実行)とsm-sharing(動的SM割り当てを伴う並列実行)の間で選択できます。
- メモリリクエストは絶対サイズ(例:"40Gi")やGPUの一部(例:"0.5")として定義できます。
- 管理者は、KAI Schedulerのインストール時にHelmフラグを使用して統合を有効化し、これによりGPU Fractioning Operatorが依存関係としてインストールされます。
なぜ重要なのか
MLインフラストラクチャを構築しているエンジニアリングチームにとって、このアップデートは安定性を犠牲にすることなくリソース利用率を大幅に改善します。以前は、GPUの共有はしばしば、 poor isolation(MPS)か rigid partitioning(MIG)かのどちらかを選ぶことを意味していました。CUDA 13.4とGPU Fractioning Operatorにより、チームは既存のハードウェア上により多くのワークロードを詰め込みながら、単一のジョブが他のジョブからメモリを奪い取ることを防ぐことができます。これは、ワークロードのサイズや強度が異なる推論サービスや開発環境において特に価値があります。
バースト可能なメモリ制限を定義できる機能は、時々追加のリソースが必要になるバッチジョブやトレーニングタスクに柔軟性をもたらします。メモリが空きであれば、ワークロードはその領域に拡張できます。そうでなければ、保証された最小値内に留まります。この動的割り当てにより、過剰プロビジョニングの必要性が減ります。さらに、タイムスライシングとsm-sharingの明確な区別により、アーキテクトはワークロードの耐障害性要件に合わせて共有モードを選択できます。重要な本番サービスは分離のためにタイムスライシングを使用でき、回復力のあるバッチジョブは高いスループットのためにsm-sharingを使用できます。
実施できること
global.nvFractions.set=trueHelmフラグを使用してKAI Scheduler v0.18.0以降をインストールし、GPUフラクショニングサポートを有効化してください。- インストールガイドと設定の詳細については、GitHub上のGPU Fractioning Operatorリポジトリを確認してください。
- フラクショナルワークロードをデプロイする際、メモリリクエスト、制限、および計算モード用の注釈を含めるようにPod仕様を更新してください。
- エラー分離が必要なワークロードにはタイムスライシングを、並列実行と動的SM使用が必要なワークロードにはsm-sharingを選択してください。
- GPU Fractioning Operatorが提供するメトリクスを使用してフラクションごとのGPU使用状況を監視し、リソース割り当てを最適化してください。
- 質問をしたりプロジェクトに貢献したりするために、KAI Scheduler Slackチャンネルや隔週のコミュニティミーティングに参加してください。



