Modelle für Vorhersagen exportieren

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 model und model 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 von xgboost.Booster exportieren Sie eine Datei namens model.bst.
  • Mit sklearn.externals.joblib exportieren Sie eine Datei namens model.joblib.
  • Mit dem Modul pickle von Python exportieren Sie eine Datei namens model.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 namens model.joblib.
  • Mit dem Modul pickle von Python exportieren Sie eine Datei namens model.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 namens model.joblib.
  • Mit dem Modul pickle von Python exportieren Sie eine Datei namens model.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.

In der Anleitung zum Bereitstellen von Modellen erfahren Sie, wie Sie diese TAR-Datei zusammen mit der Datei model.joblib oder model.pkl bereitstellen.

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