Planen Sie Amazon SageMaker-Notebook-Jobs und verwalten Sie mehrstufige Notebook-Workflows mithilfe von APIs | Amazon Web Services

Planen Sie Amazon SageMaker-Notebook-Jobs und verwalten Sie mehrstufige Notebook-Workflows mithilfe von APIs | Amazon Web Services

Quellknoten: 2985648

Amazon SageMaker-Studio bietet Datenwissenschaftlern eine vollständig verwaltete Lösung zum interaktiven Erstellen, Trainieren und Bereitstellen von Modellen für maschinelles Lernen (ML). Amazon SageMaker Notebook-Jobs Ermöglichen Sie Datenwissenschaftlern, ihre Notebooks nach Bedarf oder nach einem Zeitplan mit wenigen Klicks in SageMaker Studio auszuführen. Mit dieser Einführung können Sie Notebooks mithilfe der von bereitgestellten APIs programmgesteuert als Jobs ausführen Amazon SageMaker-Pipelines, die ML-Workflow-Orchestrierungsfunktion von Amazon Sage Maker. Darüber hinaus können Sie mithilfe dieser APIs einen mehrstufigen ML-Workflow mit mehreren abhängigen Notebooks erstellen.

SageMaker Pipelines ist ein natives Workflow-Orchestrierungstool zum Erstellen von ML-Pipelines, die die Vorteile der direkten SageMaker-Integration nutzen. Jede SageMaker-Pipeline besteht aus Schritte, die einzelnen Aufgaben wie der Verarbeitung, Schulung oder Datenverarbeitung unter Verwendung entsprechen Amazon EMR. SageMaker-Notebook-Jobs sind jetzt als integrierter Schritttyp in SageMaker-Pipelines verfügbar. Mit diesem Notebook-Jobschritt können Sie Notebooks mit nur wenigen Codezeilen ganz einfach als Jobs ausführen Amazon SageMaker Python-SDK. Darüber hinaus können Sie mehrere abhängige Notizbücher zusammenfügen, um einen Workflow in Form von gerichteten azyklischen Diagrammen (DAGs) zu erstellen. Anschließend können Sie diese Notebook-Jobs oder DAGs ausführen und sie mit SageMaker Studio verwalten und visualisieren.

Datenwissenschaftler verwenden derzeit SageMaker Studio, um ihre Jupyter-Notebooks interaktiv zu entwickeln und verwenden dann SageMaker-Notebook-Jobs, um diese Notebooks als geplante Jobs auszuführen. Diese Jobs können sofort oder nach einem wiederkehrenden Zeitplan ausgeführt werden, ohne dass Datenarbeiter den Code als Python-Module umgestalten müssen. Zu den häufigsten Anwendungsfällen hierfür gehören:

  • Laufende Langzeit-Notebooks im Hintergrund
  • Regelmäßig ausgeführte Modellinferenz zum Generieren von Berichten
  • Skalierung von der Vorbereitung kleiner Beispieldatensätze bis zur Arbeit mit Big Data im Petabyte-Bereich
  • Umschulen und Bereitstellen von Modellen mit einer gewissen Kadenz
  • Planen von Jobs zur Überwachung der Modellqualität oder Datendrift
  • Erkundung des Parameterraums für bessere Modelle

Obwohl diese Funktionalität es Datenarbeitern erleichtert, eigenständige Notebooks zu automatisieren, bestehen ML-Workflows häufig aus mehreren Notebooks, die jeweils eine bestimmte Aufgabe mit komplexen Abhängigkeiten ausführen. Beispielsweise sollte ein Notebook, das die Abweichung von Modelldaten überwacht, über einen Vorschritt verfügen, der das Extrahieren, Transformieren und Laden (ETL) sowie die Verarbeitung neuer Daten ermöglicht, sowie über einen Nachschritt zur Modellaktualisierung und zum Training für den Fall, dass eine erhebliche Abweichung festgestellt wird . Darüber hinaus möchten Datenwissenschaftler möglicherweise diesen gesamten Workflow nach einem wiederkehrenden Zeitplan auslösen, um das Modell auf der Grundlage neuer Daten zu aktualisieren. Damit Sie Ihre Notizbücher einfach automatisieren und solch komplexe Arbeitsabläufe erstellen können, sind SageMaker-Notizbuchjobs jetzt als Schritt in SageMaker Pipelines verfügbar. In diesem Beitrag zeigen wir, wie Sie mit wenigen Codezeilen folgende Anwendungsfälle lösen können:

  • Führen Sie ein eigenständiges Notebook programmgesteuert sofort oder nach einem wiederkehrenden Zeitplan aus
  • Erstellen Sie mehrstufige Workflows von Notebooks als DAGs für Zwecke der kontinuierlichen Integration und kontinuierlichen Bereitstellung (CI/CD), die über die Benutzeroberfläche von SageMaker Studio verwaltet werden können

