Zur Bereitstellung von Vorhersagen mit AI Platform Prediction müssen Sie das trainierte Modell für maschinelles Lernen als ein oder mehrere Artefakte exportieren. In diesem Leitfaden werden die verschiedenen Möglichkeiten zum Exportieren trainierter Modelle für die Bereitstellung in AI Platform Prediction beschrieben.
Die folgenden Methoden zum Exportieren des Modells gelten unabhängig davon, ob Sie das Training in AI Platform Prediction durchführen oder eine andere Lösung dafür verwenden und das Modell nur für Vorhersagen in AI Platform Prediction bereitstellen möchten.
Nachdem Sie das Modell exportiert haben, lesen Sie den Leitfaden zum Bereitstellen von Modellen. Hier erfahren Sie, wie Sie in AI Platform Prediction Modell- und Versionsressourcen erstellen können, um Vorhersagen durchzuführen.
Benutzerdefinierter Code für Vorhersagen
Wenn Sie eine scikit-learn-Pipeline oder eine benutzerdefinierte Vorhersageroutine exportieren, können Sie benutzerdefinierten Code einbinden, der zur Vorhersagezeit ausgeführt wird – also außerhalb der vom Framework für maschinelles Lernen bereitgestellten Vorhersageroutine. Sie können dann Vorhersageeingaben vorverarbeiten, Vorhersageergebnisse nachverarbeiten oder benutzerdefiniertes Logging hinzufügen.
Maximale Modellgröße
Die Gesamtgröße der Modellartefakte, die Sie für AI Platform Prediction bereitstellen, darf maximal 500 MB betragen, wenn Sie einen Legacy-Maschinentyp (MLS1) verwenden. Wenn Sie einen Compute Engine-Maschinentyp (N1) verwenden, darf die Größe maximal 10 GB betragen. Weitere Informationen zu Maschinentypen für die Onlinevorhersage
TensorFlow-SavedModel exportieren
Wenn Sie ein Modell mithilfe von TensorFlow trainieren, exportieren Sie das Modell als Verzeichnis TensorFlow SavedModel. Informationen zum Exportieren eines TensorFlow-SavedModel, das in AI Platform Prediction bereitgestellt werden kann, finden Sie im Leitfaden zum Exportieren eines SavedModel für Vorhersagen.
Wenn Sie das TensorFlow-Modell im Rahmen einer benutzerdefinierten Vorhersageroutine bereitstellen möchten, können Sie es als SavedModel oder als eine andere Gruppe von Artefakten exportieren. Weitere Informationen finden Sie im Leitfaden zu benutzerdefinierten Vorhersageroutinen.
XGBoost-Booster exportieren
Wenn Sie XGBoost zum Trainieren eines Modells verwenden, können Sie das trainierte Modell auf drei Arten exportieren:
- Mit der
save_model
-Methode vonxgboost.Booster
exportieren Sie eine Datei namensmodel.bst
. - Mit
sklearn.externals.joblib
exportieren Sie eine Datei namensmodel.joblib
. - Mit dem Modul
pickle
von Python exportieren Sie eine Datei namensmodel.pkl
.
Der Dateiname Ihres Modellartefakts muss genau einer dieser Optionen entsprechen.
Die folgenden gekennzeichneten Beispiele zeigen das Trainieren und Exportieren eines Modells mit diesen drei Methoden:
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)
scikit-learn-Estimator exportieren
Wenn Sie ein Modell mit scikit-learn trainieren, können Sie es auf zwei Arten exportieren:
- Mit
sklearn.externals.joblib
exportieren Sie eine Datei namensmodel.joblib
. - Mit dem Modul
pickle
von Python exportieren Sie eine Datei namensmodel.pkl
.
Der Dateiname Ihres Modellartefakts muss genau einer dieser Optionen entsprechen.
Die folgenden gekennzeichneten Beispiele zeigen das Trainieren und Exportieren eines Modells mit diesen zwei Methoden:
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)
scikit-learn-Pipeline exportieren
Mit der scikit-learn-Pipelineklasse können Sie mehrere Estimators erstellen. Sie können zum Beispiel Transformer verwenden, um Daten vorzuverarbeiten und die transformierten Daten an einen Klassifikator weiterzuleiten. Sie können Pipelines wie andere scikit-learn-Estimators auf zwei Arten exportieren:
- Mit
sklearn.externals.joblib
exportieren Sie eine Datei namensmodel.joblib
. - Mit dem Modul
pickle
von Python exportieren Sie eine Datei namensmodel.pkl
.
Der Dateiname Ihres Modellartefakts muss genau einer dieser Optionen entsprechen.
Die folgenden gekennzeichneten Beispiele zeigen das Trainieren und Exportieren eines Modells mit diesen zwei Methoden:
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)
Benutzerdefinierten Pipeline-Code exportieren
Wenn Sie nur Transformer aus dem sklearn
-Paket zum Erstellen der Pipeline verwenden, reicht es aus, ein einzelnes model.joblib
- oder model.pkl
-Artefakt zu exportieren.
Bei der AI Platform Prediction-Bereitstellung können diese Transformer zur Vorhersagezeit verwendet werden, da scikit-learn im Laufzeit-Image von AI Platform Prediction enthalten ist.
Sie können auch die Klasse FunctionTransformer
oder TransformerMixin
von scikit-learn verwenden, um benutzerdefinierte Transformationen einzubinden. In diesem Fall müssen Sie den benutzerdefinierten Code als Quelldistributionspaket exportieren, um ihn AI Platform Prediction zur Verfügung zu stellen.
Im folgenden Beispiel wird gezeigt, wie Sie benutzerdefinierten Code in einer Pipeline verwenden und für AI Platform Prediction exportieren. Im Beispiel werden FunctionTransformer
und TransformerMixin
verwendet. Im Allgemeinen ist FunctionTransformer
für grundlegende Transformationen möglicherweise geeigneter. Mit TransformerMixin
können Sie jedoch eine komplexere Transformation definieren, die den serialisierten Zustand zum Zeitpunkt des Trainings speichert und während der Vorhersage verwendet werden kann.
Zuerst schreiben Sie den folgenden Code in eine Datei mit dem Namen 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
Dann trainieren und exportieren Sie eine Pipeline mit den folgenden Transformationen. Wechseln Sie zwischen den folgenden Tabs, um beide Möglichkeiten zum Exportieren der Pipeline anzuzeigen:
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)
Abschließend erstellen Sie ein .tar.gz
-Quelldistributionspaket, das my_module
enthält.
Dazu erstellen Sie zuerst die folgende Datei setup.py
:
from setuptools import setup
setup(name='my_custom_code', version='0.1', scripts=['my_module.py'])
Dann führen Sie python setup.py sdist --formats=gztar
in der Shell aus, um dist/my_custom_code-0.1.tar.gz
zu erstellen.
Im Leitfaden zum Bereitstellen von Modellen erfahren Sie, wie Sie diese Tar-Datei zusammen mit der Datei model.joblib
oder model.pkl
verwenden können.
Beachten Sie, dass NumPy und scikit-learn von my_module.py
als Abhängigkeiten verwendet werden. Da beide Bibliotheken im Laufzeit-Image von AI Platform Prediction enthalten sind, müssen sie der Tar-Datei nicht hinzugefügt werden.
Eine ausführliche Anleitung zur Verwendung von benutzerdefiniertem Pipeline-Code finden Sie unter Benutzerdefinierten Code für scikit-Pipelines verwenden.
Benutzerdefinierte Vorhersageroutine exportieren
Für maximale Flexibilität erstellen und exportieren Sie eine benutzerdefinierte Vorhersageroutine. Mit benutzerdefinierten Vorhersageroutinen können Sie AI Platform Prediction mit Python-Code, den Sie zur Vorhersagezeit ausführen möchten, sowie alle Trainingsartefakte bereitstellen, die Sie während der Vorhersage verwenden möchten.
Weitere Informationen Verwendungsweise finden Sie in der Anleitung zu benutzerdefinierten Vorhersageroutinen.
Nächste Schritte
- Bereitstellung eines exportierten Modells in AI Platform Prediction für den Abruf von Vorhersagen
- Anleitung zum Verwenden von benutzerdefiniertem Code für scikit-learn-Pipelines
- Erstellen von benutzerdefinierten Vorhersageroutinen