Bereitstellen und Verwalten von Pipelines für maschinelles Lernen mit Terraform mithilfe von Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Bereitstellen und Verwalten von Pipelines für maschinelles Lernen mit Terraform unter Verwendung von Amazon SageMaker

AWS-Kunden verlassen sich auf Infrastructure as Code (IaC), um ihre Cloud-Infrastruktur zu entwerfen, zu entwickeln und zu verwalten. IaC stellt sicher, dass die Kundeninfrastruktur und -dienste konsistent, skalierbar und reproduzierbar sind, während es gleichzeitig in der Lage ist, Best Practices im Bereich des Entwicklungsbetriebs (DevOps) zu befolgen.

Ein möglicher Ansatz zur Verwaltung von AWS-Infrastruktur und -Services mit IaC ist Terraform, mit dem Entwickler ihre Infrastruktur in wiederverwendbaren Codemodulen organisieren können. Dieser Aspekt gewinnt im Bereich des maschinellen Lernens (ML) zunehmend an Bedeutung. Durch die Entwicklung und Verwaltung von ML-Pipelines, einschließlich Training und Inferenz mit Terraform als IaC, können Sie problemlos für mehrere ML-Anwendungsfälle oder -Regionen skalieren, ohne die Infrastruktur von Grund auf neu entwickeln zu müssen. Darüber hinaus bietet es Konsistenz für die Infrastruktur (z. B. Instanztyp und -größe) für das Training und die Inferenz über verschiedene Implementierungen der ML-Pipeline hinweg. Auf diese Weise können Sie Anforderungen und eingehenden Datenverkehr an unterschiedliche weiterleiten Amazon Sage Maker Endpunkte.

In diesem Beitrag zeigen wir Ihnen, wie Sie ML-Pipelines mit Terraform und Amazon SageMaker bereitstellen und verwalten.

Lösungsüberblick

Dieser Beitrag enthält Code und führt Sie durch die Schritte, die zum Bereitstellen von AWS-Infrastruktur für ML-Pipelines mit Terraform für Modelltraining und Inferenz mit Amazon SageMaker erforderlich sind. Die ML-Pipeline wird verwaltet über AWS Step-Funktionen um die verschiedenen in der ML-Pipeline implementierten Schritte zu orchestrieren, wie in der folgenden Abbildung dargestellt.

Schritt Funktion Schritte

Step Functions startet eine AWS Lambda Funktion, die eine eindeutige Job-ID generiert, die dann verwendet wird, wenn ein SageMaker-Trainingsjob gestartet wird. Step Functions erstellt auch ein Modell, eine Endpunktkonfiguration und einen Endpunkt, die für die Inferenz verwendet werden. Zu den zusätzlichen Ressourcen gehören:

Der ML-bezogene Code für das Training und die Inferenz mit einem Docker-Image stützt sich im Folgenden hauptsächlich auf vorhandene Arbeiten GitHub-Repository.

Das folgende Diagramm veranschaulicht die Lösungsarchitektur:

Architekturdiagramm

Wir führen Sie durch die folgenden übergeordneten Schritte:

  1. Stellen Sie Ihre AWS-Infrastruktur mit Terraform bereit.
  2. Pushen Sie Ihr Docker-Image zu Amazon ECR.
  3. Führen Sie die ML-Pipeline aus.
  4. Rufen Sie Ihren Endpunkt auf.

Repository-Struktur

Im Folgenden finden Sie das Repository mit dem Code und den Daten, die für diesen Beitrag verwendet wurden GitHub-Repository.

Das Repository enthält die folgenden Verzeichnisse:

  • /terraform – Besteht aus folgenden Unterordnern:
    • ./infrastructure – Enthält die main.tf-Datei, die das ML-Pipeline-Modul aufruft, zusätzlich zu Variablendeklarationen, die wir zum Bereitstellen der Infrastruktur verwenden
    • ./ml-pipeline-module – Enthält das Terraform ML-Pipelinemodul, das wir wiederverwenden können
  • /src – Besteht aus folgenden Unterordnern:
    • ./container – Enthält Beispielcode für Training und Inferenz mit den Definitionen für das Docker-Image
    • ./lambda_function – Enthält den Python-Code für die Generierungskonfigurationen der Lambda-Funktion, z. B. eine eindeutige Job-ID für den SageMaker-Trainingsjob
  • /data – Enthält die folgende Datei:
    • ./iris.csv – Enthält Daten zum Trainieren des ML-Modells

