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

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

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

  • データ処理とオーケストレーションを同じパイプラインで行うフルマネージド ワークフローを作成できます。
  • 前処理と後処理の両方やタスク処理で、パイプラインのすべての側面に単一のシステムを使用できます。パイプラインで既存の C++ コードを使用することもできます。
  • Dataflow が提供する組み込みの exactly-once 処理を使用できます。

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

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

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

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

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

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

Dataflow では、I/O 読み取り / 書き込み処理、分析、タスク出力をすべて同じパイプラインで行うことができます。これにより、高度な並列パイプライン全体を実行できます。

たとえば、HPC の高度な並列ワークロードは次のステップで構成されている場合があります。

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

  2. 元データを特定のデータ形状に前処理し、タスク ファーミング コンポーネントが使用できるエンコードにします。

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

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

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

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

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

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

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

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

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

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

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

グリッド コンピューティング アプリケーションでは、多数のコアで実行される関数にデータを分散する必要があります。このパターンでは多くの場合、同時実行性の高い読み取りが必要になり、その後ダウンストリーム システムに取り込まれるデータの大規模なファンアウトが行われます。

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

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

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

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

  • Apache Beam 向け Dataflow Runner。このランナーは、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

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

次の図は、このフローを表しています。

DAG を使用したフロー

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

次のステップ

  • Dataflow HPC の並列パイプラインを操作するためのベスト プラクティスについて学習する。
  • チュートリアルに沿って、C++ ライブラリとカスタム コンテナを使用するパイプラインを作成する。