Skalieren Sie das Training und die Inferenz von Tausenden von ML-Modellen mit Amazon SageMaker | Amazon Web Services

Skalieren Sie das Training und die Inferenz von Tausenden von ML-Modellen mit Amazon SageMaker | Amazon Web Services

Da maschinelles Lernen (ML) in einer Vielzahl von Branchen immer mehr an Bedeutung gewinnt, sehen Unternehmen die Notwendigkeit, eine große Anzahl von ML-Modellen zu trainieren und bereitzustellen, um den unterschiedlichen Anforderungen ihrer Kunden gerecht zu werden. Insbesondere für Software-as-a-Service-Anbieter (SaaS) ist die Fähigkeit, Tausende von Modellen effizient und kostengünstig zu trainieren und zu bedienen, von entscheidender Bedeutung, um in einem sich schnell entwickelnden Markt wettbewerbsfähig zu bleiben.

Für das Training und die Bereitstellung tausender Modelle ist eine robuste und skalierbare Infrastruktur erforderlich Amazon Sage Maker kann helfen. SageMaker ist eine vollständig verwaltete Plattform, die es Entwicklern und Datenwissenschaftlern ermöglicht, ML-Modelle schnell zu erstellen, zu trainieren und bereitzustellen und gleichzeitig die kostensparenden Vorteile der Nutzung der AWS Cloud-Infrastruktur zu nutzen.

In diesem Beitrag untersuchen wir, wie Sie SageMaker-Funktionen nutzen können, einschließlich Amazon SageMaker-Verarbeitung, SageMaker-Trainingsjobs und SageMaker-Multimodell-Endpunkte (MMEs), um Tausende von Modellen auf kostengünstige Weise zu trainieren und zu bedienen. Um mit der beschriebenen Lösung zu beginnen, können Sie auf das beiliegende Notizbuch zurückgreifen GitHub.

Anwendungsfall: Energieprognose

In diesem Beitrag übernehmen wir die Rolle eines ISV-Unternehmens, das seinen Kunden hilft, nachhaltiger zu werden, indem es ihren Energieverbrauch verfolgt und Prognosen bereitstellt. Unser Unternehmen hat 1,000 Kunden, die ihren Energieverbrauch besser verstehen und fundierte Entscheidungen darüber treffen möchten, wie sie ihre Umweltbelastung reduzieren können. Dazu verwenden wir einen synthetischen Datensatz und trainieren darauf basierend ein ML-Modell Prophet für jeden Kunden die Möglichkeit, Prognosen zum Energieverbrauch zu erstellen. Mit SageMaker können wir diese 1,000 Modelle effizient trainieren und bedienen und unseren Kunden genaue und umsetzbare Einblicke in ihren Energieverbrauch liefern.

Der generierte Datensatz enthält drei Funktionen:

  • customer_id – Dies ist eine ganzzahlige Kennung für jeden Kunden im Bereich von 0–999.
  • Zeitstempel – Hierbei handelt es sich um einen Datums-/Uhrzeitwert, der den Zeitpunkt angibt, zu dem der Energieverbrauch gemessen wurde. Die Zeitstempel werden zufällig zwischen dem im Code angegebenen Start- und Enddatum generiert.
  • Verbrauch – Dies ist ein Float-Wert, der den Energieverbrauch angibt, gemessen in einer beliebigen Einheit. Die Verbrauchswerte werden zufällig zwischen 0 und 1,000 mit sinusförmiger Saisonalität generiert.

Lösungsüberblick