Lösungsüberblick

Das folgende Diagramm veranschaulicht unsere Lösungsarchitektur. Sie können das SageMaker Python SDK verwenden, um einen einzelnen Notebook-Job oder einen Workflow auszuführen. Diese Funktion erstellt einen SageMaker-Trainingsauftrag zum Ausführen des Notebooks.

In den folgenden Abschnitten gehen wir einen Beispiel-ML-Anwendungsfall durch und zeigen die Schritte zum Erstellen eines Workflows von Notebook-Jobs, zum Übergeben von Parametern zwischen verschiedenen Notebook-Schritten, zum Planen Ihres Workflows und zum Überwachen über SageMaker Studio.

Für unser ML-Problem in diesem Beispiel erstellen wir ein Stimmungsanalysemodell, eine Art Textklassifizierungsaufgabe. Zu den häufigsten Anwendungen der Stimmungsanalyse gehören die Überwachung sozialer Medien, das Kundensupport-Management und die Analyse von Kundenfeedback. Der in diesem Beispiel verwendete Datensatz ist der Stanford Sentiment Treebank (SST2)-Datensatz, der aus Filmrezensionen sowie einer Ganzzahl (0 oder 1) besteht, die die positive oder negative Stimmung der Rezension angibt.

Das Folgende ist ein Beispiel für a data.csv Datei, die dem SST2-Datensatz entspricht, und zeigt Werte in den ersten beiden Spalten an. Beachten Sie, dass die Datei keinen Header haben sollte.

Column 1 Column 2
0 neue Sekrete vor den Elterneinheiten verstecken
0 enthält keinen Witz, nur ausgeklügelte Gags
1 der seine Charaktere liebt und etwas ziemlich Schönes über die menschliche Natur vermittelt
0 bleibt vollkommen zufrieden damit, durchweg gleich zu bleiben
0 auf die schlimmsten Rache-der-Nerds-Klischees, die die Filmemacher ausbaggern konnten
0 das ist viel zu tragisch, um eine so oberflächliche Behandlung zu verdienen
1 beweist, dass der Regisseur von Hollywood-Blockbustern wie Patriot Games immer noch einen kleinen, persönlichen Film mit emotionaler Wucht drehen kann.

In diesem ML-Beispiel müssen wir mehrere Aufgaben ausführen:

  1. Führen Sie Feature Engineering durch, um diesen Datensatz in einem Format vorzubereiten, das unser Modell verstehen kann.
  2. Führen Sie nach dem Feature-Engineering einen Trainingsschritt aus, der Transformers verwendet.
  3. Richten Sie Batch-Inferenz mit dem fein abgestimmten Modell ein, um die Stimmung für neu eingehende Bewertungen vorherzusagen.
  4. Richten Sie einen Datenüberwachungsschritt ein, damit wir unsere neuen Daten regelmäßig auf Qualitätsabweichungen überwachen können, die möglicherweise eine Neuschulung der Modellgewichte erforderlich machen.

Mit diesem Start eines Notebook-Jobs als Schritt in SageMaker-Pipelines können wir diesen Workflow orchestrieren, der aus drei verschiedenen Schritten besteht. Jeder Schritt des Workflows wird in einem anderen Notebook entwickelt, das dann in unabhängige Notebook-Auftragsschritte umgewandelt und als Pipeline verbunden wird:

  • Anarbeitung – Laden Sie den öffentlichen SST2-Datensatz herunter von Amazon Simple Storage-Service (Amazon S3) und erstellen Sie eine CSV-Datei für die Ausführung des Notebooks in Schritt 2. Der SST2-Datensatz ist ein Textklassifizierungsdatensatz mit zwei Beschriftungen (0 und 1) und einer Textspalte zur Kategorisierung.
  • Ausbildung – Nehmen Sie die geformte CSV-Datei und führen Sie mithilfe von Transformers-Bibliotheken eine Feinabstimmung mit BERT für die Textklassifizierung durch. Als Teil dieses Schritts verwenden wir ein Testdatenvorbereitungsnotizbuch, das eine Abhängigkeit für den Feinabstimmungs- und Batch-Inferenzschritt darstellt. Wenn die Feinabstimmung abgeschlossen ist, wird dieses Notebook mit Run Magic ausgeführt und bereitet einen Testdatensatz für die Beispielinferenz mit dem feinabgestimmten Modell vor.
  • Transformieren und überwachen – Führen Sie eine Batch-Inferenz durch und richten Sie die Datenqualität mit Modellüberwachung ein, um einen Basisdatensatzvorschlag zu erhalten.

