Untuk menayangkan prediksi dari AI Platform Prediction, Anda harus mengekspor model machine learning terlatih sebagai satu atau beberapa artefak. Panduan ini menjelaskan berbagai cara untuk mengekspor model terlatih untuk di-deploy di AI Platform Prediction.
Metode ekspor model berikut berlaku baik jika Anda melakukan pelatihan di AI Platform Prediction atau melakukan pelatihan di tempat lain dan hanya ingin men-deploy ke AI Platform Prediction untuk menayangkan prediksi.
Setelah mengekspor model, baca panduan untuk men-deploy model guna mempelajari cara membuat resource model dan versi di AI Platform Prediction untuk menayangkan 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 framework machine learning Anda. Anda dapat menggunakannya untuk memproses input prediksi, memproses hasil prediksi, atau menambahkan logging kustom.
Ukuran model maksimum
Ukuran file total artefak model yang Anda deploy ke AI Platform Prediction harus 500 MB atau kurang jika Anda menggunakan jenis mesin lama (MLS1). Ukurannya harus 10 GB atau kurang jika Anda menggunakan jenis mesin Compute Engine (N1). Pelajari lebih lanjut jenis mesin untuk prediksi online.
Mengekspor TensorFlow SavedModel
Jika Anda menggunakan TensorFlow untuk melatih model, ekspor model Anda sebagai direktori SavedModel TensorFlow. Untuk mempelajari cara mengekspor SavedModel TensorFlow yang dapat Anda deploy ke AI Platform Prediction, baca panduan untuk mengekspor SavedModel untuk prediksi.
Jika ingin men-deploy model TensorFlow sebagai bagian dari rutinitas prediksi kustom, Anda dapat mengekspornya sebagai SavedModel atau sebagai kumpulan artefak yang berbeda. Baca panduan untuk rutinitas prediksi kustom untuk mempelajari lebih lanjut.
Mengekspor booster XGBoost
Jika menggunakan XGBoost untuk melatih model, Anda dapat mengekspor model terlatih dengan salah satu dari tiga cara berikut:
- 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 estimator 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 menyusun beberapa estimator. Misalnya, Anda dapat menggunakan pengubah untuk memproses data sebelumnya dan meneruskan data yang diubah ke pengklasifikasi. Anda dapat mengekspor Pipeline dengan dua cara yang sama seperti saat 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)
Mengekspor kode pipeline kustom
Jika Anda hanya menggunakan transformer dari paket sklearn
untuk mem-build pipeline,
cukup ekspor satu artefak model.joblib
atau model.pkl
.
Deployment AI Platform Prediction Anda dapat menggunakan pengubah ini pada waktu
prediksi karena scikit-learn disertakan dalam image runtime
AI Platform Prediction.
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
agar dapat memberikannya ke AI Platform Prediction.
Contoh berikut menunjukkan cara menggunakan kode kustom dalam 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 serialisasi 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. Alihkan tab berikut untuk melihat dua cara 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, buat file setup.py
berikut terlebih dahulu:
from setuptools import setup
setup(name='my_custom_code', version='0.1', scripts=['my_module.py'])
Kemudian, jalankan python setup.py sdist --formats=gztar
di shell 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
AI Platform Prediction, Anda tidak perlu menyertakannya dalam
file tar.
Untuk tutorial yang lebih mendalam tentang cara menggunakan 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 AI Platform Prediction dengan kode Python yang ingin dijalankan pada waktu prediksi, serta artefak pelatihan yang ingin Anda gunakan selama prediksi.
Baca panduan untuk rutinitas prediksi kustom guna mempelajari cara menggunakannya.
Langkah selanjutnya
- Pelajari cara men-deploy model yang diekspor ke AI Platform Prediction untuk menayangkan prediksi.
- Ikuti tutorial tentang menggunakan kode kustom untuk pipeline scikit-learn.
- Pelajari cara membuat rutinitas prediksi kustom.