Um Tausende von ML-Modellen effizient zu trainieren und zu bedienen, können wir die folgenden SageMaker-Funktionen verwenden:

  • SageMaker-Verarbeitung – SageMaker Processing ist ein vollständig verwalteter Datenvorbereitungsdienst, der es Ihnen ermöglicht, Datenverarbeitungs- und Modellbewertungsaufgaben für Ihre Eingabedaten durchzuführen. Mit SageMaker Processing können Sie Rohdaten in das für Training und Inferenz benötigte Format umwandeln sowie Batch- und Online-Bewertungen Ihrer Modelle durchführen.
  • SageMaker-Schulungsjobs – Sie können SageMaker-Trainingsjobs verwenden, um Modelle auf einer Vielzahl von Algorithmen und Eingabedatentypen zu trainieren und die für das Training erforderlichen Rechenressourcen anzugeben.
  • SageMaker-MMEs – Multi-Modell-Endpunkte ermöglichen es Ihnen, mehrere Modelle auf einem einzigen Endpunkt zu hosten, was es einfach macht, Vorhersagen von mehreren Modellen über eine einzige API bereitzustellen. SageMaker-MMEs können Zeit und Ressourcen sparen, indem sie die Anzahl der Endpunkte reduzieren, die für die Bereitstellung von Vorhersagen aus mehreren Modellen erforderlich sind. MMEs unterstützen das Hosten sowohl CPU- als auch GPU-gestützter Modelle. Beachten Sie, dass wir in unserem Szenario 1,000 Modelle verwenden, dies stellt jedoch keine Einschränkung des Dienstes selbst dar.

Das folgende Diagramm zeigt die Lösungsarchitektur.

Architektur, die den beschriebenen Prozess abbildet

Der Workflow umfasst die folgenden Schritte:

  1. Wir verwenden SageMaker Processing, um Daten vorzuverarbeiten und pro Kunde eine einzelne CSV-Datei zu erstellen und diese zu speichern Amazon Simple Storage-Service (Amazon S3).
  2. Der SageMaker-Trainingsjob ist so konfiguriert, dass er die Ausgabe des SageMaker-Verarbeitungsjobs liest und sie im Round-Robin-Verfahren an die Trainingsinstanzen verteilt. Beachten Sie, dass dies auch mit erreicht werden kann Amazon SageMaker-Pipelines.
  3. Die Modellartefakte werden vom Trainingsauftrag in Amazon S3 gespeichert und direkt von der SageMaker MME bereitgestellt.

Skalieren Sie das Training auf Tausende von Modellen

Die Skalierung des Trainings von Tausenden von Modellen ist über möglich distribution Parameter der TrainingsInput Klasse im SageMaker Python SDK, mit der Sie angeben können, wie Daten für einen Trainingsjob auf mehrere Trainingsinstanzen verteilt werden. Dafür gibt es drei Möglichkeiten distribution Parameter: FullyReplicated, ShardedByS3Key und ShardedByRecorddem „Vermischten Geschmack“. Seine ShardedByS3Key Option bedeutet, dass die Trainingsdaten nach S3-Objektschlüssel aufgeteilt werden, wobei jede Trainingsinstanz eine eindeutige Teilmenge der Daten erhält, wodurch Duplikate vermieden werden. Nachdem die Daten von SageMaker in die Trainingscontainer kopiert wurden, können wir die Ordner- und Dateistruktur lesen, um ein einzigartiges Modell pro Kundendatei zu trainieren. Das Folgende ist ein Beispiel-Codeausschnitt:

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Jeder SageMaker-Trainingsauftrag speichert das im gespeicherten Modell /opt/ml/model Ordner des Trainingscontainers, bevor Sie ihn in einem archivieren model.tar.gz Datei und lädt sie nach Abschluss des Trainingsauftrags auf Amazon S3 hoch. Power-User können diesen Prozess auch mit SageMaker Pipelines automatisieren. Beim Speichern mehrerer Modelle über denselben Trainingsjob erstellt SageMaker ein einziges model.tar.gz Datei mit allen trainierten Modellen. Das würde dann bedeuten, dass wir, um das Modell bedienen zu können, zunächst das Archiv entpacken müssten. Um dies zu vermeiden, verwenden wir Checkpoints um den Zustand einzelner Modelle zu speichern. SageMaker bietet die Funktionalität, während des Trainingsjobs erstellte Prüfpunkte nach Amazon S3 zu kopieren. Hier müssen die Prüfpunkte an einem vorab festgelegten Ort gespeichert werden, wobei der Standardwert ist /opt/ml/checkpoints. Diese Prüfpunkte können verwendet werden, um das Training zu einem späteren Zeitpunkt fortzusetzen oder als Modell für die Bereitstellung auf einem Endpunkt. Eine allgemeine Zusammenfassung darüber, wie die SageMaker-Trainingsplattform Speicherpfade für Trainingsdatensätze, Modellartefakte, Prüfpunkte und Ausgaben zwischen AWS Cloud-Speicher und Trainingsjobs in SageMaker verwaltet, finden Sie unter Amazon SageMaker Training-Speicherordner für Trainingsdatensätze, Prüfpunkte, Modellartefakte und Ausgaben.

