すべてのプロダクト
Search
ドキュメントセンター

:GPU共有とメモリ分離にMPSを使用する

最終更新日:Oct 30, 2024

マルチコアCPUを備えたマシンでは、メッセージパッシングインタフェース (MPI) プロセスは、通常、並列処理を容易にするために異なるCPUコアにわたって分散される。 ただし、これらのプロセスが計算の高速化のためにCompute Unified Device Architecture (CUDA) カーネルを使用すると、GPUアクセスと競合し、不適切な割り当てやGPUリソースの非効率的な使用につながります。 マルチプロセスサービス (MPS) は、NVIDIA GPU上の複数のCUDAアプリケーションまたはMPIプロセスからの要求を管理するために使用でき、AIアプリケーションの効率的なGPU共有とメモリ分離を可能にします。 これは、MPSパターンに基づいてContainer Service for Kubernetes (ACK) コンソールでノードプールの特定のラベルを設定することによって実現されます。

特集紹介

MPIに基づくCPUコアの並列化により、CPU集約型タスク間のバランスの取れたリソース割り当てが可能になり、複数の計算タスクを同時に実行できるようになり、計算プロセス全体が高速化されます。 ただし、CUDAカーネルを使用してMPIプロセスを高速化すると、各MPIプロセスに割り当てられたワークロードがGPUを完全に使用しない場合があります。 これにより、各MPIプロセスの速度が向上する可能性がありますが、GPU全体の使用量は低くなります。 アイドルリソースは、アプリケーションがGPUに十分なタスクを送信しない場合に存在します。 この場合、NVIDIA GPUで複数のCUDAアプリケーションを実行するために設計されたテクノロジであるMPSを使用することを推奨します。

MPSを使用すると、同じGPUデバイス上で異なるアプリケーションを同時に実行できるため、クラスターGPUリソースの使用率が向上します。 クライアント-サーバーアーキテクチャで動作し、バイナリ互換性を保証し、既存のCUDAアプリケーションに大幅な変更を加える必要はありません。 MPSコンポーネントは次のとおりです。

  • コントロールデーモンプロセス: MPSサーバの起動とシャットダウンを管理します。 また、クライアントとMPSサーバー間の接続を調整して、GPUリソースのスムーズな要求と使用を保証します。

  • クライアントランタイム: CUDAドライバーライブラリ内に埋め込まれています。 これにより、開発者はCUDAアプリケーションコードを大幅に変更することなくMPSを使用できます。 GPU操作中、MPSサーバーとのやり取りを自動的に管理し、アプリケーション間で安全で効率的なGPU共有を実現します。

  • サーバープロセス: 複数のクライアントからの要求を処理し、GPUデバイス上で効率的にスケジュールして、クライアント間の同時実行を実現します。

前提条件

制限事項

  • ノードでMPSモードのメモリ分離が有効になっている場合、Control Daemon Processは排他的GPUモードを使用して、ノード全体のGPUを独占します。 MPSのクライアント-サーバーアーキテクチャでは、クライアントはMPSサーバーからGPUリソースを要求します。

  • MPSモードでのGPUスケジューリングは、共有メモリモードのみをサポートします。 共有計算能力モードはサポートされていません。

手順

コンソールでノードプールを作成し、プール内のノードにack.node.gpu.schedule:mpsラベルを追加し、MPSモードでGPU共有とメモリ分離を有効にします。 この設定は、プール内のすべてのノードに適用されます。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  3. [ノードプールの作成] をクリックし、ノードラベルおよびその他の必要な設定を設定し、[注文の確認] をクリックします。

    次の表に、主要なパラメーターを示します。 パラメーターの完全なリストの詳細については、「ノードプールの作成」をご参照ください。

    パラメーター

    説明

    期待されるノード

    ノードプール内の初期ノード数。 ノードプールにノードを作成しない場合は、このパラメーターを0に設定します。

    ノードラベル

    Keyをack.node.gpu.scheduleとして、Valueをmpsとして割り当てます。

    設定が完了したら、[GPU共有を使用してGPUを共有する例] の手順に従って、アプリケーションを実行するポッドで必要なメモリリソース (aliyun.com/gpu-mem) を宣言できます。

関連ドキュメント

GPU共有が有効になっているコンテナーを作成するようにYAMLファイルを設定する方法の詳細については、「GPU共有を使用してGPUを共有する例」をご参照ください。