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 i modelli addestrati per il deployment in 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.
Dopo aver esportato il modello, leggi la guida al deployment dei modelli per scoprire come creare risorse model e version in AI Platform Prediction per l'elaborazione di 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 eseguire la preelaborazione dell'input di previsione, il post-trattamento dei risultati di previsione o aggiungere il logging personalizzato.
Dimensioni massime 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 pari o inferiore a 10 GB se utilizzi un tipo di macchina Compute Engine (N1). Scopri di più sui tipi di macchine per la previsione online.
Esportare un SavedModel di TensorFlow
Se utilizzi TensorFlow per addestrare un modello, esportalo come directory SavedModel di TensorFlow. Per imparare a esportare un SavedModel di TensorFlow che puoi eseguire in AI Platform Prediction, leggi la guida all'esportazione di un SavedModel 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.
Esportare un booster XGBoost
Se utilizzi XGBoost per addestrare un modello, puoi esportarlo in uno di tre modi:
- Utilizza il metodo
save_model
dixgboost.Booster
per esportare un file denominatomodel.bst
. - Utilizza
sklearn.externals.joblib
per esportare un file denominatomodel.joblib
. - Utilizza il modulo
pickle
di Python per esportare un file denominatomodel.pkl
.
Il nome file dell'elemento 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')
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)
Esportare un estimatore di scikit-learn
Se utilizzi scikit-learn per addestrare un modello, puoi esportarlo in due modi:
- Utilizza
sklearn.externals.joblib
per esportare un file denominatomodel.joblib
. - Utilizza il modulo
pickle
di Python per esportare un file denominatomodel.pkl
.
Il nome file dell'elemento 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')
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)
Esportare una pipeline di scikit-learn
La classe Pipeline di scikit-learn 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 denominatomodel.joblib
. - Utilizza il modulo
pickle
di Python per esportare un file denominatomodel.pkl
.
Il nome file dell'elemento 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')
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)
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 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. 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 AI Platform Prediction. L'esempio utilizza sia FunctionTransformer
sia
TransformerMixin
. In generale, FunctionTransformer
potrebbe essere più pratico per le trasformazioni di base, ma TransformerMixin
ti consente di definire una trasformazione più complessa che salva lo stato serializzato durante l'addestramento e può essere utilizzata 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')
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)
Infine, crea un pacchetto di distribuzione del codice sorgente .tar.gz
contenente my_module
.
Per farlo, crea innanzitutto 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 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 personalizzato per le pipeline di scikit-learn, consulta Utilizzare il codice personalizzato per le pipeline di scikit-learn.
Esportare una routine di previsione personalizzata
Per la massima flessibilità, crea ed esporta una routine di previsione personalizzata. Le routine di previsione personalizzate ti consentono di fornire ad AI Platform Prediction il codice Python che vuoi eseguire al momento della previsione, nonché gli elementi di addestramento che vuoi utilizzare durante la previsione.
Leggi la guida alle routine di previsione personalizzata per scoprire come utilizzarle.
Passaggi successivi
- Scopri come eseguire il deployment del modello esportato in AI Platform Prediction per generare previsioni.
- Segui un tutorial sull'utilizzo di codice personalizzato per le pipeline di scikit-learn.
- Scopri come creare una routine di previsione personalizzata.