Benchmarks

ここではFireDucksの性能ベンチマークの結果を紹介します.

Database-like ops benchmark

FireDucksを使ってdb-benchmarkの性能を評価しました. Db-benchmarkには、複数のサイズのデータセットに対してデータサイエンスにおける基本的な操作を実行するシナリオが含まれています. 2024年9月10日現在、FireDucksはJoin操作やGroupBy操作における最速のDataFrameライブラリです.

評価結果の詳細はこちらをご覧ください。

DB-Benchmark

利用したライブラリのバージョンは以下になります(計測時の最新版).

  • fireducks-1.0.4

サーバースペック

  • CPU model: Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
  • CPU cores: 128
  • RAM model: NVMe SSD
  • main memory: 256gb

TPC-Hを用いたデータフレームライブラリの比較

サーバースペック

  • cpu: INTEL(R) XEON(R) GOLD 6526Y (32cores)
  • main memory: 512GB
  • OS: Ubuntu 24.04
  • cpufreq-governor: performance (powersave governorの結果はこちら

ベンチマークのソースコード

以下のグラフはTPC-Hベンチマークに含まれる22種類のクエリでの4つのデータフレームライブラリ(pandas, DuckDB, Polars, FireDucks)の比較を示しています.縦軸はpandasに対して何倍速いか(実行時間が短いか)を対数軸で示しています.1より大きい場合はpandasより速いことを示しています.データサイズを表すScale Factorは10(約10GB程度のデータセット)で,ファイルIO以外の時間(RUN_IO_TYPE=skip, 上図)とファイルIOを含んだ時間(RUN_IO_TYPE=parquet, 下図)を測定しています.

22クエリの平均でのpandasからの速度向上:

Excluding I/OIncluding I/O
DuckDB109x61x
Polars58x50x
FireDucks141x55x

I/O以外の時間でのpandasからの速度向上

polars-tpch-sf10-skip

I/Oを含んだ時間でのpandasからの速度向上

polars-tpch-sf10-parquet

ベンチマークコードについて

このベンチマークはpolars/tpchをベースにしています.polars/tpchはpolars向けには全22クエリがありますが,pandas向けには一部しかありませんでしたので,今回はFireDucks開発チームでpandasを用いてクエリを実装し,それをimport hookを用いてFireDucksで動かしました. Polarsとその他のライブラリのapple-to-appleの比較となるように,これらのクエリはできる限りpolarsのクエリと同じ実装としてあります. PolarsとpandasはAPIが違いますのでコードは完全には一致しませんが,merge/join, filter, groupbyと言ったコストがかかる処理の数は可能な限り同じにしてあります.

TPCx-BBを用いた性能評価

本節ではTPCx-BBを用いたpandasとFireDucksの比較を示します.TPCx-BBは機械学習を用いたデータ分析やその前処理に関するクエリが含まれています. 本評価ではFireDucks開発チームで実装したTPCx-BBのpandas実装を用いて,pandasおよびFireDucksで測定を行いました.ファイルIOも計測範囲に含まれています.

TPCx-BBのでは,FireDucksはpandasに対して最大17倍,平均で6.7倍高速です.

TPCx-BB

測定に用いたバージョンは以下の通りです.

  • pandas-2.1.4
  • fireducks-0.9.3

サーバースペック

  • CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz x 2sockets (合計48HWスレッド)
  • メインメモリ: 256GB