このトピックでは、Alibaba Cloudが提供するGPU共有ソリューションを紹介し、GPU sharing Professional Editionの利点について説明し、GPU Sharing Basic EditionとGPU Sharing Professional Editionの機能と使用シナリオを比較します。 これにより、GPU共有をよりよく理解して使用できます。
背景情報
GPU共有を使用すると、同じGPUデバイスで複数のコンテナーを実行できます。 Container Service for Kubernetes (ACK) がGPU共有をオープンソースにした後、Alibaba Cloudで実行されるKubernetesクラスターでGPU共有を使用したり、セルフマネージドKubernetesクラスターでGPU共有を実行したりできます。 GPU共有により、GPUの費用が削減されます。 ただし、1つのGPUで複数のコンテナーを実行する場合、コンテナーの安定性は保証されません。
コンテナの安定性を確保するには、各コンテナに割り当てられているGPUリソースを分離する必要があります。 1つのGPUで複数のコンテナを実行すると、要求に応じて各コンテナにGPUリソースが割り当てられます。 ただし、1つのコンテナが過剰なGPUリソースを占有すると、他のコンテナのパフォーマンスに影響を与える可能性があります。 この問題を解決するために、コンピューティング業界では多くのソリューションが提供されています。 たとえば、NVIDIA vGPU、マルチプロセスサービス (MPS) 、およびvCUDAは、GPUのきめ細かい共有を可能にします。
ACKは、前述の要件を満たすGPU共有ソリューションを提供します。 GPU共有により、GPUを複数のタスクで共有できます。 GPU共有では、各アプリケーションに割り当てられているGPUメモリを分離し、GPUのコンピューティング能力を分割することもできます。
特徴と利点
GPU共有ソリューションは、Alibaba Cloudによって開発されたサーバーカーネルドライバーを使用して、NVIDIA GPUの基盤となるドライバーをより効率的に使用します。 GPU共有は、次の機能を提供します。
高い互換性: GPU共有は、KubernetesやNVIDIA Dockerなどの標準のオープンソースソリューションと互換性があります。
使いやすさ: GPU共有は優れたユーザーエクスペリエンスを提供します。 AIアプリケーションのCompute Unified Device Architecture (CUDA) ライブラリを置き換えるために、アプリケーションを再コンパイルしたり、新しいコンテナイメージを作成したりする必要はありません。
安定性: GPU共有は、NVIDIA GPUで安定した基礎操作を提供します。 CUDAライブラリでのAPI操作、およびCUDA Deep Neural Network (cuDNN) での一部のプライベートAPI操作を呼び出すのは困難です。
リソースの分離: GPU共有により、割り当てられたGPUメモリとコンピューティングパワーが相互に影響しないようにします。
GPU共有は、費用対効果が高く、信頼性が高く、使いやすいソリューションを提供し、GPUのスケジューリングとメモリの分離を可能にします。
メリット | 説明 |
GPU共有、スケジューリング、およびメモリ分離をサポートします。 |
|
柔軟なGPU共有およびメモリ分離ポリシーをサポートします。 |
|
GPUリソースの包括的なモニタリングをサポートします。 | 専用GPUと共有GPUの両方のモニタリングをサポートします。 |
課金
GPU共有は有料サービスです。 GPU共有を使用する前に、クラウドネイティブAIスイートを有効化する必要があります。 課金の詳細については、「クラウドネイティブAIスイートの課金」をご参照ください。
使用上の注意
GPU共有はACK Proクラスターのみをサポートします。 GPU共有をインストールして使用する方法の詳細については、以下のトピックを参照してください。
GPU共有によって提供される次の高度な機能を使用することもできます。
条件
共有モードと排他モード
次の図に示すように、共有モードでは、複数のポッドが1つのGPUを共有できます。
次の図に示すように、排他モードでは、ポッドが1つ以上のGPUを排他的に占有できます。
GPUメモリ分離
GPU共有は、複数のポッドが1つのGPUで実行されることのみを保証できますが、GPUメモリの分離が無効になっている場合、ポッド間のリソース競合を防ぐことはできません。 次のセクションは例を示します。
Pod 1は5 GiBのGPUメモリを要求し、Pod 2は10 GiBのGPUメモリを要求します。 GPUメモリの分離が無効になっている場合、Pod 1は最大10 GiBのGPUメモリを使用できます。これには、Pod 2が要求した5 GiBのGPUメモリが含まれます。 その結果、ポッド2はGPUメモリが不足して起動できません。 GPUメモリ分離を有効にした後、ポッド1が要求された値より大きいGPUメモリを使用しようとすると、GPUメモリ分離モジュールはポッド1を強制的に失敗させます。
GPUスケジューリングポリシー: binpackとspread
GPU共有機能が有効になっているノードに複数のGPUがある場合、次のいずれかのGPU選択ポリシーを選択できます。
Binpack: デフォルトでは、binpackポリシーが使用されます。 スケジューラは、別のGPUに切り替える前に、GPUのすべてのリソースをポッドに割り当てます。 これにより、GPUフラグメントを防ぐことができます。
Spread: スケジューラは、GPUに障害が発生したときにビジネスの中断が発生した場合に、ノード上の異なるGPUにポッドを拡散しようとします。
この例では、ノードは2つのGPUを有する。 各GPUは15 GiBのメモリを提供します。 Pod1は2 GiBのメモリを要求し、Pod2は3 GiBのメモリを要求します。
単一GPU共有および複数GPU共有
単一GPU共有: ポッドは、1つのGPUによってのみ割り当てられたGPUリソースを要求できます。
複数のGPU共有: ポッドは、複数のGPUによって均等に割り当てられたGPUリソースを要求できます。