Verwenden Sie inkrementelles Training in Amazon SageMaker - 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.

Verwenden Sie inkrementelles Training in Amazon SageMaker

Im Laufe der Zeit könnten Sie feststellen, dass ein Modell Inferenzen generiert, die nicht mehr so gut sind wie früher. Mit dem inkrementellen Training können Sie die Artefakte eines bestehenden Modells und einen erweiterten Datensatz verwenden, um ein neues Modell zu trainieren. Durch das inkrementelle Training sparen Sie sowohl Zeit als auch Ressourcen.

Mit dem inkrementellen Training haben Sie folgende Möglichkeiten:

  • Sie können ein neues Modell mit einem erweiterten Datensatz trainieren, das ein grundlegendes Muster enthält, welches im vorherigen Training nicht berücksichtigt wurde, was eine schlechte Leistung des Modells zur Folge hatte.

  • Sie können die Modellartefakte oder einen Teil der Modellartefakte eines beliebten, öffentlich zugänglichen Modells in einem Trainingsauftrag verwenden. Sie müssen beim Trainieren eines neuen Modells also nicht ganz von vorne beginnen.

  • Sie können ein angehaltenes Training wiederaufnehmen.

  • Sie können mehrere Varianten eines Modells trainieren, entweder mit unterschiedlichen Hyperparametern oder unter Verwendung verschiedener Datensätze.

Weitere Informationen über Trainingsaufträge finden Sie unter Trainiere ein Modell mit Amazon SageMaker.

Sie können inkrementell mit der SageMaker Konsole oder dem Amazon SageMaker Python SDK trainieren.

Wichtig

Derzeit unterstützen nur drei integrierte Algorithmen inkrementelle Trainings: Objekterkennung – MXNet, Bildklassifikation - MXNet und Semantischer Segmentierungsalgorithm.

Durchführen des inkrementellen Trainings (Konsole)

Für diesen Vorgang ist Folgendes erforderlich:

  • Löschen Sie den Amazon Simple Storage Service (Amazon S3)-Bucket, in dem die Daten gespeichert wurden.

  • Die URL des S3-Buckets, in dem die Ausgabe des Trainingsauftrags gespeichert werden soll.

  • Der Amazon-Elastic-Container-Registry-Pfad, in dem der Trainingscode gespeichert ist. Weitere Informationen finden Sie unter Docker-Registry-Pfade und Beispielcode.

  • Die URL des S3-Buckets, in dem Sie die Modellartefakte gespeichert haben, die Sie für das inkrementelle Training verwenden möchten. Die URL für die Modellartefakte finden Sie auf der Detailseite des Trainingsauftrags, der für die Erstellung des Modells verwendet wurde. Um die Detailseite aufzurufen, wählen Sie in der SageMaker Konsole Inference, dann Models und anschließend das Modell aus.

Um einen angehaltenen Trainingsauftrag neu zu starten, verwenden Sie die URL für die Modellartefakte auf der Detailseite genau so, wie Sie es bei einem Modell oder einem abgeschlossenen Trainingsauftrag tun würden.

