FireDucksが遅いと思ったら

FireDucksが遅いと思ったら

FireDucksに興味を持っていただきありがとうございます. この記事ではFireDucksを利用してプログラムが遅いと感じた場合,その考えられる原因と対処方法について記載します.

早速ですがプログラムが遅いと感じた場合,考えられる原因は大きく分けて2つあります.

  1. applyの利用もしくはループ処理の使用している.
  2. FireDucksで未実装のpandasの機能を使用している.

原因1の場合,ソースコード変更によってプログラムの性能が大きく向上する可能性があります. 例えばループ処理の使用の場合

sum_val = 0
for i in range(len(df)):
    if df["A"][i] > 2:
        sum_val += df["B"][i]

と書いてあるコードを

sum_val = df[df["A"] > 2]["B"].sum()

と書き換えることでpandasレベルでの高速化及びFireDucksでの高速化が期待できます.

自分で確かめるのが難しい,ソースコードが複雑で適切な変更方法が思いつかないといった場合,FireDucksのコミュニティを運営していますので下記記載のslackから是非相談してみてください.

原因2の場合すぐに高速化ができるわけではありませんが,未実装のpandas機能を報告していただけますと,我々がその機能をFireDucksに実装することで,プログラムの高速化できます.

未実装かどうかを判定するためには,プログラム実行前に環境変数

FIREDUCKS_FLAGS="-Wfallback"

を設定していただき,そのままpandasプログラムを実行してください. 注目しているpandas関数についてFallbackと書かれていた場合,それは未実装のpandasの機能ですので報告をしていただけるとありがたいです. 報告の方法は以下です.

Fallbackの調査が難しい場合でもお気軽にコンタクトを取っていただければ幸いです. 以上で記事を終えます.ここまで読んでいただきありがとうございました.