Konfigurieren der Inference-Ausgabe in erzeugte Container - 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.

Konfigurieren der Inference-Ausgabe in erzeugte Container

Autopilot erzeugt eine geordnete ContainerDefinition-Liste. Dies kann verwendet werden, um ein Modell für die Implementierung in einer Pipeline für Machine Learning zu erstellen. Dieses Modell kann für Online-Hosting und Inference verwendet werden.

Der Kunden kann mit der ListCandidateForAutoMLJobAPI Definitionen von Inference-Containern auflisten. Die Liste der Definitionen für Inference-Container, die den optimalen Kandidaten darstellen, ist auch in der Antwort DescribeAutoMLJob verfügbar.

Definitionen von Inference-Containern für Aufgabentypen mit Regression und Klassifikation

Autopilot erzeugt Inference-Container, die für den Trainingsmodus und den Aufgabentyp des Jobs spezifisch sind.

Containerdefinitionen für den Hyperparameter-Optimierungsmodus (HPO)

  • Regression: HPO erzeugt zwei Container:

    1. Einen Feature-Engineering-Container, der die ursprünglichen Features in Features umwandelt, anhand derer die Regressionsalgorithmen trainiert werden können.

    2. Einen Algorithmus-Container, der Features transformiert und einen Regressionskoeffizienten für den Datensatz erzeugt.

  • Klassifizierung: HPO erzeugt drei Container:

    1. Einen Feature-Engineering-Container, der die ursprünglichen Features in Features umwandelt, anhand derer die Klassifizierungsalgorithmen trainiert werden können.

    2. Einen Algorithmus-Container, der die predicted_label mit der höchsten Wahrscheinlichkeit erzeugt. Dieser Container kann auch die verschiedenen Wahrscheinlichkeiten erzeugen, die mit den Klassifikationsergebnissen in der Inference-Antwort verknüpft sind.

    3. Ein Feature-Engineering-Container, der die Vorhersage des Algorithmus nachbearbeitet. Dieser kann z.B. am vorhergesagten Label eine inverse Transformation vornehmen und dieses in das ursprüngliche Label ändern.

Container-Definitionen für den Ensembling-Modus

Im Ensembling-Modus haben Aufgabentypen sowohl mit Regression als auch Klassifikation nur einen Inference-Container. Dieser Inference-Container transformiert die Features und erzeugt anhand des Aufgabentyps die Vorhersagen.

Inference-Antworten pro Aufgabentyp

Inference-Antworten für Klassifikationsmodelle

Bei Inference-Containern mit Klassifikation können Sie den Inhalt der Inference-Antwort mithilfe von vier vorab festgelegten Schlüsseln auswählen:

  • predicted_label: Das Label, das das richtige Label mit der höchsten Wahrscheinlichkeit vorhersagen kann, wie vom Autopiloten ermittelt.

  • probability:

    • HPO-Modelle: Die Wahrscheinlichkeit der True Klasse für die binäre Klassifikation. Die Wahrscheinlichkeit der predicted_label Mehrklassen-Klassifizierung.

    • Ensemble-Modelle: Die Wahrscheinlichkeit der predicted_label für die binäre und die Mehrklassen-Klassifizierung.

  • probabilities: Die Liste der Wahrscheinlichkeiten für alle entsprechenden Klassen.

  • labels: Die Liste aller Labels.

