1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GBDTの推論を高速化する

Posted at

KaggleでGBDTを使う際のTips。

高速化の方法

1. データをpd.DataFrameではなくnp.ndarrayで渡す

これだけでも早くなる。

X = ...  # pandas DataFrame
pred = model.predict(X)  # そのまま渡す
pred = model.predict(X.values)  # np.ndarrayにして渡す、こっちの方が早い

2. Treelite

Treelite — Treelite 4.0.0-dev documentation

Treeliteは、C++アプリケーション上でツリーベースモデルを共通のフォーマットで利用するためのツール。モデルをTreelite形式に変換することで、推論が早くなる効果も得られる。

import treelite
import treelite_runtime

bst = lightgbm.train(params, dtrain, 10, valid_sets=[dtrain], valid_names=['train'])
model = treelite.Model.from_lightgbm(bst)

X = ... # numpy array
pred = treelite.gtil.predict(model, data=X)

LightGBM以外にもXGBoostやsklearnもサポートされている(ドキュメント見る限りではCatBoostはなさそう)。

検証

適当なテストデータに対してLightGBMで1000回ずつ推論を行った際の推論時間の比較(ガイド線は平均値)。Treelite、np.ndarrayで渡す、pd.DataFrameで渡す、の順で早くなっている。

inference_time.png

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?