Führen Sie das inkrementelle Training mit der Konsole wie folgt aus:
  1. Öffnen Sie die SageMaker Amazon-Konsole unter https://console.aws.amazon.com/sagemaker/.

  2. Wählen Sie im Navigationsbereich Training (Training) und dann Training jobs (Trainingsaufträge) aus.

  3. Wählen Sie Create training job (Trainingsauftrag erstellen) aus.

  4. Legen Sie einen Namen für den Trainingsauftrag fest. Der Name muss innerhalb einer AWS Region in einem AWS Konto eindeutig sein. Der Name des Trainingsauftrags muss zwischen 1 und 63 Zeichen umfassen. Gültige Zeichen: a–z, A–Z, 0–9 und . : + = @ _ % – (Bindestrich).

  5. Wählen Sie den Algorithmus, den Sie verwenden möchten. Informationen zu Algorithmen finden Sie unter Verwenden Sie die SageMaker integrierten Algorithmen von Amazon oder vortrainierte Modelle.

  6. (Optional) Bei Resource configuration (Ressourcenkonfiguration) können Sie entweder die Standardwerte übernehmen oder die Ressourcennutzung erhöhen, um die Berechnungszeit zu verkürzen.

    1. (Optional) Wählen Sie für Instance type (Instance-Typ) den ML-Compute-Instance-Typ, den Sie verwenden möchten. In den meisten Fällen ist ml.m4.xlarge ausreichend.

    2. Übernehmen Sie bei Instance count (Instance-Anzahl) den Standardwert 1.

    3. (Optional) Wählen Sie unter Additional volume per instance (GB) (Zusätzliches Volume pro Instance (GB)) die Größe des ML-Speicher-Volumes, das Sie bereitstellen möchten. In den meisten Fällen können Sie den Standardwert 1 verwenden. Bei Verwendung eines großen Datensatzes sollten Sie das Volume vergrößern.

  7. Machen Sie Angaben zu den Eingabedaten für den Trainingsdatensatz.

    1. Bei Channel name (Kanalname) können Sie entweder die Standardeinstellung (train) übernehmen oder einen aussagekräftigeren Namen für den Trainingsdatensatz angeben, beispielsweise expanded-training-dataset.

    2. Wählen Sie für InputModeDatei“. Für das inkrementelle Training müssen Sie den Datei-Eingabemodus verwenden.

    3. Wählen Sie für den Datenverteilungstyp S3 FullyReplicated. Dies bewirkt, dass jede ML-Datenverarbeitungs-Instance ein vollständiges Replikat des erweiterten Datensatzes beim inkrementellen Training verwendet.

    4. Wenn der erweiterte Datensatz nicht komprimiert ist, wählen Sie bei Compression type (Komprimierungsart) die Option None (Kein) aus. Wenn der erweiterte Datensatz mit Gzip komprimiert wurde, wählen Sie Gzip aus.

    5. (Optional) Wenn Sie den Datei-Eingabemodus verwenden, machen Sie keine Angabe bei Content type (Inhaltstyp). Bei Verwendung des Pipe-Eingabemodus geben Sie den entsprechenden MIME-Typ an. Der Inhaltstyp ist der MIME-Typ (Multipurpose Internet Mail Extension) der Daten.

    6. Bei Record wrapper (Datensatz-Wrapper) wählen Sie RecordIO aus, wenn der Datensatz im RecordIO-Format gespeichert ist. Wenn Ihr Datensatz nicht im RecordIO-Format gespeichert ist, wählen Sie None (Keine) aus.

    7. Bei S3 data type wählen Sie S3Prefix aus, wenn der Datensatz als einzelne Datei gespeichert ist. Wenn der Datensatz in Form mehrerer Dateien in einem Ordner gespeichert ist, wählen Sie Manifest aus.

    8. Bei S3 location (S3-Speicherort) geben Sie die URL zu dem Pfad an, unter dem Sie den erweiterten Datensatz gespeichert haben.

    9. Wählen Sie Erledigt aus.

  8. Zum Verwenden von Modellartefakten in einem Trainingsauftrag müssen Sie einen neuen Kanal hinzufügen und die nötigen Angaben zu den Modellartefakten machen.

    1. Wählen Sie bei Input data configuration (Eingabedatenkonfiguration) die Option Add channel (Kanal hinzufügen) aus.

    2. Bei Channel name (Kanalname) geben Sie model ein, um diesen Kanal als Quelle für die Modellartefakte zu identifizieren.

    3. Wählen Sie für InputModeDatei aus. Modelartefakte werden als Dateien gespeichert.

    4. Wählen Sie für den Datenverteilungstyp S3 FullyReplicated. Damit wird angegeben, dass jede ML-Datenverarbeitungs-Instance sämtliche Modellartefakte für das Training verwenden soll.

    5. Bei Compression type (Komprimierungsart) wählen Sie None (Keine) aus, da wir ein Modell für den Kanal verwenden.

    6. Bei Content type (Inhaltstyp) machen Sie keine Angabe. Der Inhaltstyp ist der MIME-Typ (Multipurpose Internet Mail Extension) der Daten. Für Modellartefakte wird hier keine Angabe gemacht.

    7. Bei Record wrapper (Datensatz-Wrapper) wählen Sie None (Keine) aus, da Modellartefakte nicht im RecordIO-Format gespeichert werden.

    8. Bei S3 data type (S3-Datentyp) wählen Sie S3Prefix aus, wenn Sie einen integrierten Algorithmus oder einen Algorithmus verwenden, der das Modell als einzelne Datei speichert. Wenn Sie einen Algorithmus verwenden, der das Modell in Form mehrerer Dateien speichert, wählen Sie Manifest aus.

    9. Bei S3 location (S3-Speicherort) geben Sie die URL zu dem Pfad an, unter dem Sie die Modellartefakte gespeichert haben. In der Regel wird das Modell mit dem Namen model.tar.gz gespeichert. Um die URL für die Modellartefakte zu finden, wählen Sie im Navigationsbereich Inference (Inferenz) und dann Models (Modelle) aus. Wählen Sie in der Liste der Modelle ein Modell aus, um dessen Detailseite anzuzeigen. Die URL für die Modellartefakte ist unter Primary container (Primärer Container) angegeben.

    10. Wählen Sie Erledigt aus.

  9. Geben Sie unter Output data configuration (Ausgabedatenkonfiguration) die folgenden Informationen ein:

    1. Geben Sie als S3 location (S3-Speicherort) den Pfad zu dem S3-Bucket ein, in dem Sie die Ausgabedaten speichern möchten.

    2. (Optional) Als Encryption key (Verschlüsselungsschlüssel) können Sie Ihren AWS Key Management Service (AWS KMS)-Verschlüsselungsschlüssel hinzufügen, um die Ausgabedaten im Ruhezustand zu verschlüsseln. Geben Sie die Schlüssel-ID oder die entsprechende Amazon-Ressourcennummer (ARN) an. Weitere Informationen finden Sie unter KMS-verwaltete Verschlüsselungsschlüssel.

  10. (Optional) Fügen Sie unter Tags ein oder mehrere Tags zum Trainingsauftrag hinzu. Ein Tag enthält Metadaten, die Sie definieren und AWS -Ressourcen zuweisen können. In diesem Fall können Sie Tags zur Verwaltung Ihrer Trainingsaufträge verwenden. Ein Tag besteht aus einem Schlüssel und einem Wert, die Sie definieren. Sie können beispielsweise ein Tag mit Project als Schlüssel und einem Wert erstellen, der auf ein mit dem Trainingsauftrag verbundenes Projekt verweist, wie z. B. Home value forecasts.

  11. Wählen Sie Schulungsjob erstellen aus. SageMaker erstellt einen Trainingsjob und führt ihn aus.

