Mengekspor model untuk prediksi

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 bernama model.bst.
  • Gunakan sklearn.externals.joblib untuk mengekspor file bernama model.joblib.
  • Gunakan modul pickle Python untuk mengekspor file bernama model.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 bernama model.joblib.
  • Gunakan modul pickle Python untuk mengekspor file bernama model.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 bernama model.joblib.
  • Gunakan modul pickle Python untuk mengekspor file bernama model.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