このページでは、GPU と Dataflow を連携させるための背景情報を提供します。
GPU を使用した開発ジョブを開始する前に、GPU での開発を参照して、GPU を使用してパイプラインを構築するためのデベロッパー ワークフローとヒントを確認してください。
Dataflow ジョブで GPU を有効にする方法と例については、GPU の使用と GPU を使用した Landsat 衛星画像の処理をご覧ください。その他の例については、次のセクションをご覧ください。
Dataflow ジョブで GPU を使用すると、一部のデータ処理タスクを高速化できます。GPU では特定の計算を CPU よりも迅速に実行できます。通常、これらの計算は数値または線形代数であり、画像処理や ML のユースケースでよく使用されます。パフォーマンス向上の程度は、ユースケース、計算のタイプ、処理されるデータの量によって異なります。
Dataflow で GPU を使用するための前提条件
Dataflow は、Docker コンテナ内のワーカー VM でユーザーコードを実行します。これらのワーカー VM は Container-Optimized OS を実行します。Dataflow ジョブで GPU を使用するには、次のインストールを行う必要があります。
- GPU ドライバはワーカー VM にインストールされ、Docker コンテナにアクセスできます。詳細については、GPU ドライバのインストールをご覧ください。
- パイプラインに必要な GPU ライブラリ(NVIDIA CUDA-X ライブラリや NVIDIA CUDA ツールキットなど)は、カスタム コンテナ イメージにインストールされます。詳細については、コンテナ イメージの構成をご覧ください。
料金
GPU を使用するジョブでは、Dataflow の料金ページで定められた料金が発生します。
考慮事項
マシンタイプの仕様
各 GPU モデルに対するマシンタイプのサポートの詳細については、GPU プラットフォームをご覧ください。N1 マシンタイプでサポートされている GPU は、カスタム N1 マシンタイプもサポートしています。
GPU のタイプと数により、ワーカーが使用できる vCPU とメモリの上限が決まります。対応する制限については、可用性のセクションをご覧ください。
より多くの CPU またはメモリを指定する場合は、より多くの GPU の数の指定が必要になることがあります。
詳細については、Compute Engine の GPU をご覧ください。
GPU とワーカーの並列処理
Dataflow Runner v2 アーキテクチャを使用する Python パイプラインの場合、Dataflow は VM コアごとに 1 つの Apache Beam SDK プロセスを起動します。各 SDK プロセスは、固有の Docker コンテナで実行され、多数のスレッドを生成します。各スレッドは受信データを処理します。
GPU は複数のプロセス アーキテクチャを使用し、Dataflow ワーカーの GPU はすべてのプロセスとスレッドに表示されます。そのため、GPU メモリのオーバーサブスクリプションを回避するために、GPU のアクセス管理が必要になる場合があります。TensorFlow を使用している場合は、次のいずれかの方法を使用して GPU メモリのオーバーサブスクリプションを回避できます。
ワーカー vCPU の数に関係なく、1 つのコンテナ化された Python プロセスのみを開始するように Dataflow ワーカーを構成する。これを構成するには、ジョブの起動時に次のパイプライン オプションを使用します。
--experiments=no_use_multiple_sdk_containers
--number_of_worker_harness_threads
使用するスレッド数の詳細については、スレッド数の削減をご覧ください。
1 つの vCPU のみのマシンタイプを使用する。
複数の TensorFlow プロセスが同じ GPU を使用している場合は、GPU メモリの一部のみを使用するように各プロセスの構成が必要になることがあります。この構成により、すべてのプロセスが GPU メモリをオーバーサブスクライブすることを防ぐことができます。このような構成は単純ではないため、TensorFlow プロセスの数は制限してください。
可用性
使用可能な GPU のタイプとワーカー VM の構成については、Dataflow のロケーションをご覧ください。
次のステップ
- GPU の使用のタスクの詳細を確認する。
- GPU を使用した Landsat 衛星画像の処理に取り組む。