Führen Sie die Notebooks aus

Der Beispielcode für diese Lösung ist verfügbar unter GitHub.

Das Erstellen eines SageMaker-Notebook-Jobschritts ähnelt dem Erstellen anderer SageMaker-Pipeline-Schritte. In diesem Notebook-Beispiel verwenden wir das SageMaker Python SDK, um den Workflow zu orchestrieren. Um einen Notebook-Schritt in SageMaker Pipelines zu erstellen, können Sie die folgenden Parameter definieren:

  • Eingabenotizbuch – Der Name des Notizbuchs, das dieser Notizbuchschritt orchestriert. Hier können Sie den lokalen Pfad zum Eingabenotizbuch übergeben. Wenn dieses Notebook über andere Notebooks verfügt, die es ausführt, können Sie diese optional im übergeben AdditionalDependencies Parameter für den Notebook-Jobschritt.
  • Bild-URI – Das Docker-Image hinter dem Notebook-Jobschritt. Dies können die vordefinierten Bilder sein, die SageMaker bereits bereitstellt, oder ein benutzerdefiniertes Bild, das Sie definiert und per Push übertragen haben Amazon Elastic Container-Registrierung (Amazon ECR). Informationen zu unterstützten Bildern finden Sie im Abschnitt „Überlegungen“ am Ende dieses Beitrags.
  • Kernelname – Der Name des Kernels, den Sie in SageMaker Studio verwenden. Diese Kernel-Spezifikation ist in dem von Ihnen bereitgestellten Image registriert.
  • Instanztyp (optional) - Die Amazon Elastic Compute-Cloud (Amazon EC2)-Instanztyp hinter dem Notebook-Job, den Sie definiert haben und der ausgeführt werden soll.
  • Parameter (optional) – Parameter, die Sie übergeben können und die für Ihr Notebook zugänglich sind. Diese können in Schlüssel-Wert-Paaren definiert werden. Darüber hinaus können diese Parameter zwischen verschiedenen Notebook-Job- oder Pipeline-Läufen geändert werden.

Unser Beispiel verfügt über insgesamt fünf Notizbücher:

  • nb-job-pipeline.ipynb – Dies ist unser Hauptnotizbuch, in dem wir unsere Pipeline und unseren Workflow definieren.
  • preprocess.ipynb – Dieses Notizbuch ist der erste Schritt in unserem Workflow und enthält den Code, der den öffentlichen AWS-Datensatz abruft und daraus eine CSV-Datei erstellt.
  • training.ipynb – Dieses Notizbuch ist der zweite Schritt in unserem Workflow und enthält Code, um die CSV-Datei aus dem vorherigen Schritt zu übernehmen und lokale Schulungen und Feinabstimmungen durchzuführen. Dieser Schritt hat auch eine Abhängigkeit von der prepare-test-set.ipynb Notebook, um einen Testdatensatz für die Stichprobeninferenz mit dem fein abgestimmten Modell abzurufen.
  • Prepare-test-set.ipynb – Dieses Notizbuch erstellt einen Testdatensatz, den unser Trainingsnotizbuch im zweiten Pipeline-Schritt verwendet und für die Stichprobeninferenz mit dem fein abgestimmten Modell verwendet.
  • transform-monitor.ipynb – Dieses Notebook ist der dritte Schritt in unserem Workflow und verwendet das BERT-Basismodell und führt einen SageMaker-Batch-Transformationsauftrag aus, während es gleichzeitig die Datenqualität mit Modellüberwachung einrichtet.

Als nächstes gehen wir das Hauptnotizbuch durch nb-job-pipeline.ipynb, das alle Sub-Notebooks in einer Pipeline zusammenfasst und den End-to-End-Workflow ausführt. Beachten Sie, dass das folgende Beispiel das Notebook zwar nur einmal ausführt, Sie die Pipeline jedoch auch so planen können, dass das Notebook wiederholt ausgeführt wird. Beziehen auf SageMaker-Dokumentation Detaillierte Anweisungen.

