日課のRSSフィードを眺めていると、クエリエンジンやデータ処理の最適化のための高速化ライブラリが Meta がOSSとして公開した1 のを知った。

Velox のリポジトリはこちら

facebookincubator/velox: A C++ vectorized database acceleration library aimed to optimizing query engines and data processing systems.

実際にリポジトリを観てみるとC++で書かれており、たしかにパフォーマンスが高いのが納得。

ドキュメントやチュートリアルなどはこちらのサイトで用意されています。

Hello from Velox | Velox

Meta 社内では、Presto やSpark に適用して処理の高速化、PyTorch に活用して前処理や特徴量エンジニアリングの高速化が進められているらしいです。

技術ブログ記事 1が何をやっているか明瞭なので、かいつまんでメモを残しておきます。


  • SQLの分析、ストリーミング処理や機械学習のためのデータ処理など実際の処理内容は似通っているが、様々なフレームワークが使われ、独立して進化している。
    • この断片化によって、保守と拡張が困難になっていたが、それらを統合する形で実行可能にするのが Verox
  • Presto, Spark などのデータ処理エンジンは、一見異なるように見えるが、レイヤー構造で考えると非常に似通っている。
    • Verox は一般的に実行エンジンレイヤーの代わりとなり、式評価、集約、ソート、結合などの処理を提供する。(一般的に data plane と呼ばれる)
  • 実例と結果
    • Presto は Javaで実行されるが、それを C++のVelox で置き換えた。Prestissimo というプロジェクト名で進んだ。(カッコいいね)
      • Java での実行と比べると、大体6倍ほど高速化された
    • Spark 上では、Gluten とよばれるプロジェクトでVelox と同じようにC++での実行を試みるプロジェクトが公開されている。
    • PyTorch の TorchArrowをVelox 上で実行可能

最終的には、Velox で従来のデータマネジメントの部分と機械学習インフラストラクチャの部分の垣根を統一することを狙っている。


詳細な内容を知りたい方は、VLDB 2022 で論文として発表された2ので、そちらを読むと良さそうです。

実際に実行して手で触ってみたいという方は、10分で始める Verox というチュートリアル資料3があったので、そちらを読むと良さそうです。 コードを眺めると Verox がどんなことをしてくれるのかイメージが付きました。

Footnotes

  1. Introducing Velox: An open source unified execution engine 2

  2. Meta’s Unified Execution Engine at VLDB2022- Meta Research

  3. Velox in 10 minutes — Velox documentation