Modelle für Vorhersagen exportieren

Zur Bereitstellung von Vorhersagen mit AI Platform 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 durchführen oder dafür eine andere Lösung verwenden und das Modell nur für Vorhersagen in AI Platform 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 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 250 MB betragen.

Wenn Sie benutzerdefinierten Code für die Vorhersagen (Beta) bereitstellen, darf die Gesamtgröße der benutzerdefinierten Codepakete ebenfalls maximal 250 MB betragen. Die Dateigröße des benutzerdefinierten Codes zählt unabhängig von anderen Modellartefakten.

Sie können ein höheres Kontingent anfordern, um größere Modelle oder benutzerdefinierte Codepakete bereitzustellen.

TensorFlow-SavedModel exportieren

Wenn Sie TensorFlow zum Trainieren eines Modells verwenden, können Sie das Modell als TensorFlow-SavedModel-Verzeichnis exportieren. 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:

  • save_model der Methode xgboost.Booster verwenden, um eine Datei namens model.bst zu exportieren
  • sklearn.externals.joblib verwenden, um eine Datei namens model.joblib zu exportieren
  • Python-Modul pickle verwenden, um eine Datei namens model.pkl zu exportieren

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:

  • sklearn.externals.joblib verwenden, um eine Datei namens model.joblib zu exportieren
  • Python-Modul pickle verwenden, um eine Datei namens model.pkl zu exportieren

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:

  • sklearn.externals.joblib verwenden, um eine Datei namens model.joblib zu exportieren
  • Python-Modul pickle verwenden, um eine Datei namens model.pkl zu exportieren

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-Bereitstellung können diese Transformer zur Vorhersagezeit verwendet werden, da scikit-learn im Laufzeit-Image von AI Platform enthalten ist.

Sie können jedoch auch die scikit-learn-Klasse FunctionTransformer oder TransformerMixin verwenden, um benutzerdefinierte Transformationen einzubinden. In diesem Fall müssen Sie den benutzerdefinierten Code als Quelldistributionspaket exportieren, um ihn AI Platform zur Verfügung stellen können.

Das folgende Beispiel zeigt, wie Sie benutzerdefinierten Code in einer Pipeline verwenden und für AI Platform exportieren. In diesem Beispiel werden sowohl FunctionTransformer als auch TransformerMixin verwendet. Im Allgemeinen ist FunctionTransformer für einfache 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.

Schreiben Sie zuerst 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

Trainieren und exportieren Sie dann 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'])

Führen Sie dann 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 dieses Tarball-Paket 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 enthalten sind, müssen sie dem Tarball-Paket 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 anweisen, bei der Vorhersage Python-Code auszuführen. Außerdem können Sie alle Trainingsartefakte bereitstellen, die Sie während der Vorhersage verwenden möchten.

Lesen Sie die Anleitung zu benutzerdefinierten Vorhersageroutinen, um Informationen zur Verwendungsweise zu erhalten.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...