Für unseren ersten Notebook-Jobschritt übergeben wir einen Parameter mit einem Standard-S3-Bucket. Mit diesem Bucket können wir alle Artefakte sichern, die für unsere anderen Pipeline-Schritte verfügbar sein sollen. Für das erste Notizbuch (preprocess.ipynb) ziehen wir den öffentlichen SST2-Zugdatensatz von AWS herunter und erstellen daraus eine Trainings-CSV-Datei, die wir in diesen S3-Bucket übertragen. Siehe den folgenden Code:

# Parameters
print(default_s3_bucket)

!aws s3 cp s3://sagemaker-sample-files/datasets/text/SST2/sst2.train sst2.train

# will read just the first 500 lines for quicker execution
with open('sst2.train', 'r') as f:
    lines = f.readlines()[:500] 

data = []
for line in lines:
    label, text = line.strip().split(' ', 1)
    data.append((int(label), text))

df = pd.DataFrame(data, columns=['label', 'text'])
df.to_csv("train.csv", index=False) #create csv file with smaller dataset
!aws s3 cp "train.csv" {default_s3_bucket}

Wir können dieses Notebook dann in ein umwandeln NotebookJobStep mit dem folgenden Code in unserem Hauptnotizbuch:

# provide S3 Bucket to dump artifacts in
nb_job_params = {"default_s3_bucket": notebook_artifacts}

preprocess_nb_step = NotebookJobStep(
name=preprocess_step_name,
description=preprocess_description,
notebook_job_name=preprocess_job_name,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
role=role,
input_notebook=preprocess_notebook,
instance_type="ml.m5.4xlarge",
parameters=nb_job_params,
)

Da wir nun eine CSV-Beispieldatei haben, können wir mit dem Training unseres Modells in unserem Trainingsnotizbuch beginnen. Unser Trainingsnotizbuch übernimmt denselben Parameter wie der S3-Bucket und ruft den Trainingsdatensatz von diesem Speicherort ab. Anschließend führen wir eine Feinabstimmung durch, indem wir das Transformers-Trainerobjekt mit dem folgenden Codeausschnitt verwenden:

from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train_dataset,
    eval_dataset=small_eval_dataset,
    compute_metrics=compute_metrics,
)

trainer.train()

Nach der Feinabstimmung möchten wir eine Batch-Inferenz ausführen, um zu sehen, wie das Modell funktioniert. Dies erfolgt über ein separates Notebook (prepare-test-set.ipynb) im selben lokalen Pfad, der einen Testdatensatz erstellt, um Rückschlüsse auf die Verwendung unseres trainierten Modells zu ziehen. Das Zusatznotizbuch können wir in unserem Schulungsnotizbuch mit folgender Zauberzelle betreiben:

%run 'prepare-test-set.ipynb'

Wir definieren diese zusätzliche Notebook-Abhängigkeit im AdditionalDependencies Parameter in unserem zweiten Notebook-Jobschritt:

train_nb_step = NotebookJobStep(
name=training_step_name,
description=training_description,
notebook_job_name=training_job_name,
input_notebook=training_notebook,
additional_dependencies=[test_data_prep_notebook],
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)

Wir müssen auch angeben, dass der Jobschritt „Schulungsnotizbuch“ (Schritt 2) vom Jobschritt „Notizbuch vorverarbeiten“ (Schritt 1) ​​abhängt, indem wir die verwenden add_depends_on API-Aufruf wie folgt:

train_nb_step.add_depends_on([preprocess_nb_step])

Unser letzter Schritt besteht darin, dass das BERT-Modell eine SageMaker-Batch-Transformation ausführt und gleichzeitig die Datenerfassung und -qualität über SageMaker Model Monitor einrichtet. Beachten Sie, dass sich dies von der Verwendung der integrierten Funktion unterscheidet Transformieren or Erfassung Schritte über Pipelines. Unser Notebook für diesen Schritt führt dieselben APIs aus, wird jedoch als Notebook-Jobschritt verfolgt. Dieser Schritt ist vom zuvor definierten Trainingsauftragsschritt abhängig, daher erfassen wir ihn auch mit dem Flag depend_on.

batch_monitor_step = NotebookJobStep(
name=batch_monitor_step_name,
description=batch_monitor_description,
notebook_job_name=batch_monitor_job_name,
input_notebook=batch_monitor_notebook,
image_uri=image_uri,
kernel_name=kernel_name,
display_name=display_name,
instance_type="ml.m5.12xlarge",
role=role,
parameters=nb_job_params,
)
batch_monitor_step.add_depends_on([train_nb_step])

