2019の15日目の記事です。DataStrategyの齋藤(@pigooosuke)が担当します。Exchange(ONNX)とは、機械学習モデルを表現するフォーマット形式のことです。Scikit-learnなどの各種フレームワークで学習したモデルを別のフレームワークで読み込めるようになり、学習済みモデルの管理/運用が楽になります。Runtime上での推論速度の改善がどれほどなのかを検証していきたいと思います。classificationの予測モデルを作成します。0.346271かなり雑ですが、モデルの用意が出来ました。TrueONNX変換ONNXに変換するためには、事前にinputの型を定義する必要があります。用意されている型は以下の通りです。SequenceType今回は、全てnumpyのfloat32でinputを受け付けるようにします。この設定は活用している学習モデルなどによって変わってきます。inputにStringTensorTypeを設定する必要があります。http://onnx.ai/sklearn-onnx/auto_examples/plot_tfidfvectorizer.html#tfidfvectorizer-with-onnxLightGBMをONNXに変換するためにonnxmltoolsが必要になるので、事前にライブラリをインストールします。モデルをvizualize可能onnxmltools.utils.visualize_model(onnx_model)inputsは、入力のラベル名です。特徴量数]のFloatTensorを指定しています。参考までに、LightGBMのclassifierのモデルは下図のような構成になっています。(visualize_modelで生成)入力値を決定木を通じて、予測ラベルと予測確度を出力しています。推論ONNX用の実行環境として、Microsoftが出しているonnxruntimeを使います。こちらもインストールします。array([0.90389532])第1引数に出力ラベル名(今回はprobabilitiesのみを出力)。第2引数に入力ラベル名と値をセットして推論を実行します。予測結果もLightGBMの予測とONNXの予測がちゃんと一致していました。GHzpython=3.7.3numpy=1.15.2lightgbm=2.3.1onnx=1.6.0onnxconverter-common=1.6.0onnxmltools=1.6.0onnxruntime=1.0.0上記の条件で計測したところ、ONNXモデルはpureなLightGBMに比べて約半分ほどの時間で推論が出来ているのが確認できました。ONNXは途中で型変換を入れているので厳密に平等な比較とは言えませんが、それでも十分早かったです。lgb.onnxモデルファイルサイズに関しても、pickleでの圧縮に比べ、68%まで軽量化することが出来ました。各種フレームワークの対応が次々に進んでいます。独自カスタムした計算をしていない限り対応出来ると思うので、学習モデル運用でONNXを検討してみてはいかがでしょうか。まとめ今回、LightGBMのモデルからONNX形式でモデル出力をする手順の紹介と、ONNX上での推論速度の検証を行いました。ONNXを利用することで学習フレームワークに依存せず、高速な推論ができる環境を作ることが出来そうですね。)の開発チームによるブログです。Groupの大木です。Developerをしている東口です。Groupのマネージャーをしている山田です。12/1から始まっ...Archiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。