共有 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 を有効にするには、次の操作を行います。
- GPU で動的メモリ割り当てを有効にします。次のいずれかの TensorFlow オプションを使用します。
tf.config.experimental.set_memory_growth(gpu, True)
を呼び出してメモリの増加を有効にします。- 環境変数
TF_FORCE_GPU_ALLOW_GROWTH
を true に設定します。
- 適切なメモリ制限をもつ論理デバイスを使用します。
- 最適なパフォーマンスを得るには、ソフトデバイス配置または手動配置を使用します。可能であれば GPU の使用を適用します。
次のステップ
- さらにベスト プラクティスを確認するには、GPU とワーカーの並列処理をご覧ください。