Nachdem die verschiedenen Schritte unseres Workflows definiert wurden, können wir die End-to-End-Pipeline erstellen und ausführen:

# create pipeline
pipeline = Pipeline(
name=pipeline_name,
steps=[preprocess_nb_step, train_nb_step, batch_monitor_step],
)

# execute pipeline
pipeline.create(session.get_execution_role())
execution = pipeline.start(parameters={})
execution.wait(delay=30, max_attempts=60)
execution_steps = execution.list_steps()
print(execution_steps)

Überwachen Sie die Pipeline-Ausführungen

Sie können die Notebook-Schrittausführungen über die SageMaker Pipelines DAG verfolgen und überwachen, wie im folgenden Screenshot dargestellt.

Sie können optional auch die einzelnen Notebook-Ausführungen im Notebook-Job-Dashboard überwachen und die Ausgabedateien umschalten, die über die Benutzeroberfläche von SageMaker Studio erstellt wurden. Wenn Sie diese Funktionalität außerhalb von SageMaker Studio verwenden, können Sie mithilfe von Tags die Benutzer definieren, die den Ausführungsstatus im Notebook-Job-Dashboard verfolgen können. Weitere Einzelheiten zu den einzuschließenden Tags finden Sie unter Sehen Sie sich Ihre Notebook-Jobs an und laden Sie Ausgaben im Studio-UI-Dashboard herunter.

In diesem Beispiel geben wir die resultierenden Notebook-Jobs in ein Verzeichnis namens aus outputs in Ihrem lokalen Pfad mit Ihrem Pipeline-Ausführungscode. Wie im folgenden Screenshot gezeigt, können Sie hier die Ausgabe Ihres Eingabenotizbuchs sowie alle Parameter sehen, die Sie für diesen Schritt definiert haben.

Aufräumen

Wenn Sie unserem Beispiel gefolgt sind, müssen Sie unbedingt die erstellte Pipeline, die Notebook-Jobs und die von den Beispiel-Notebooks heruntergeladenen S3-Daten löschen.

Überlegungen

Im Folgenden sind einige wichtige Überlegungen zu dieser Funktion aufgeführt:

  • SDK-Einschränkungen – Der Notebook-Jobschritt kann nur über das SageMaker Python SDK erstellt werden.
  • Bildbeschränkungen –Der Notebook-Jobschritt unterstützt die folgenden Bilder:

Zusammenfassung

Mit dieser Einführung können Datenarbeiter ihre Notebooks jetzt programmgesteuert mit ein paar Codezeilen ausführen SageMaker Python-SDK. Darüber hinaus können Sie mit Ihren Notebooks komplexe mehrstufige Workflows erstellen und so den Zeitaufwand für den Wechsel von einem Notebook zu einer CI/CD-Pipeline erheblich verkürzen. Nachdem Sie die Pipeline erstellt haben, können Sie SageMaker Studio verwenden, um DAGs für Ihre Pipelines anzuzeigen und auszuführen sowie die Ausführungen zu verwalten und zu vergleichen. Unabhängig davon, ob Sie End-to-End-ML-Workflows oder einen Teil davon planen, empfehlen wir Ihnen, es auszuprobieren Notebook-basierte Arbeitsabläufe.


Über die Autoren

Anchit Gupta ist Senior Product Manager für Amazon SageMaker Studio. Ihr Schwerpunkt liegt auf der Ermöglichung interaktiver Data-Science- und Data-Engineering-Workflows innerhalb der SageMaker Studio-IDE. In ihrer Freizeit kocht sie gerne, spielt Brett-/Kartenspiele und liest.

Widder Vegiraju ist ML-Architekt im SageMaker-Serviceteam. Er konzentriert sich darauf, Kunden bei der Erstellung und Optimierung ihrer KI/ML-Lösungen auf Amazon SageMaker zu unterstützen. In seiner Freizeit liebt er es zu reisen und zu schreiben.

Eduard Sonne ist Senior SDE und arbeitet für SageMaker Studio bei Amazon Web Services. Er konzentriert sich auf den Aufbau interaktiver ML-Lösungen und die Vereinfachung der Kundenerfahrung, um SageMaker Studio mit gängigen Technologien im Data Engineering und ML-Ökosystem zu integrieren. In seiner Freizeit ist Edward ein großer Fan von Camping, Wandern und Angeln und genießt die Zeit, die er mit seiner Familie verbringt.

Zeitstempel:

Mehr von AWS Maschinelles Lernen