Echtzeit-Prognosen mit einer Inferenz-Pipeline - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Echtzeit-Prognosen mit einer Inferenz-Pipeline

Sie können trainierte Modelle in einer Inferenz-Pipeline verwenden, um Echtzeit-Prognosen direkt ohne externe Vorverarbeitung durchzuführen. Wenn Sie die Pipeline konfigurieren, können Sie wählen, ob Sie die integrierten Feature-Transformatoren verwenden möchten, die bereits in Amazon verfügbar sind SageMaker. Sie können auch Ihre eigene Transformationslogik mit nur wenigen Zeilen von Scikit-learn- oder Spark-Code implementieren.

MLeap, ein Serialisierungsformat und eine Ausführungs-Engine für Machine-Learning-Pipelines, unterstützt Spark, Scikit-Learn sowie TensorFlow für das Trainieren von Pipelines und deren Export in eine serialisierte Pipeline, das sogenannte Bundle. MLeap Sie können Bundles zurück in Spark deserialisieren, um sie im Batch-Modus zu bewerten, oder in die Runtime, um Echtzeitdienste bereitzustellen. MLeap API

Die Container in einer Pipeline überwacht den in der Umgebungsvariable SAGEMAKER_BIND_TO_PORT angegebenen Port (anstelle von 8080). Stellt diese Umgebungsvariable bei der Ausführung in einer Inferenz-Pipeline SageMaker automatisch Containern zur Verfügung. Wenn diese Umgebungsvariable nicht vorhanden ist, verwenden Container standardmäßig Port 8080. Verwenden Sie den folgenden Befehl zum Hinzufügen einer Kennzeichnung zu Ihrem Dockerfile, um anzuzeigen, dass Ihr Container diese Anforderung erfüllt.

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

Wenn Ihr Container einen zweiten Port überwachen muss, wählen Sie einen Port im von der Umgebungsvariable SAGEMAKER_SAFE_PORT_RANGE angegebenen Bereich. Geben Sie den Wert als inklusiven Bereich im Format an"XXXX-YYYY", wobei XXXX und mehrstellige Ganzzahlen YYYY sind. SageMaker stellt diesen Wert automatisch bereit, wenn Sie den Container in einer Multicontainer-Pipeline ausführen.

Anmerkung

Um benutzerdefinierte Docker-Images in einer Pipeline zu verwenden, die SageMaker integrierte Algorithmen enthält, benötigen Sie eine Amazon Elastic Container Registry (AmazonECR) -Richtlinie. Ihr ECR Amazon-Repository muss die SageMaker Erlaubnis erteilen, das Bild abzurufen. Weitere Informationen finden Sie unter Problembehandlung bei Amazon ECR Permissions for Inference Pipelines.

Erstellen und Bereitstellen eines Inferenz-Pipeline-Endpunkts

Der folgende Code erstellt und implementiert ein Echtzeit-Inferenz-Pipeline-Modell mit SparkML und XGBoost Serienmodellen unter Verwendung von. SageMaker SDK

from sagemaker.model import Model from sagemaker.pipeline_model import PipelineModel from sagemaker.sparkml.model import SparkMLModel sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz') sparkml_model = SparkMLModel(model_data=sparkml_data) xgb_model = Model(model_data=xgb_model.model_data, image=training_image) model_name = 'serial-inference-' + timestamp_prefix endpoint_name = 'serial-inference-ep-' + timestamp_prefix sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model]) sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Aufruf von Echtzeit-Inferenz von einem Inferenz-Pipeline-Endpunkt

Das folgende Beispiel zeigt, wie Vorhersagen in Echtzeit getroffen werden können, indem ein Inferenzendpunkt aufgerufen und eine Anforderungsnutzlast im folgenden Format übergeben wird: JSON

import sagemaker from sagemaker.predictor import json_serializer, json_deserializer, Predictor payload = { "input": [ { "name": "Pclass", "type": "float", "val": "1.0" }, { "name": "Embarked", "type": "string", "val": "Q" }, { "name": "Age", "type": "double", "val": "48.0" }, { "name": "Fare", "type": "double", "val": "100.67" }, { "name": "SibSp", "type": "double", "val": "1.0" }, { "name": "Sex", "type": "string", "val": "male" } ], "output": { "name": "features", "type": "double", "struct": "vector" } } predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer, content_type='text/csv', accept='application/json' print(predictor.predict(payload))

Die Antwort, die Sie von predictor.predict(payload) erhalten, ist das Inferenzergebnis des Modells.

Beispiel für eine Echtzeit-Inferenz-Pipeline

Sie können dieses Beispiel-Notebook mit dem SKLearn Prädiktor ausführen, der zeigt, wie ein Endpunkt bereitgestellt, eine Inferenzanforderung ausgeführt und dann die Antwort deserialisiert wird. Dieses Notizbuch und weitere Beispiele finden Sie im SageMaker GitHub Amazon-Beispiel-Repository.