Esportazione dei modelli per la previsione

Per fornire previsioni da AI Platform Prediction, devi esportare il modello di machine learning addestrato come uno o più artefatti. 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 o altrove e vuoi solo eseguire il deployment su AI Platform Prediction per fornire previsioni.

Dopo aver esportato il modello, leggi la guida al deployment dei modelli per scoprire come creare risorse di model e model 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, post-elaborare i risultati della previsione o aggiungere un logging personalizzato.

Dimensione massima del modello

La dimensione totale del file degli artefatti del modello di cui esegui il deployment in AI Platform Prediction deve essere 500 MB o inferiore se utilizzi un tipo di macchina legacy (MLS1). Deve essere 10 GB o inferiore se utilizzi un tipo di macchina di Compute Engine (N1). Scopri di più sui tipi di macchine per la previsione online.

Esporta un SaveModel TensorFlow

Se utilizzi TensorFlow per addestrare un modello, esportalo come directory SalvadModel TensorFlow. Per scoprire come esportare un SaveModel TensorFlow di cui puoi eseguire il deployment in AI Platform Prediction, leggi la guida all'esportazione di un savedModel per la previsione.

Se vuoi eseguire il deployment del tuo modello TensorFlow come parte di una routine di previsione personalizzata, puoi esportarlo come SaveModel o come un insieme diverso di artefatti. Per ulteriori informazioni, leggi la guida alle routine di previsione personalizzate.

Esporta un booster XGBoost

Se utilizzi XGBoost per addestrare un modello, puoi esportare il modello addestrato in uno dei tre modi seguenti:

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

cetriolo

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 stimatore scikit-learn

Se utilizzi scikit-learn per addestrare un modello, puoi esportarlo in uno di 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.

I seguenti esempi a schede 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')

cetriolo

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)

Esporta una pipeline scikit-learn

La classe di pipeline scikit-learn può aiutarti a scrivere più stimati. Ad esempio, puoi usare i transformer per pre-elaborare i dati e passare i dati trasformati Puoi esportare una pipeline negli stessi 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.

I seguenti esempi a schede 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')

cetriolo

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)

Esporta codice pipeline personalizzato

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

Tuttavia, puoi anche utilizzare la classe FunctionTransformer o TransformerMixin di scikit-learn per incorporare trasformazioni personalizzate. Se lo fai, devi esportare il codice personalizzato come pacchetto di distribuzione di origine per fornirlo ad AI Platform Prediction.

L'esempio seguente mostra come utilizzare il codice personalizzato in una pipeline ed esportarlo per AI Platform Prediction. L'esempio utilizza sia FunctionTransformer sia TransformerMixin. In generale, FunctionTransformer potrebbe essere più pratico per trasformazioni di base, ma TransformerMixin consente di definire una trasformazione più complessa che salva lo stato serializzato al momento dell'addestramento e può essere utilizzato 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

Quindi addestra ed esporta una pipeline utilizzando le trasformazioni riportate di seguito. 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')

cetriolo

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 del codice sorgente .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 tua shell per creare dist/my_custom_code-0.1.tar.gz.

Leggi la guida al deployment dei modelli per scoprire come eseguire il deployment di questo file tar insieme al 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 della pipeline personalizzato, consulta Utilizzo di codice personalizzato per le pipeline scikit-learn.

Esporta una routine di previsione personalizzata

Per la massima flessibilità, crea ed esporta una routine di previsione personalizzata. Le routine di previsione personalizzate consentono di fornire AI Platform Prediction con il codice Python da eseguire al momento della previsione, nonché con gli eventuali artefatti di addestramento che vuoi utilizzare durante la previsione.

Leggi la guida alle routine di previsione personalizzate per scoprire come utilizzarle.

Passaggi successivi