Dataflow HPC の高度な並列ワークロードについて

高度な並列ワークロード(Embarrassingly Parallel なワークロード)は、金融、メディア、ライフ サイエンス企業でよく使用されています。通常、このような並列ワークロードの場合は、コンピューティング ノードのクラスタがデプロイされています。各ノードはグリッド コンピューティングと呼ばれる構成で、独立した処理タスクを実行できます。並列ワークロードのデータ処理には、Dataflow と Apache Beam を使用できます。Apache Beam の詳細については、Apache Beam プログラミング ガイドをご覧ください。

高度な並列ワークロードに Dataflow を使用すると、多くのメリットがあります。

さらに、Dataflow にはさまざまなセキュリティ機能があります。

これらのワークロードでは、多くのコアで実行される機能にデータを分散する必要があります。このような分散では、並行性の高い読み取りが必要になることが多く、ダウンストリーム システムに取り込まれる大規模なデータ ファンアウトがしばしば発生します。Dataflow の中核となる機能は、リソース間でのバッチ ワークロードとストリーム ワークロードの分散と、リソース全体での自動スケーリングと動的作業再調整の管理です。そのため、高度な並列ワークロードに Dataflow を使用すると、パフォーマンス、スケーラビリティ、可用性、セキュリティのニーズが自動的に処理されます。

外部コードをパイプラインに組み込む

Apache Beam には現在、Java、Python、Go 用の SDK が組み込まれています。ただし、多くの並列ワークロードは C++ で記述されたコードを使用しています。Dataflow やその他の Google Cloud サービスでは、Apache Beam を使用して C++ バイナリ(ライブラリ)を外部コードとして実行できます。C++ バイナリを組み込むことで、フルマネージド サービスを使用して、これらのタイプのワークロードを利用することができます。また、高度な有向非巡回グラフ(DAG)を使用して、完全なパイプラインを構築することもできます。

C++ バイナリを実行するためのアプローチは、スタンドアロン バイナリをコンパイルできる他の言語のコードにも当てはまります。

エンドツーエンドの高度な並列パイプライン

Dataflow を使用すると、I/O 読み取り / 書き込み処理、分析、タスク出力をすべて同じパイプラインで行い、完全な並列パイプラインを実行できます。

たとえば、HPC の並列ワークロードには次のようなステップが組み込まれている場合があります。

  1. 内部ソースと外部ソースから元データを取り込みます。データは、無制限または制限付きのソースから取り込まれる場合があります。無制限のソースの大半は、タスクファームに使用されるテクノロジーに対応するために制限付きのソースに変換されます。

  2. 元データをデータシェイプに前処理し、タスク ファーム コンポーネントが使用できるエンコードにします。

  3. システムで計算処理をホストに分散します。ソースからデータを取得して結果を実体化し、事後分析を行います。

  4. 事後分析を行い、結果を出力に変換します。

Dataflow では、Dataflow の機能を活用しながら、これらのステップを 1 つのパイプラインで管理できます。

  • 1 つのシステムがすべてのステージを担当しているため、複数のパイプラインの実行を外部オーケストレーション システムで調整する必要はありません。

  • データの局所性により、ステージ間の境界を明示的に実体化または非実体化する必要がないため、処理効率が向上します。

  • システム テレメトリーの改善により、ステージでの合計バイト数に関する情報を取得できます。これは後のステージの設計で役に立ちます。

  • 自動スケーリングにより、システム内にあるデータがパイプライン ステージを移動すると、データ量に応じてリソースがスケーリングされます。

Dataflow HPC のコア並列パイプラインは最新の DAG 実行エンジンを使用します。一般的なパイプライン プロセスはすべて 1 つの DAG で完了できるため、1 つの Dataflow パイプラインで完了できます。Apache Beam によって生成された DAG を使用して、パイプラインの形状を定義できます。

タスク ファーム システムから高度な並列ワークフローに移行する場合は、タスクからデータに移行する必要があります。PTransform には、データ要素を受け取るプロセス関数を持つ DoFn が含まれます。データポイントには、1 つ以上のプロパティを持つ任意のオブジェクトを指定できます。

DAG と単一のパイプラインを使用すると、ワークフロー全体を通してシステム内のすべてのデータを読み込むことができます。データベースやストレージにデータを出力する必要はありません。

高度な並列ワークフローで使用される Google Cloud コンポーネント

グリッド コンピューティング アプリケーションでは、多数のコアで実行されている機能にデータを分散する必要があります。このようなパターンでは、並行性の高い読み取りが必要になることが多く、ダウンストリーム システムに取り込まれる大規模なデータ ファンアウトがしばしば発生します。

