Benchmarks
ここではFireDucksの性能ベンチマークの結果を紹介します.
サーバースペック
- CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz x 2sockets (合計48HWスレッド)
- メインメモリ: 256GB
TPC-Hを用いたデータフレームライブラリの比較
以下のグラフはTPC-Hベンチマークに含まれる22種類のクエリでの4つのデータフレームライブラリ(pandas, modin, polars, fireducks)の比較を示しています.縦軸はpandasに対して何倍速いか(実行時間が短いか)を対数軸で示しています.1より大きい場合はpandasより速いことを示しています.データサイズを表すScale Factorは10(約10GB程度のデータセット)で,ファイルIO以外の時間を測定しています.
22クエリの平均でのpandasからの速度向上は,Modinは1.3倍,Polarsは13倍,FireDucksは18倍でした.
利用した各ライブラリのバージョンは以下になります(計測時の最新版).
- pandas: 2.2.0
- Modin: 0.26.1
- Polars: 0.20.7
- FireDucks: 0.9.8
次にScalar Factor(sf)を10, 20, 50にしてデータサイズを大きくした場合にPolarsとFireDucksの比較結果を示します.縦軸はPolarsに対してFireDucksが何倍速いかを示しています.平均ではFireDucksが1.3倍(sf=10), 1.3倍(sf=20), 1.7倍(sf=50)高速となっています.
ベンチマークコードについて
このベンチマークはpolars/tpchをベースにしています.polars/tpchはpolars向けには全22クエリがありますが,pandasやmodin向けには一部しかありませんでしたので,今回はFireDucks開発チームでpandasを用いてクエリを実装し,それをimport hookを用いてFireDucksで動かしました.これらのクエリは,pandasやmodinで動かす際にも polars/tpchが提供してないクエリに利用しました.
各クエリのソースコードはこちらで公開しています.
TPCx-BBを用いた性能評価
本節ではTPCx-BBを用いたpandasとFireDucksの比較を示します.TPCx-BBは機械学習を用いたデータ分析やその前処理に関するクエリが含まれています. 本評価ではFireDucks開発チームで実装したTPCx-BBのpandas実装を用いて,pandasおよびFireDucksで測定を行いました.ファイルIOも計測範囲に含まれています.
TPCx-BBのでは,FireDucksはpandasに対して最大17倍,平均で6.7倍高速です.
測定に用いたバージョンは以下の通りです.
- pandas-2.1.4
- fireducks-0.9.3