Untuk menyajikan prediksi dari AI Platform Prediction, Anda harus mengekspor model machine learning yang dilatih sebagai satu atau beberapa artefak. Panduan ini menjelaskan berbagai cara mengekspor model terlatih untuk deployment pada AI Platform Prediction.
Metode untuk mengekspor model berikut berlaku, baik Anda melakukan pelatihan tentang AI Platform Prediction, maupun melakukan pelatihan di tempat lain dan hanya ingin men-deploy ke AI Platform Prediction untuk menyajikan prediksi.
Setelah mengekspor model, baca panduan untuk men-deploy model guna mempelajari cara membuat resource model dan versi di AI Platform Prediction untuk menyalurkan prediksi.
Kode kustom untuk prediksi
Jika mengekspor pipeline scikit-learn atau rutinitas prediksi kustom, Anda dapat menyertakan kode kustom untuk dijalankan pada waktu prediksi, tidak hanya rutinitas prediksi yang disediakan oleh framework machine learning Anda. Anda dapat menggunakannya untuk melakukan prapemrosesan input prediksi, hasil prediksi pascapemrosesan, atau menambahkan logging kustom.
Ukuran model maksimum
Total ukuran file artefak model yang Anda deploy ke AI Platform Prediction harus 500 MB atau kurang jika Anda menggunakan jenis mesin (MLS1) lama. Ukurannya harus 10 GB atau kurang jika Anda menggunakan jenis mesin Compute Engine (N1). Pelajari lebih lanjut jenis mesin untuk prediksi online.
Mengekspor TensorFlowSavedModel
Jika Anda menggunakan TensorFlow untuk melatih model, ekspor model Anda sebagai direktori TensorFlow TersimpanModel. Untuk mempelajari cara mengekspor SaveModel TensorFlow yang dapat Anda deploy ke AI Platform Prediction, baca panduan mengeksporSavedModel untuk prediksi.
Jika ingin men-deploy model TensorFlow sebagai bagian dari rutinitas prediksi kustom, Anda dapat mengekspornya sebagaiSavedModel atau sebagai kumpulan artefak yang berbeda. Baca panduan rutinitas prediksi kustom untuk mempelajari lebih lanjut.
Ekspor booster XGBoost
Jika menggunakan XGBoost untuk melatih model, Anda dapat mengekspor model yang dilatih dengan salah satu dari tiga cara:
- Gunakan metode
save_model
xgboost.Booster
untuk mengekspor file bernamamodel.bst
. - Gunakan
sklearn.externals.joblib
untuk mengekspor file bernamamodel.joblib
. - Gunakan modul
pickle
Python untuk mengekspor file bernamamodel.pkl
.
Nama file artefak model Anda harus sama persis dengan salah satu opsi ini.
Contoh dengan tab berikut menunjukkan cara melatih dan mengekspor model dengan ketiga cara tersebut:
xgboost.Booster
from sklearn import datasets
import xgboost as xgb
iris = datasets.load_iris()
dtrain = xgb.DMatrix(iris.data, label=iris.target)
bst = xgb.train({}, dtrain, 20)
bst.save_model('model.bst')
joblib
from sklearn import datasets
from sklearn.externals import joblib
import xgboost as xgb
iris = datasets.load_iris()
dtrain = xgb.DMatrix(iris.data, label=iris.target)
bst = xgb.train({}, dtrain, 20)
joblib.dump(bst, 'model.joblib')
pickle
import pickle
from sklearn import datasets
import xgboost as xgb
iris = datasets.load_iris()
dtrain = xgb.DMatrix(iris.data, label=iris.target)
bst = xgb.train({}, dtrain, 20)
with open('model.pkl', 'wb') as model_file:
pickle.dump(bst, model_file)
Mengekspor penaksir scikit-learn
Jika menggunakan scikit-learn untuk melatih model, Anda dapat mengekspornya dengan salah satu dari dua cara berikut:
- Gunakan
sklearn.externals.joblib
untuk mengekspor file bernamamodel.joblib
. - Gunakan modul
pickle
Python untuk mengekspor file bernamamodel.pkl
.
Nama file artefak model Anda harus sama persis dengan salah satu opsi ini.
Contoh dengan tab berikut menunjukkan cara melatih dan mengekspor model dengan kedua cara tersebut:
joblib
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
iris = datasets.load_iris()
classifier = RandomForestClassifier()
classifier.fit(iris.data, iris.target)
joblib.dump(classifier, 'model.joblib')
pickle
import pickle
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
iris = datasets.load_iris()
classifier = RandomForestClassifier()
classifier.fit(iris.data, iris.target)
with open('model.pkl', 'wb') as model_file:
pickle.dump(classifier, model_file)
Mengekspor pipeline scikit-learn
Class Pipeline scikit-learn dapat membantu Anda membuat beberapa estimator. Misalnya, Anda dapat menggunakan transformer untuk melakukan prapemrosesan data dan meneruskan data yang diubah ke pengklasifikasi. Anda dapat mengekspor Pipeline dengan dua cara yang sama seperti mengekspor estimator scikit-learn lainnya:
- Gunakan
sklearn.externals.joblib
untuk mengekspor file bernamamodel.joblib
. - Gunakan modul
pickle
Python untuk mengekspor file bernamamodel.pkl
.
Nama file artefak model Anda harus sama persis dengan salah satu opsi ini.
Contoh dengan tab berikut menunjukkan cara melatih dan mengekspor model dengan kedua cara tersebut:
joblib
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import Pipeline
iris = datasets.load_iris()
pipeline = Pipeline([
('feature_selection', SelectKBest(chi2, k=2)),
('classification', RandomForestClassifier())
])
pipeline.fit(iris.data, iris.target)
joblib.dump(pipeline, 'model.joblib')
pickle
import pickle
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import Pipeline
iris = datasets.load_iris()
pipeline = Pipeline([
('feature_selection', SelectKBest(chi2, k=2)),
('classification', RandomForestClassifier())
])
pipeline.fit(iris.data, iris.target)
with open('model.pkl', 'wb') as model_file:
pickle.dump(pipeline, model_file)
Ekspor kode pipeline kustom
Jika Anda hanya menggunakan transformer dari paket sklearn
untuk mem-build pipeline,
Anda cukup mengekspor satu artefak model.joblib
atau model.pkl
.
Deployment Prediction AI Platform Anda dapat menggunakan transformer ini pada waktu prediksi karena scikit-learn disertakan dalam image runtime Prediction AI Platform.
Namun, Anda juga dapat menggunakan class
FunctionTransformer
atau
TransformerMixin
scikit-learn untuk menggabungkan transformasi kustom. Jika melakukannya, Anda harus mengekspor kode kustom sebagai paket distribusi sumber sehingga dapat memberikannya ke AI Platform Prediction.
Contoh berikut menunjukkan cara menggunakan kode kustom di pipeline dan mengekspornya untuk AI Platform Prediction. Contoh ini menggunakan FunctionTransformer
dan
TransformerMixin
. Secara umum, FunctionTransformer
mungkin lebih praktis untuk transformasi dasar, tetapi TransformerMixin
memungkinkan Anda menentukan transformasi yang lebih kompleks yang menyimpan status serial pada waktu pelatihan yang dapat digunakan selama prediksi.
Pertama, tulis kode berikut ke file bernama my_module.py
:
import numpy as np
from sklearn.base import BaseEstimator
from sklearn.base import TransformerMixin
from sklearn.utils.validation import check_is_fitted
def add_sum(X):
sums = X.sum(1).reshape((-1,1))
transformed_X = np.append(X, sums, 1)
return transformed_X
class MySimpleScaler(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
self.means = np.mean(X, axis=0)
self.stds = np.std(X, axis=0)
if not self.stds.all():
raise ValueError('At least one column has standard deviation of 0.')
return self
def transform(self, X):
check_is_fitted(self, ('means', 'stds'))
transformed_X = (X - self.means) / self.stds
return transformed_X
Kemudian, latih dan ekspor pipeline menggunakan transformasi berikut. Beralihlah antara tab berikut guna melihat dua cara untuk mengekspor pipeline:
joblib
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import FunctionTransformer
import my_module
iris = datasets.load_iris()
pipeline = Pipeline([
('scale_data', my_module.MySimpleScaler()),
('add_sum_column', FunctionTransformer(my_module.add_sum)),
('classification', RandomForestClassifier())
])
pipeline.fit(iris.data, iris.target)
joblib.dump(pipeline, 'model.joblib')
pickle
import pickle
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import FunctionTransformer
import my_module
iris = datasets.load_iris()
pipeline = Pipeline([
('scale_data', my_module.MySimpleScaler()),
('add_sum_column', FunctionTransformer(my_module.add_sum)),
('classification', RandomForestClassifier())
])
pipeline.fit(iris.data, iris.target)
with open('model.pkl', 'wb') as model_file:
pickle.dump(pipeline, model_file)
Terakhir, buat paket distribusi sumber .tar.gz
yang berisi my_module
.
Untuk melakukannya, pertama-tama buat file setup.py
berikut:
from setuptools import setup
setup(name='my_custom_code', version='0.1', scripts=['my_module.py'])
Lalu, jalankan python setup.py sdist --formats=gztar
di shell Anda untuk membuat
dist/my_custom_code-0.1.tar.gz
.
Baca panduan untuk men-deploy model guna mempelajari cara men-deploy file tar ini bersama dengan file model.joblib
atau model.pkl
Anda.
Perhatikan bahwa my_module.py
menggunakan NumPy dan scikit-learn sebagai dependensi. Karena kedua library ini disertakan dalam image runtime Prediction AI Platform, Anda tidak perlu menyertakannya dalam file tar.
Untuk tutorial yang lebih mendalam tentang penggunaan kode pipeline kustom, lihat Menggunakan kode kustom untuk pipeline scikit-learn.
Mengekspor rutinitas prediksi kustom
Untuk fleksibilitas maksimum, buat dan ekspor rutinitas prediksi kustom. Rutinitas prediksi kustom memungkinkan Anda menyediakan Prediksi AI Platform dengan kode Python yang ingin Anda jalankan pada waktu prediksi, serta artefak pelatihan apa pun yang ingin Anda gunakan selama prediksi.
Baca panduan rutinitas prediksi kustom untuk mempelajari cara menggunakannya.
Langkah selanjutnya
- Pelajari cara men-deploy model yang diekspor ke AI Platform Prediction untuk menyajikan prediksi.
- Ikuti tutorial tentang penggunaan kode kustom untuk pipeline scikit-learn.
- Pelajari cara membuat rutinitas prediksi kustom.