Dataflow は、大規模な並列データ I/O の取り込みが可能な次の Google Cloud マネージド サービスと統合されています。

  • Pub/Sub: キャッシュとサービス提供用のワイドカラム型ストア
  • Bigtable: グローバル イベント ストリーム取り込みサービス
  • Cloud Storage: 統合オブジェクト ストア
  • BigQuery: ペタバイト規模のデータ ウェアハウス サービス

これらのサービスを併用することで、高度な並列ワークロード向けの魅力的なソリューションを実現できます。

Google Cloud で実行される並列ワークロードの一般的なアーキテクチャには、次のものがあります。

  • Apache Beam の Dataflow ランナー。このランナーは、DAG から導出された処理フローを使用して、作業をグリッドノードに分散します。単一の Apache Beam DAG を使用することで、複雑なマルチステージ パイプラインであっても、副入力結合を使って並列するパイプライン ステージが集約されるように定義できます。

  • Cloud Storage。このサービスは、C++ バイナリをステージングする場所を提供します。マスメディアのユースケースの多くがそうであるように、大きなファイルを保存する必要がある場合は、そのファイルも Cloud Storage に保存されます。

  • BigtableBigQueryPub/Sub。これらのサービスは、ソースにもシンクにも使用されています。

次の図は、サンプル ワークフローのアーキテクチャの概要を示しています。

グリッド コンピューティング ソリューションのアーキテクチャ

他のストレージ システムを使用することもできます。詳細は、Apache Beam のドキュメントのパイプライン I/O ページのストレージ システムとストリーミング ソースのリストを参照してください。

Apache Beam の Dataflow ランナー

Dataflow を使用して、ストリーミング モードとバッチモードの両方でデータを変換、拡充します。Dataflow は Apache Beam に基づいています。

Cloud Storage

Cloud Storage は、ライブデータ配信、データ分析、機械学習(ML)、データ アーカイブを網羅する統合型オブジェクト ストレージです。Dataflow で高度な並列ワークロードを処理する場合、Cloud Storage は C++ バイナリにアクセスできます。一部の使用例では、Cloud Storage は処理フェーズで必要なデータ用のロケーションも提供します。

グリッド コンピューティングで必要とされる高速読み込みについては、Cloud Storage のパフォーマンス特性を理解している必要があります。Cloud Storage のデータ配信パフォーマンスの詳細については、Cloud Storage ドキュメントのリクエスト レートとアクセス配信のガイドラインを参照してください。

Bigtable

Bigtable は、大規模な分析ワークロードや運用ワークロード用に最適化された高性能 NoSQL データベース サービスです。Bigtable は Dataflow を補完します。Bigtable の主な特性である低レイテンシの読み取りと書き込み(90 パーセンタイルで 6 ミリ秒)により、数千の同時クライアントと大量のバースト ワークロードを処理できます。このような機能を持つ Bigtable は Dataflow の処理フェーズの DoFn 関数のシンクやデータソースとして最適です。

BigQuery

BigQuery は、大規模なデータ分析に対応した、高速で経済的なエンタープライズ向けフルマネージド データ ウェアハウスです。グリッドの結果は分析に使用されることが多く、グリッドのデータ出力に対して大規模な集計を実行できます。

Pub/Sub

Pub/Sub は、メッセージを生成するサービスと処理するサービスと切り離す、非同期のスケーラブルなメッセージング サービスです。ストリーミング分析とデータ統合パイプラインに Pub/Sub を使用して、データの取り込みと分散を行うことができます。これは、サービスの統合を目的としたメッセージ指向ミドルウェア、または、タスクを並列化するためのキューとしても使用されます。

Dataflow DAG

Beam SDK を使用すると、表現力の高い DAG を構築できます。これにより、ストリームまたはバッチのマルチステージ パイプラインを簡単に作成できます。データの移動はランナーによって処理され、データはイミュータブルな並列要素コレクションである PCollection オブジェクトとして表現されます。

次の図は、この流れを表しています。

DAG を使用したフロー

Apache Beam SDK では DAG を定義できます。DAG ではユーザー定義コードを関数として含めることができます。通常、DAG の宣言とユーザー定義コードの両方に対して同じプログラミング言語(Java、Python、または Go)が使用されます。ユーザー定義コードには、C++ などの組み込みコードを使用することもできます。

次のステップ

  • Dataflow HPC の並列パイプラインを操作するためのベスト プラクティスについて学習する。

  • チュートリアルに沿って、C++ ライブラリとカスタム コンテナを使用するパイプラインを作成する。