Voraussetzungen:

Für diese exemplarische Vorgehensweise sollten Sie die folgenden Voraussetzungen erfüllen:

Stellen Sie Ihre AWS-Infrastruktur mit Terraform bereit

Um die ML-Pipeline bereitzustellen, müssen Sie einige Variablen und Namen an Ihre Bedürfnisse anpassen. Der Code für diesen Schritt befindet sich in der /terraform Verzeichnis.

Öffnen Sie bei der Erstinitialisierung die Datei terraform/infrastructure/terraform.tfvars und passen Sie die Variable an Projektname zusätzlich zur Variablen an den Namen Ihres Projekts Region wenn Sie in einer anderen Region bereitstellen möchten. Sie können auch zusätzliche Variablen wie Instanztypen für Training und Inferenz ändern.

Verwenden Sie dann die folgenden Befehle, um die Infrastruktur mit Terraform bereitzustellen:

export AWS_PROFILE=<your_aws_cli_profile_name>
cd terraform/infrastructure
terraform init
terraform plan
terraform apply

Überprüfen Sie die Ausgabe und stellen Sie sicher, dass die geplanten Ressourcen korrekt angezeigt werden, und bestätigen Sie mit Ja in der Anwendungsphase, wenn alles korrekt ist. Gehen Sie dann zur Amazon ECR-Konsole (oder überprüfen Sie die Ausgabe von Terraform im Terminal) und rufen Sie die URL für Ihr ECR-Repository ab, das Sie über Terraform erstellt haben.

Die Ausgabe sollte der folgenden angezeigten Ausgabe ähneln, einschließlich der ECR-Repository-URL:

Apply complete! Resources: 19 added, 0 changed, 0 destroyed. Outputs: ecr_repository_url = <account_number>.dkr.ecr.eu-west-1.amazonaws.com/ml-pipeline-terraform-demo

Pushen Sie Ihr Docker-Image zu Amazon ECR

Damit die ML-Pipeline und SageMaker einen SageMaker-Endpunkt für Inferenz trainieren und bereitstellen können, müssen Sie ein Docker-Image bereitstellen und es in Amazon ECR speichern. Ein Beispiel finden Sie im Verzeichnis src/container. Wenn Sie die AWS-Infrastruktur bereits aus dem vorherigen Schritt angewendet haben, können Sie das Docker-Image wie beschrieben per Push übertragen. Nachdem Ihr Docker-Image entwickelt wurde, können Sie die folgenden Aktionen ausführen und es per Push an Amazon ECR übertragen (passen Sie die Amazon ECR-URL Ihren Anforderungen entsprechend an):

cd src/container
export AWS_PROFILE=<your_aws_cli_profile_name>
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <account_number>.dkr.ecr.eu-west-1.amazonaws.com
docker build -t ml-training .
docker tag ml-training:latest <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>:latest
docker push <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>

Wenn Sie die AWS-Infrastruktur bereits mit Terraform angewendet haben, können Sie die Änderungen Ihres Codes und Docker-Images direkt an Amazon ECR übertragen, ohne erneut über Terraform bereitzustellen.

Führen Sie die ML-Pipeline aus

Um die ML-Pipeline zu trainieren und auszuführen, gehen Sie zur Step Functions-Konsole und starten Sie die Implementierung. Sie können den Fortschritt jedes Schrittes in der Visualisierung der Zustandsmaschine überprüfen. Sie können auch den Fortschritt des SageMaker-Schulungsjobs und den Status Ihres SageMaker-Endpunkts überprüfen.

Schrittfunktion starten

Nachdem Sie den Zustandsautomaten erfolgreich in Step Functions ausgeführt haben, können Sie sehen, dass der SageMaker-Endpunkt erstellt wurde. Wählen Sie in der SageMaker-Konsole Inferenz im Navigationsbereich, dann Endpunkte. Warten Sie unbedingt, bis sich der Status in InService ändert.

SageMaker-Endpunktstatus

