Traffine I/O

Bahasa Indonesia

2023-03-07

Mengonversi Model LightGBM ke ONNX dan Melakukan Inferensi

Pengenalan

Artikel ini menjelaskan proses mengonversi model LightGBM ke format ONNX untuk meningkatkan interoperabilitas dan kemudahan implementasi pada berbagai platform. Artikel ini meliputi persiapan model LightGBM, konversi model, dan inferensi dengan model yang telah dikonversi.

Persiapan Model LightGBM

Sebelum mengonversi model LightGBM ke format ONNX, kita harus mempersiapkan model LightGBM dengan menginstal perpustakaan yang diperlukan, memuat dataset, dan melatih model.

Instalasi Perpustakaan yang Diperlukan

Pertama, mari kita instal perpustakaan yang diperlukan untuk bekerja dengan LightGBM:

bash
$ pip install lightgbm numpy scikit-learn

Memuat Dataset dan Melatih Model

Pada bagian ini, saya akan menggunakan dataset Iris untuk menunjukkan proses melatih model LightGBM. Dataset Iris terdiri dari 150 sampel dengan empat fitur masing-masing, yang menggambarkan panjang dan lebar sepal dan petal dari tiga spesies bunga iris.

Contoh kode di bawah ini menunjukkan memuat dataset dan melatih model:

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)

Pada kode di atas, kita pertama-tama mengimpor perpustakaan yang diperlukan dan memuat dataset Iris. Selanjutnya, kita membagi dataset menjadi set pelatihan dan pengujian menggunakan rasio 80-20. Kemudian, kita membuat objek dataset LightGBM untuk pelatihan dan menyiapkan parameter model. Akhirnya, kita melatih model menggunakan fungsi lgb.train().

Konversi Model LightGBM ke ONNX

Setelah mempersiapkan model LightGBM, langkah berikutnya adalah mengonversinya ke format ONNX. ONNX menyediakan format standar untuk merepresentasikan model machine learning, memungkinkan interoperabilitas antara berbagai kerangka kerja dan alat.

Instalasi Perpustakaan ONNXMLTools

Untuk mengonversi model LightGBM ke ONNX, kita akan menggunakan perpustakaan onnxmltools, yang menawarkan fungsi konversi untuk berbagai model machine learning. Instalasikan perpustakaan menggunakan perintah berikut:

bash
$ pip install onnxmltools

Proses Konversi

Sekarang kita telah menginstal perpustakaan yang diperlukan, kita dapat melanjutkan untuk mengonversi model LightGBM yang telah dilatih ke format ONNX. Contoh kode di bawah ini menunjukkan proses konversi:

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')

Pada potongan kode di atas, kita mengimpor perpustakaan onnxmltools dan menggunakan fungsi convert_lightgbm() untuk mengonversi model LightGBM kita ke model ONNX. Setelah konversi selesai, kita menyimpan model ONNX ke file yang dinamai lightgbm_iris.onnx.

Inferensi dengan Model ONNX yang Sudah Dikonversi

Setelah model LightGBM dikonversi ke format ONNX, kita dapat menggunakan perpustakaan ONNX Runtime untuk melakukan inferensi. ONNX Runtime adalah perpustakaan inferensi lintas platform yang mendukung berbagai akselerator dan platform keras.

Instalasi ONNX Runtime

Untuk melakukan inferensi menggunakan model ONNX, kita perlu menginstal perpustakaan ONNX Runtime:

bash
$ pip install onnxruntime

Memuat dan Menjalankan Model ONNX

Sekarang bahwa perpustakaan ONNX Runtime sudah terpasang, kita dapat memuat model ONNX dan melakukan inferensi pada dataset pengujian kita. Contoh kode di bawah ini menunjukkan bagaimana memuat model ONNX dan menjalankan inferensi:

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}")

Pada kode di atas, kita pertama-tama mengimpor perpustakaan ONNX Runtime dan memuat model ONNX menggunakan kelas InferenceSession. Selanjutnya, kita mendapatkan nama input dan output model. Kemudian, kita melakukan inferensi pada dataset pengujian menggunakan metode sess.run() dan mengonversi prediksi menjadi label kelas dengan memilih kelas dengan probabilitas tertinggi untuk setiap sampel. Akhirnya, kita menghitung akurasi model ONNX dengan membandingkan label yang diprediksi dengan label asli pada dataset pengujian.

Referensi

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!