Esportazione dei modelli per la previsione

Per pubblicare le previsioni di AI Platform Prediction, devi esportare il tuo modello di machine learning addestrato come uno o più elementi. Questa guida descrive i diversi modi per esportare modelli addestrati per il deployment su AI Platform Prediction.

I seguenti metodi di esportazione del modello si applicano sia che tu esegua l'addestramento su AI Platform Prediction sia che tu esegua l'addestramento altrove e voglia solo eseguire il deployment su AI Platform Prediction per generare previsioni.

Una volta esportato il modello, leggi la guida per eseguire il deployment dei modelli per scoprire come creare un modello e versione su AI Platform Prediction per fornire previsioni.

Codice personalizzato per la previsione

Se esporti una pipeline scikit-learn o una routine di previsione personalizzata, puoi includere codice personalizzato da eseguire al momento della previsione, oltre alla routine di previsione fornita dal tuo framework di machine learning. Puoi utilizzarlo per pre-elaborare l'input di previsione, dopo l'elaborazione dei risultati delle previsioni o aggiungere un logging personalizzato.

Dimensione massima del modello

Le dimensioni totali dei file degli elementi del modello di cui esegui il deployment in AI Platform Prediction devono essere pari o inferiori a 500 MB se utilizzi un tipo di macchina legacy (MLS1). Deve essere Massimo 10 GB se utilizzi un tipo di macchina Compute Engine (N1). Scopri di più sui tipi di macchine online per la previsione.

Esporta un SavedModel di TensorFlow

Se utilizzi TensorFlow per addestrare un modello, esporta il modello come TensorFlow SavedModel Google Cloud. A scopri come esportare un SavedModel di cui eseguire il deployment AI Platform Prediction, leggi la guida all'esportazione di un SavedModel per per la previsione.

Se vuoi eseguire il deployment del modello TensorFlow all'interno di una routine di previsione personalizzata, puoi esportarlo come SavedModel o come un insieme diverso di elementi. Per saperne di più, leggi la guida alle routine di previsione personalizzate.

Esporta un booster XGBoost

Se usi XGBoost per addestrare un modello, puoi esportarlo in una delle tre modi:

  • Utilizza il metodo save_model di xgboost.Booster per esportare un file denominato model.bst.
  • Utilizza sklearn.externals.joblib per esportare un file denominato model.joblib.
  • Utilizza il modulo pickle di Python per esportare un file denominato model.pkl.

Il nome file dell'artefatto del modello deve corrispondere esattamente a una di queste opzioni.

I seguenti esempi con schede mostrano come addestrare ed esportare un modello in ciascuno dei tre modi:

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

sottaceti

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)

Esporta uno strumento di stima scikit-learn

Se utilizzi scikit-learn per addestrare un modello, puoi esportarlo in due modi:

  • Utilizza sklearn.externals.joblib per esportare un file denominato model.joblib.
  • Utilizza il modulo pickle di Python per esportare un file denominato model.pkl.

Il nome file dell'artefatto del modello deve corrispondere esattamente a una di queste opzioni.

Gli esempi suddivisi in schede riportati di seguito mostrano come addestrare ed esportare un modello in ciascuno dei due modi:

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

sottaceti

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)

Esportare una pipeline di scikit-learn

Il scikit-learn Classe pipeline può aiutarti a comporre più stimatori. Ad esempio, puoi utilizzare i trasformatori per pre-elaborare i dati e passarli a un classificatore. Puoi esportare una pipeline nei due modi in cui puoi esportare altri stimatori scikit-learn:

  • Utilizza sklearn.externals.joblib per esportare un file denominato model.joblib.
  • Utilizza il modulo pickle di Python per esportare un file denominato model.pkl.

Il nome file dell'artefatto del modello deve corrispondere esattamente a una di queste opzioni.

Gli esempi suddivisi in schede riportati di seguito mostrano come addestrare ed esportare un modello in ciascuno dei due modi:

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

sottaceti

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)

Esportare il codice della pipeline personalizzata

Se utilizzi solo i trasformatori del pacchetto sklearn per creare la pipeline, è sufficiente esportare un singolo elemento model.joblib o model.pkl. Il deployment di AI Platform Prediction può utilizzare questi trasformatori durante la previsione perché scikit-learn è incluso nel runtime di AI Platform Prediction dell'immagine.

Tuttavia, puoi anche utilizzare la classe FunctionTransformer o TransformerMixin di scikit-learn per incorporare trasformazioni personalizzate. In questo caso, devi esportare il codice personalizzato come pacchetto di distribuzione di origine per poterlo fornire ad AI Platform Prediction.

L'esempio seguente mostra come utilizzare il codice personalizzato in una pipeline ed esportarlo per la previsione della piattaforma AI. L'esempio utilizza sia FunctionTransformer che TransformerMixin. In generale, FunctionTransformer può essere più comodo per trasformazioni di base, ma TransformerMixin consente di definire una trasformazione che salva lo stato serializzato al momento dell'addestramento durante la previsione.

Innanzitutto, scrivi il seguente codice in un file denominato 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

Dopodiché, addestra ed esporta una pipeline utilizzando le seguenti trasformazioni. Passa tra le seguenti schede per visualizzare i due modi per esportare la 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')

sottaceti

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)

Infine, crea un pacchetto di distribuzione di origine .tar.gz contenente my_module. Per farlo, devi prima creare il seguente file setup.py:

from setuptools import setup

setup(name='my_custom_code', version='0.1', scripts=['my_module.py'])

Quindi, esegui python setup.py sdist --formats=gztar nella shell per creare dist/my_custom_code-0.1.tar.gz.

Leggi la guida al deployment dei modelli per scoprire come per eseguire il deployment di questo file tar insieme al tuo file model.joblib o model.pkl.

Tieni presente che my_module.py utilizza NumPy e scikit-learn come dipendenze. Poiché entrambe queste librerie sono incluse nell'immagine di runtime di AI Platform Prediction, non è necessario includerle nel file tar.

Per un tutorial più approfondito sull'utilizzo del codice personalizzato per le pipeline di scikit-learn, consulta Utilizzare il codice personalizzato per le pipeline di scikit-learn.

Esporta una routine di previsione personalizzata

Per la massima flessibilità, crea ed esporta una routine di previsione personalizzata. Personalizzate le routine di previsione ti consentono di fornire AI Platform Prediction con il codice Python al momento della previsione, nonché tutti gli artefatti di addestramento che durante la previsione.

Leggi la guida alla previsione personalizzata personalizzate per imparare a usarle.

Passaggi successivi