Traffine I/O

日本語

2023-03-07

LightGBMモデルのONNXへの変換と推論の実行

はじめに

この記事では、LightGBMモデルをONNX形式に変換することで、異なるプラットフォーム間での互換性と展開の容易さを向上させるための手順について紹介します。LightGBMモデルの準備、モデルの変換、そして変換されたモデルでの推論についてカバーします。

LightGBMモデルの準備

LightGBMモデルをONNXに変換する前に、必要なライブラリのインストール、データセットの読み込み、そしてモデルのトレーニングを行う必要があります。

必要なライブラリのインストール

最初に、LightGBMを扱うために必要なライブラリをインストールします。

bash
$ pip install lightgbm numpy scikit-learn

データセットの読み込みとモデルのトレーニング

このセクションでは、Irisデータセットを使用してLightGBMモデルをトレーニングするプロセスをデモンストレーションします。Irisデータセットは、3種類のアイリスの花のがくと花弁の長さと幅を表す4つの特徴を持つ150のサンプルから成ります。

以下の例では、データセットの読み込みとモデルのトレーニングを行います。

python
import lightgbm as lgb
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Load Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train the LightGBM model
train_data = lgb.Dataset(X_train, label=y_train)
params = {'objective': 'multiclass', 'num_class': 3, 'metric': 'multi_logloss'}
model = lgb.train(params, train_data, num_boost_round=50)

上記のコードでは、必要なライブラリを最初にインポートし、Irisデータセットをロードします。その後、80:20の比率でトレーニングとテスト用にデータセットを分割します。次に、トレーニング用のLightGBMデータセットオブジェクトを作成し、モデルパラメータを設定します。最後に、lgb.train()関数を使用してモデルをトレーニングします。

LightGBMモデルのONNXへの変換

LightGBMモデルを準備したら、次のステップはONNX形式に変換することです。ONNXは、機械学習モデルを表現するための標準形式を提供し、異なるフレームワークやツールの間での相互運用性を可能にします。

ONNXMLToolsライブラリのインストール

LightGBMモデルをONNXに変換するために、onnxmltoolsライブラリを使用します。このライブラリには、さまざまな機械学習モデルの変換関数が提供されています。以下のコマンドを使用してライブラリをインストールします。

bash
$ pip install onnxmltools

変換プロセス

必要なライブラリがインストールされたので、トレーニングされたLightGBMモデルをONNX形式に変換することができます。以下の例では、変換プロセスをデモンストレーションしています。

python
import onnxmltools

# Convert the LightGBM model to ONNX
onnx_model = onnxmltools.convert_lightgbm(model)

# Save the ONNX model to a file
onnxmltools.utils.save_model(onnx_model, 'lightgbm_iris.onnx')

上記のコードスニペットでは、onnxmltoolsライブラリをインポートし、convert_lightgbm()関数を使用してLightGBMモデルをONNXモデルに変換しています。変換が完了したら、ONNXモデルをlightgbm_iris.onnxというファイルに保存します。

変換されたONNXモデルでの推論

LightGBMモデルがONNX形式に変換されたら、ONNX Runtimeライブラリを使用して推論を実行できます。ONNX Runtimeは高速かつクロスプラットフォームの推論ライブラリで、さまざまなハードウェアアクセラレータやプラットフォームをサポートしています。

ONNX Runtimeのインストール

ONNXモデルを使用して推論を実行するためには、ONNX Runtimeライブラリをインストールする必要があります。

bash
$ pip install onnxruntime

ONNXモデルの読み込みと実行

ONNX Runtimeライブラリがインストールされたので、ONNXモデルをロードし、テストデータセットで推論を実行できます。以下の例では、ONNXモデルをロードし、推論を実行しています。

python
import onnxruntime as rt
import numpy as np

# Load the ONNX model
sess = rt.InferenceSession('lightgbm_iris.onnx')

# Run inference using the ONNX model
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name

# Perform inference on the test dataset
predictions = sess.run([output_name], {input_name: X_test.astype(np.float32)})[0]

# Convert predictions to class labels
predicted_labels = np.argmax(predictions, axis=1)

# Calculate and print the accuracy of the ONNX model
accuracy = np.sum(predicted_labels == y_test) / len(y_test)
print(f"Accuracy of the ONNX model: {accuracy:.2f}")

上記のコードでは、まずONNX Runtimeライブラリをインポートし、InferenceSessionクラスを使用してONNXモデルをロードします。次に、モデルの入力と出力の名前を取得します。その後、sess.run()メソッドを使用してテストデータセットで推論を実行し、各サンプルのもっとも高い確率を持つクラスを選択して予測結果をクラスラベルに変換します。最後に、予測されたラベルを真のラベルと比較して、ONNXモデルの精度を計算し出力しています。

参考

https://github.com/onnx/onnxmltools
http://onnx.ai/sklearn-onnx/auto_tutorial/plot_gexternal_lightgbm.html
http://onnx.ai/sklearn-onnx/auto_tutorial/plot_gexternal_lightgbm_reg.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!