Rufen Sie Ihren Endpunkt auf

Um Ihren Endpunkt aufzurufen (in diesem Beispiel für das Iris-Dataset), können Sie das folgende Python-Skript mit dem verwenden AWS SDK für Python (Boto3). Sie können dies über ein SageMaker-Notebook tun oder das folgende Code-Snippet in eine Lambda-Funktion einbetten:

import boto3
from io import StringIO
import pandas as pd client = boto3.client('sagemaker-runtime') endpoint_name = 'Your endpoint name' # Your endpoint name.
content_type = "text/csv"   # The MIME type of the input data in the request body. payload = pd.DataFrame([[1.5,0.2,4.4,2.6]])
csv_file = StringIO()
payload.to_csv(csv_file, sep=",", header=False, index=False)
payload_as_csv = csv_file.getvalue() response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType=content_type,
Body=payload_as_csv
) label = response['Body'].read().decode('utf-8')
print(label)

Aufräumen

Sie können die von Terraform erstellte Infrastruktur mit dem Befehl terraform Destroy zerstören, aber Sie müssen zuerst die Daten und Dateien in den S3-Buckets löschen. Darüber hinaus wird der SageMaker-Endpunkt (oder mehrere SageMaker-Endpunkte bei mehrfacher Ausführung) über Step Functions erstellt und nicht über Terraform verwaltet. Das bedeutet, dass die Bereitstellung erfolgt, wenn die ML-Pipeline mit Step Functions ausgeführt wird. Stellen Sie daher sicher, dass Sie auch den SageMaker-Endpunkt oder die Endpunkte löschen, die über die Step Functions ML-Pipeline erstellt wurden, um unnötige Kosten zu vermeiden. Führen Sie die folgenden Schritte aus:

  1. Löschen Sie auf der Amazon S3-Konsole das Dataset im S3-Trainings-Bucket.
  2. Löschen Sie alle Modelle, die Sie über die ML-Pipeline im Bucket S3-Modelle trainiert haben, entweder über die Amazon S3-Konsole oder die AWS CLI.
  3. Zerstöre die über Terraform erstellte Infrastruktur:
    cd terraform/infrastructure
    terraform destroy

  4. Löschen Sie die SageMaker-Endpunkte, Endpunktkonfigurationen und Modelle, die über Step Functions erstellt wurden, entweder auf der SageMaker-Konsole oder über die AWS CLI.

Zusammenfassung

Herzliche Glückwünsche! Sie haben eine ML-Pipeline mithilfe von SageMaker mit Terraform bereitgestellt. Diese Beispiellösung zeigt, wie Sie AWS-Infrastruktur und -Services für ML-Pipelines einfach und wiederverwendbar bereitstellen können. Auf diese Weise können Sie für mehrere Anwendungsfälle oder Regionen skalieren und ML-Modelle mit einem Klick auf konsistente Weise trainieren und bereitstellen. Darüber hinaus können Sie die ML-Pipeline mehrmals ausführen, beispielsweise wenn neue Daten verfügbar sind oder Sie den Algorithmuscode ändern möchten. Sie können auch Anfragen oder Datenverkehr an verschiedene SageMaker-Endpunkte weiterleiten.

Ich ermutige Sie, das Hinzufügen von Sicherheitsfunktionen und die Übernahme bewährter Sicherheitsverfahren gemäß Ihren Anforderungen und potenziellen Unternehmensstandards zu erkunden. Darüber hinaus bietet Ihnen die Einbettung dieser Lösung in Ihre CI/CD-Pipelines weitere Möglichkeiten zur Übernahme und Etablierung von Best Practices und Standards für DevOps gemäß Ihren Anforderungen.


Über den Autor

Bereitstellen und Verwalten von Pipelines für maschinelles Lernen mit Terraform mithilfe von Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Oliver Zollikofer ist Data Scientist bei Amazon Web Services. Er ermöglicht es globalen Unternehmenskunden, Modelle für maschinelles Lernen zu erstellen, zu trainieren und bereitzustellen sowie den Lebenszyklus von ML-Modellen mit MLOps zu verwalten. Darüber hinaus baut und entwirft er verwandte Cloud-Lösungen.

Zeitstempel:

Mehr von AWS Maschinelles Lernen