Der folgende Code verwendet eine fiktive model.save() Funktion innerhalb der train.py Skript, das die Trainingslogik enthält:

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Skalieren Sie die Inferenz auf Tausende von Modellen mit SageMaker-MMEs

Mit SageMaker-MMEs können Sie mehrere Modelle gleichzeitig bedienen, indem Sie eine Endpunktkonfiguration erstellen, die eine Liste aller zu bedienenden Modelle enthält, und dann mithilfe dieser Endpunktkonfiguration einen Endpunkt erstellen. Es ist nicht erforderlich, den Endpunkt jedes Mal neu bereitzustellen, wenn Sie ein neues Modell hinzufügen, da der Endpunkt automatisch alle in den angegebenen S3-Pfaden gespeicherten Modelle bereitstellt. Dies wird erreicht mit Multi-Model-Server (MMS), ein Open-Source-Framework zur Bereitstellung von ML-Modellen, das in Containern installiert werden kann, um das Frontend bereitzustellen, das die Anforderungen für die neuen MME-Container-APIs erfüllt. Darüber hinaus können Sie auch andere Servermodelle verwenden FackelServe und Triton. MMS kann über das in Ihrem benutzerdefinierten Container installiert werden SageMaker-Inferenz-Toolkit. Weitere Informationen dazu, wie Sie Ihre Docker-Datei so konfigurieren, dass sie MMS enthält und zur Bereitstellung Ihrer Modelle verwendet, finden Sie unter Erstellen Sie Ihren eigenen Container für SageMaker Multi-Model-Endpunkte.

Der folgende Codeausschnitt zeigt, wie man mit dem SageMaker Python SDK eine MME erstellt:

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Wenn die MME live ist, können wir sie aufrufen, um Vorhersagen zu generieren. Aufrufe können in jedem AWS SDK sowie mit dem SageMaker Python SDK erfolgen, wie im folgenden Codeausschnitt gezeigt:

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Beim Aufruf eines Modells wird das Modell zunächst von Amazon S3 auf die Instance geladen, was beim Aufruf eines neuen Modells zu einem Kaltstart führen kann. Häufig verwendete Modelle werden im Speicher und auf der Festplatte zwischengespeichert, um eine Schlussfolgerung mit geringer Latenz zu ermöglichen.

Zusammenfassung

SageMaker ist eine leistungsstarke und kostengünstige Plattform zum Trainieren und Bereitstellen Tausender ML-Modelle. Seine Funktionen, darunter SageMaker Processing, Trainingsjobs und MMEs, ermöglichen es Unternehmen, Tausende von Modellen in großem Maßstab effizient zu trainieren und zu bedienen und gleichzeitig von den kostensparenden Vorteilen der Nutzung der AWS Cloud-Infrastruktur zu profitieren. Weitere Informationen zur Verwendung von SageMaker zum Trainieren und Bedienen Tausender Modelle finden Sie unter Prozessdaten, Trainieren Sie ein Modell mit Amazon SageMaker und Hosten Sie mehrere Modelle in einem Container hinter einem Endpunkt.


Über die Autoren

Bild von DavideDavid Gallitelli ist ein Specialist Solutions Architect für AI/ML in der EMEA-Region. Er hat seinen Sitz in Brüssel und arbeitet eng mit Kunden in den Benelux-Ländern zusammen. Er ist Entwickler, seit er sehr jung war und begann im Alter von 7 Jahren zu programmieren. Er begann an der Universität AI/ML zu lernen und hat sich seitdem darin verliebt.

Bild von MauritsMaurits de Groot ist Lösungsarchitekt bei Amazon Web Services mit Sitz in Amsterdam. Er beschäftigt sich gerne mit Themen rund um maschinelles Lernen und hat eine Vorliebe für Startups. In seiner Freizeit fährt er gerne Ski und spielt Squash.

Zeitstempel:

Mehr von AWS Maschinelles Lernen