Nachdem der Trainingsauftrag abgeschlossen ist, werden die neu trainierten Modellartefakte unter dem S3 output path (S3-Ausgabepfad) gespeichert, den Sie im Feld Output data configuration (Ausgabedatenkonfiguration) angegeben haben. Informationen zum Bereitstellen des Modells für Prognosen finden Sie unter Schritt 5: Bereitstellen des Amazon-EC2-Modells.

Durchführen des inkrementellen Trainings (API)

Dieses Beispiel zeigt, wie SageMaker APIs verwendet werden, um ein Modell mithilfe des SageMaker Bildklassifizierungsalgorithmus und des Caltech 256-Bilddatensatzes zu trainieren und dann ein neues Modell mit dem ersten zu trainieren. Es verwendet Amazon S3 als Eingabe- und Ausgabequellen. Weitere Informationen zur Verwendung des inkrementellen Trainings finden Sie im Beispiel-Notebook für inkrementelles Training.

Anmerkung

In diesem Beispiel haben wir die ursprünglichen Datensätze im inkrementellen Training verwendet. Sie können aber auch andere Datensätze verwenden, z. B. welche mit neu hinzugefügten Beispielen. Laden Sie die neuen Datensätze in S3 hoch und ändern Sie die data_channels-Variable, die für das Trainieren des neuen Modells verwendet wird.

Holen Sie sich eine AWS Identity and Access Management (IAM-) Rolle, die die erforderlichen Berechtigungen gewährt, und initialisieren Sie Umgebungsvariablen:

