NVIDIA MPS を使用して共有 GPU のパフォーマンスを改善する

共有 Dataflow GPU で複数の SDK プロセスを実行する場合、NVIDIA マルチプロセス サービス(MPS)を有効にすることで、GPU の効率と使用率を改善できます。MPS は、プロセスが CUDA コンテキストの共有を可能にし、リソースをスケジューリングすることで、GPU の同時処理をサポートします。MPS を使用すると、コンテキスト切り替えのコストが削減され、並列性処理を増加させ、ストレージ要件が削減されます。

ターゲット ワークフローは、複数の vCPU を持つワーカーで実行される Python パイプラインです。

MPS は、汎用 GPU コンピューティングをサポートする NVIDIA プラットフォームである CUDA API を実装している NVIDIA テクノロジーです。詳細については、NVIDIA Multi-Process Service ユーザーガイドをご覧ください。

利点

  • 特に GPU リソースの使用量が少ないワークロードに対し、GPU パイプラインの並列処理と全体的なスループットを向上させます。
  • GPU 使用率が向上し、費用を削減できる可能性があります。

サポートと制限事項

  • MPS は、単一の GPU を使用する Dataflow ワーカーでのみサポートされます。
  • パイプラインでは、並列処理を制限するパイプライン オプションを使用できません。
  • 特に大規模な ML モデルの読み込みに関連するユースケースでは、利用可能な GPU メモリを超えないようにしてください。vCPU と SDK のプロセス数と、これらのプロセスが必要とする使用可能な GPU メモリのバランスを取ります。
  • MPS は、GPU 以外のオペレーションの同時実行には影響しません。
  • Dataflow Prime は MPS をサポートしていません。

MPS を有効にする

GPU を使用してパイプラインを実行する場合は、次の手順で MPS を有効にします。

  • パイプライン オプション --dataflow_service_options で、worker_accelerator パラメータに use_nvidia_mps を追加します。
  • count を 1 に設定します。
  • パイプライン オプション --experiments=no_use_multiple_sdk_containers は使用しないでください。

パイプライン オプション --dataflow_service_options は次のようになります。

--dataflow_service_options="worker_accelerator=type:GPU_TYPE;count:1;install-nvidia-driver;use_nvidia_mps"

TensorFlow を使用して MPS を有効にするには、次の操作を行います。

  1. GPU で動的メモリ割り当てを有効にします。次のいずれかの TensorFlow オプションを使用します。
    • tf.config.experimental.set_memory_growth(gpu, True) を呼び出してメモリの増加を有効にします。
    • 環境変数 TF_FORCE_GPU_ALLOW_GROWTH を true に設定します。
  2. 適切なメモリ制限をもつ論理デバイスを使用します。
  3. 最適なパフォーマンスを得るには、ソフトデバイス配置または手動配置を使用します。可能であれば GPU の使用を適用します。

次のステップ