Skip to main content
QUICK REVIEW

[論文レビュー] Flare: Native Compilation for Heterogeneous Workloads in Apache Spark

Grégory M. Essertel, Ruby Y. Tahboub|arXiv (Cornell University)|Mar 23, 2017
Advanced Database Systems and Queries参考文献 29被引用数 10
ひとこと要約

Flare は Apache Spark のネイティブコードコンパイルバックエンドであり、Spark の JVM ベース実行をネイティブにコンパイルされたコードに置き換えることで、TPC-H ベンチマークおよび機械学習カーネルにおいて、Spark の高水準な表現力に compromise を加えずに、10倍程度のパフォーマンス向上を達成する。これは Delite の DSL コンパイルスタックを活用し、現代のマルチコア・インメモリシステムにおけるスケールアップを可能にする。

ABSTRACT

The need for modern data analytics to combine relational, procedural, and map-reduce-style functional processing is widely recognized. State-of-the-art systems like Spark have added SQL front-ends and relational query optimization, which promise an increase in expressiveness and performance. But how good are these extensions at extracting high performance from modern hardware platforms? While Spark has made impressive progress, we show that for relational workloads, there is still a significant gap compared with best-of-breed query engines. And when stepping outside of the relational world, query optimization techniques are ineffective if large parts of a computation have to be treated as user-defined functions (UDFs). We present Flare: a new back-end for Spark that brings performance closer to the best SQL engines, without giving up the added expressiveness of Spark. We demonstrate order of magnitude speedups both for relational workloads such as TPC-H, as well as for a range of machine learning kernels that combine relational and iterative functional processing. Flare achieves these results through (1) compilation to native code, (2) replacing parts of the Spark runtime system, and (3) extending the scope of optimization and code generation to large classes of UDFs.

研究の動機と目的

  • TPC-H ベンチマークにおいて、HyPer やその他の最高水準のリレーショナルエンジンに比べ、まだ 1 時間程度の性能ギャップを示す Spark SQL の性能ギャップを是正すること。
  • 特にリレーショナル処理と反復的関数処理を組み合わせた異種ワークロードにおいて、Spark の現在のランタイムおよびコード生成スタックの制限を克服すること。
  • 機械学習およびデータ分析パイプラインにおけるユーザー定義関数 (UDF) の高性能実行を、Delite のドメイン固有言語 (DSL) コンパイルスタック統合により実現すること。
  • スケールアウト志向の設計を再評価し、強力でメモリに最適化されたマルチコアシステムにおけるスケールアップが、リソースのオーバーヘッドを低減しつつ、優れたパフォーマンスを提供できることを示すこと。
  • 高度なコード生成および最適化技術を用いて、手で最適化されたネイティブシステムに近いパフォーマンスを達成しつつも、Spark の高水準 API および表現力を維持すること。

提案手法

  • Flare Level 1 を導入:クエリステージの粒度で Spark の JVM コード生成をネイティブコード生成に置き換え、JVM のオーバーヘッドを排除する。
  • Flare Level 2 を導入:完全なクエリプランをネイティブコードにコンパイルし、Spark の RDD 层を回避し、共有メモリ型マルチコアアーキテクチャに最適化する。
  • Flare Level 3 を導入:Spark クエリプランを Delite の中間言語 (DMLL) にマッピングし、リレーショナルクエリおよび Delite DSL で書かれた UDF のエンドツーエンド最適化を可能にする。
  • Delite のコンパイラスタックを活用して、UDF に対して高度に最適化されたコード(GPU 並列コードを含む)を生成し、機械学習(OptiML)、グラフ処理(OptiGraph)、PDE ソルバー(OptiMesh)などの分野で効果を発揮する。
  • リレーショナルオペレータはネイティブにコンパイルされ、UDF は Delite の DSL を介してコンパイルされるハイブリッド実行モデルを採用し、データ処理フェーズと計算フェーズの両方を統合的に最適化する。
  • Flare は、障害耐性がそれほど重要でない大規模メモリ、マルチコアシステムをターゲットとするスケールアップアーキテクチャを設計しており、現代のハードウェアリソースを効率的に活用できる。

実験結果

リサーチクエスチョン

  • RQ1ネイティブコードコンパイルにより、TPC-H などの標準ベンチマークにおいて、Spark SQL と HyPer のような最高水準のリレーショナルエンジンとの間のパフォーマンスギャップを埋めることができるか?
  • RQ2Spark の高水準 API を用いた場合に、リレーショナル処理と反復的関数処理(例:機械学習パイプライン)を組み合わせた異種ワークロードのパフォーマンスをどの程度向上できるか?
  • RQ3Delite のようなドメイン固有言語 (DSL) コンパイルスタックと Spark を統合することで、UDF やリレーショナルオペレータのエンドツーエンド最適化がどの程度有効に機能するか?
  • RQ4現代のデータ分析システムにおいて、スケールアウト志向からスケールアップ志向への設計転換がもたらすパフォーマンスへの影響は何か?
  • RQ5高度なコード生成および最適化技術を用いて、高水準な抽象化を維持しつつ、低レベルのパフォーマンスを達成することは可能か?

主な発見

  • Flare は TPC-H ベンチマークで 1 時間程度の高速化を達成し、最高水準のリレーショナルエンジンである HyPer と比較して 2〜3 倍の時間で実行を完了する。
  • DataFrame 操作と反復的 UDF を組み合わせた機械学習ワークロードでは、標準的な Spark 実装と比較して Flare が 10 倍の高速化を達成する。
  • Flare Level 2 は、完全なクエリプランをネイティブコードにコンパイルすることで、RDD 层や JVM の抽象化を排除し、ランタイムのオーバーヘッドを顕著に低減する。
  • Delite との統合により、OptiML やその他の DSL で書かれた UDF の最適化が可能になり、GPU 並列実行が可能となり、手で最適化されたカーネルと同等のパフォーマンスを達成する。
  • 本研究では、CPU がボトルネックとなる多くのワークロードにおいて、現代の大容量メモリ・マルチコアシステムにおけるスケールアップが、従来のスケールアウトアーキテクチャを上回ることを示した。
  • Flare は Spark SQL の高水準 API および DataFrame 抽象構造を完全に互換性を保ちながら、パフォーマンスと表現力がデータ分析システムにおいて相補的であることを実証した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。