Wenn Sie z.B. bei einer Aufgabe mit binärer Klassifikation die Schlüssel für die Inference-Antwort übergeben ['predicted_label', 'probability', 'probabilities', 'labels'] und die ausgegebene Antwort die Form [1, 0.1, "[0.9, 0.1]", "['1', '0']"] hat, sollten Sie sie wie folgt interpretieren:

  1. predicted_label ist gleich 1, weil das Label „1" eine höhere Wahrscheinlichkeit hat (in diesem Fall 0.9).

  2. Bei HPO-Modellen ist probability gleich 0.1, was der Wahrscheinlichkeit der positive_class entspricht (in diesem Fall 0), die vom Autopiloten ausgewählt wurde.

    Bei Ensemble-Modellen ist probability gleich 0.9, was der Wahrscheinlichkeit der predicted_label entspricht.

  3. probabilities listet die probability der einzelnen Labels in labels auf.

  4. labels sind die eindeutigen Labels im Datensatz, wobei das zweite Label (in diesem Fall „0") das vom Autopilot gewählte positive_class ist.

Inference-Container sind standardmäßig so konfiguriert, dass sie nur die predicted_label erzeugen. Um zusätzliche Inhalte für die Inference auszuwählen, können Sie den Parameter inference_response_keys so aktualisieren, dass er bis zu drei dieser Umgebungsvariablen enthält:

  • SAGEMAKER_INFERENCE_SUPPORTED: Damit erhalten Sie Hinweise darauf, welche Inhalte die einzelnen Container unterstützen.

  • SAGEMAKER_INFERENCE_INPUT: Dieser sollte auf die Schlüssel gesetzt werden, die der Container an Eingabe-Nutzlast erwartet.

  • SAGEMAKER_INFERENCE_OUTPUT: Dieser sollte mit dem Schlüsselsatz gefüllt werden, die der Container ausgibt.

Inference-Antworten für Klassifikationsmodelle im HPO-Modus

In diesem Abschnitt wird gezeigt, wie die Inference-Antwort von Klassifikationsmodellen im Hyperparameter-Optimierungsmodus (HPO) konfiguriert wird.

So wählen Sie den Inhalt der Inference-Antwort im HPO-Modus aus: Fügen Sie die Variablen SAGEMAKER_INFERENCE_INPUT und SAGEMAKER_INFERENCE_OUTPUT zu den zweiten und dritten Containern hinzu, die für Klassifikationsprobleme im HPO-Modus erzeugt werden.

Die Schlüssel, die vom zweiten Container (Algorithmus) unterstützt werden, sind predicted_label, probability und probilities. Beachten Sie, dass labels bewusst nicht zu SAGEMAKER_INFERENCE_SUPPORTED hinzugefügt wird.

Die Schlüssel, die vom dritten Container für das Klassifikationsmodell unterstützt werden sind predicted_label, labels, probability und probabilities. Daher beinhaltet die Umgebung SAGEMAKER_INFERENCE_SUPPORTED die Namen dieser Schlüssel.

Verwenden Sie den folgenden Beispielcode zur Aktualisierung der Definition der Inference-Container, damit diese predicted_label und probability erhalten.

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

Der folgende Beispielcode aktualisiert die Definition der Inference-Container, damit diese predicted_label, probabilities und labels erhalten. Übergeben Sie labels nicht an den zweiten Container (den Container für Algorithmen), da es vom dritten Container unabhängig erzeugt wird.

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})

Die folgenden einklappbaren Abschnitte enthalten Codebeispiele für AWS SDK for Python (Boto3) und für SageMaker SDK for Python. Jeder Abschnitt zeigt, wie im HPO-Modus der Inhalt der Inference-Antworten für den jeweiligen Beispielcode ausgewählt wird.

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )
from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, inference_response_keys**=['probabilities', 'labels']) aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)

Inference-Antworten für Klassifikationsmodelle im Ensembling-Modus

In diesem Abschnitt wird gezeigt, wie die Inference-Antwort von Klassifikationsmodellen im Ensembling-Modus konfiguriert wird.

Um im Ensembling-Modus den Inhalt der Inference-Antwort auszuwählen, aktualisieren Sie die Umgebungsvariable SAGEMAKER_INFERENCE_OUTPUT.

Die Schlüssel, die vom Container für das Klassifikationsmodell unterstützt werden, sind predicted_label, labels, probability und probabilities. Diese Schlüssel sind in der Umgebung SAGEMAKER_INFERENCE_SUPPORTED enthalten.

Informationen zur Aktualisierung der Definition des Inference-Containers, damit diese predicted_label und probability erhält, finden Sie im folgenden Beispielcode.

containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

Der folgende einklappbare Abschnitt enthält Beispielcode für die Auswahl des Inhalts der Inference-Antworten im Ensembling-Modus. Das Beispiel verwendet AWS SDK for Python (Boto3).

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] *best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) * # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )

Der folgende zusammenklappbare Abschnitt enthält ein Codebeispiel, das mit dem SageMaker SDK für Python-Beispiel für HPO identisch ist. Er wird hier zu Ihrer Bequemlichkeit angegeben.

Im folgenden HPO-Codebeispiel wird SageMaker SDK für Python verwendet.

from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, *inference_response_keys**=['probabilities', 'labels'])* aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)