import sagemaker from sagemaker import get_execution_role role = get_execution_role() print(role) sess = sagemaker.Session() bucket=sess.default_bucket() print(bucket) prefix = 'ic-incr-training'

Rufen Sie das Trainings-Image für den Bildklassifizierungsalgorithmus ab:

from sagemaker.amazon.amazon_estimator import get_image_uri training_image = get_image_uri(sess.boto_region_name, 'image-classification', repo_version="latest") #Display the training image print (training_image)

Laden Sie die Trainings- und -Validierungsdatensätze herunter und laden Sie sie anschließend in Amazon Simple Storage Service (Amazon S3) hoch:

import os import urllib.request import boto3 # Define a download function def download(url): filename = url.split("/")[-1] if not os.path.exists(filename): urllib.request.urlretrieve(url, filename) # Download the caltech-256 training and validation datasets download('http://data.mxnet.io/data/caltech-256/caltech-256-60-train.rec') download('http://data.mxnet.io/data/caltech-256/caltech-256-60-val.rec') # Create four channels: train, validation, train_lst, and validation_lst s3train = 's3://{}/{}/train/'.format(bucket, prefix) s3validation = 's3://{}/{}/validation/'.format(bucket, prefix) # Upload the first files to the train and validation channels !aws s3 cp caltech-256-60-train.rec $s3train --quiet !aws s3 cp caltech-256-60-val.rec $s3validation --quiet

Definieren Sie die Hyperparameter für das Training:

# Define hyperparameters for the estimator hyperparams = { "num_layers": "18", "resize": "32", "num_training_samples": "50000", "num_classes": "10", "image_shape": "3,28,28", "mini_batch_size": "128", "epochs": "3", "learning_rate": "0.1", "lr_scheduler_step": "2,3", "lr_scheduler_factor": "0.1", "augmentation_type": "crop_color", "optimizer": "sgd", "momentum": "0.9", "weight_decay": "0.0001", "beta_1": "0.9", "beta_2": "0.999", "gamma": "0.9", "eps": "1e-8", "top_k": "5", "checkpoint_frequency": "1", "use_pretrained_model": "0", "model_prefix": "" }

Erstellen Sie ein Schätzobjekt und trainieren Sie das erste Modell mithilfe der Trainings- und Validierungsdatensätze:

# Fit the base estimator s3_output_location = 's3://{}/{}/output'.format(bucket, prefix) ic = sagemaker.estimator.Estimator(training_image, role, instance_count=1, instance_type='ml.p2.xlarge', volume_size=50, max_run=360000, input_mode='File', output_path=s3_output_location, sagemaker_session=sess, hyperparameters=hyperparams) train_data = sagemaker.inputs.TrainingInput(s3train, distribution='FullyReplicated', content_type='application/x-recordio', s3_data_type='S3Prefix') validation_data = sagemaker.inputs.TrainingInput(s3validation, distribution='FullyReplicated', content_type='application/x-recordio', s3_data_type='S3Prefix') data_channels = {'train': train_data, 'validation': validation_data} ic.fit(inputs=data_channels, logs=True)

Um das Modell für das inkrementelle Training eines anderen Modells zu verwenden, erstellen Sie ein neues Schätzobjekt und verwenden Sie die Modellartefakte (in diesem Beispiel ic.model_data) als model_uri-Eingabeargument:

# Given the base estimator, create a new one for incremental training incr_ic = sagemaker.estimator.Estimator(training_image, role, instance_count=1, instance_type='ml.p2.xlarge', volume_size=50, max_run=360000, input_mode='File', output_path=s3_output_location, sagemaker_session=sess, hyperparameters=hyperparams, model_uri=ic.model_data) # This parameter will ingest the previous job's model as a new channel incr_ic.fit(inputs=data_channels, logs=True)

Nachdem der Trainingsauftrag abgeschlossen ist, werden die neu trainierten Modellartefakte unter dem S3 output path gespeichert, den Sie unter Output_path angegeben haben. Informationen zum Bereitstellen des Modells für Prognosen finden Sie unter Schritt 5: Bereitstellen des Amazon-EC2-Modells.