Per pubblicare previsioni da AI Platform Prediction, devi esportare la macchina addestrata modello di machine learning 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 per esportare il modello si applicano a prescindere dall'addestramento su AI Platform Prediction o eseguire l'addestramento altrove e vuoi semplicemente ad AI Platform Prediction per fornire 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 pipeline di previsione, puoi includere codice personalizzato al momento della previsione, al di là della semplice routine di previsione che la tua macchina modello di machine learning fornito. 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
La dimensione totale del file degli artefatti del modello di cui esegui il deployment su AI Platform Prediction deve essere 500 MB o inferiore 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 tuo modello TensorFlow come parte di una previsione personalizzata puoi esportarla come SavedModel o come insieme diverso di artefatti. Leggi la guida alla previsione personalizzata routine per saperne di più.
Esporta un booster XGBoost
Se usi XGBoost per addestrare un modello, puoi esportarlo in una delle 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'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 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 uno dei due modi seguenti:
- 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'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 nei 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 scikit-learn
Il scikit-learn Classe pipeline può aiutarti a comporre più stimatori. Ad esempio, puoi usare i transformer per pre-elaborare i dati e passare i dati trasformati a un classificatore. Puoi esporta una pipeline negli stessi due modi in cui puoi esportare altri dati scikit-learn stimatori:
- 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'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 nei 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)
Esporta il codice della pipeline personalizzata
Se utilizzi solo i trasformatori del pacchetto sklearn
per creare la pipeline,
è sufficiente esportare un singolo artefatto 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 usare lo strumento
FunctionTransformer
o
TransformerMixin
per incorporare trasformazioni personalizzate. In questo caso, dovrai esportare
il codice personalizzato come distribuzione di origine
pacco
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
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
Quindi, addestra ed esporta una pipeline utilizzando le trasformazioni riportate di seguito. Attiva/disattiva tra le schede seguenti 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'])
Poi 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
usa NumPy e scikit-learn come dipendenze. Dato che entrambi
di queste librerie sono incluse nel runtime di AI Platform Prediction
immagine, non dovrai includerli
il file tar.
Per un tutorial più approfondito sull'utilizzo del codice della pipeline personalizzato, consulta Utilizzo del codice per le pipeline scikit-learn.
Esporta una routine di previsione personalizzata
Per la massima flessibilità, crea ed esporta una routine di previsione personalizzata. Personalizzati 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
- Scopri come eseguire il deployment del modello esportato in AI Platform Prediction per fornire previsioni.
- Segui un tutorial sull'utilizzo di codice personalizzato per scikit-learn pipeline di dati.
- Scopri come creare una previsione personalizzata di Cloud Shell.