Teil 3 – Erstellen einer vereinfachten MLOps-Pipeline (CI/CT/CD)
Dieser Artikel bietet eine Anleitung zum Erstellen einer MLOps-Pipeline mit AWS-Diensten und konzentriert sich dabei auf die automatische Neuschulung, Bereitstellung und Kostenoptimierung von Modellen.
Einführung
In diesem Tutorial erfahren Sie, wie Sie verschiedene AWS-Dienste nutzen, um eine einfache MLOps-Pipeline zu erstellen, die Continuous Integration (CI), Continuous Training (CT) und Continuous Deployment (CD) umfasst. Im Gegensatz zu herkömmlichen DevOps-Pipelines erfordert MLOps zusätzliche Überlegungen, um den Betriebszyklus abzuschließen. In diesem Tutorial erhalten Sie Einblicke in die Integration von CT in die MLOps-Schleife, wodurch ein kontinuierliches Training Ihrer Modelle und eine nahtlose Bereitstellung für die Inferenz ermöglicht wird. Das Tutorial führt Sie durch den Prozess der Nutzung von AWS-Diensten zum Einrichten dieser End-to-End-MLOps-Pipeline.
Manifest
Funktionalität | Name | Kommentar |
---|---|---|
Datenspeicherung |
AWS FSx ONTAP |
Weitere Informationen finden Sie unter "Teil 1 – Integration von Amazon FSx for NetApp ONTAP (FSx ONTAP) als privater S3-Bucket in AWS SageMaker" . |
Data Science-IDE |
AWS SageMaker |
Dieses Tutorial basiert auf dem Jupyter-Notebook, das in"Teil 2 – Nutzung von Amazon FSx for NetApp ONTAP (FSx ONTAP) als Datenquelle für das Modelltraining in SageMaker" . |
Funktion zum Auslösen der MLOps-Pipeline |
AWS Lambda-Funktion |
- |
Cron-Job-Trigger |
AWS EventBridge |
- |
Deep-Learning-Framework |
PyTorch |
- |
AWS Python SDK |
boto3 |
- |
Programmiersprache |
Python |
v3.10 |
Voraussetzung
-
Ein vorkonfiguriertes FSx ONTAP Dateisystem. Dieses Tutorial verwendet für den Trainingsprozess in FSx ONTAP gespeicherte Daten.
-
Eine SageMaker Notebook-Instanz, die so konfiguriert ist, dass sie dieselbe VPC wie das oben erwähnte FSx ONTAP Dateisystem gemeinsam nutzt.
-
Stellen Sie vor dem Auslösen der AWS Lambda-Funktion sicher, dass sich die SageMaker Notebook-Instanz im Status gestoppt befindet.
-
Der Instanztyp ml.g4dn.xlarge ist erforderlich, um die für die Berechnungen tiefer neuronaler Netzwerke erforderliche GPU-Beschleunigung zu nutzen.
Architektur
Diese MLOps-Pipeline ist eine praktische Implementierung, die einen Cron-Job verwendet, um eine serverlose Funktion auszulösen, die wiederum einen AWS-Dienst ausführt, der mit einer Lebenszyklus-Callback-Funktion registriert ist. Als Cronjob fungiert die AWS EventBridge. Es ruft regelmäßig eine AWS Lambda-Funktion auf, die für die Neuschulung und erneute Bereitstellung des Modells verantwortlich ist. Bei diesem Vorgang wird die AWS SageMaker Notebook-Instanz hochgefahren, um die erforderlichen Aufgaben auszuführen.
Schritt-für-Schritt-Konfiguration
Lebenszykluskonfigurationen
Um die Lebenszyklus-Rückruffunktion für die AWS SageMaker Notebook-Instanz zu konfigurieren, verwenden Sie Lebenszykluskonfigurationen. Mit diesem Dienst können Sie die erforderlichen Aktionen definieren, die beim Hochfahren der Notebook-Instanz ausgeführt werden sollen. Insbesondere kann innerhalb der Lebenszykluskonfigurationen ein Shell-Skript implementiert werden, um die Notebook-Instanz automatisch herunterzufahren, sobald die Trainings- und Bereitstellungsprozesse abgeschlossen sind. Dies ist eine erforderliche Konfiguration, da die Kosten einer der wichtigsten Aspekte bei MLOps sind.
Es ist wichtig zu beachten, dass die Konfiguration für Lebenszykluskonfigurationen im Voraus eingerichtet werden muss. Daher wird empfohlen, die Konfiguration dieses Aspekts zu priorisieren, bevor Sie mit der Einrichtung der anderen MLOps-Pipeline fortfahren.
-
Um eine Lebenszykluskonfiguration einzurichten, öffnen Sie das Sagemaker-Bedienfeld und navigieren Sie zu Lebenszykluskonfigurationen im Abschnitt Admin-Konfigurationen.
-
Wählen Sie die Registerkarte Notebook-Instanz und klicken Sie auf die Schaltfläche Konfiguration erstellen
-
Fügen Sie den folgenden Code in den Eingabebereich ein.
#!/bin/bash set -e sudo -u ec2-user -i <<'EOF' # 1. Retraining and redeploying the model NOTEBOOK_FILE=/home/ec2-user/SageMaker/tyre_quality_classification_local_training.ipynb echo "Activating conda env" source /home/ec2-user/anaconda3/bin/activate pytorch_p310 nohup jupyter nbconvert "$NOTEBOOK_FILE" --ExecutePreprocessor.kernel_name=python --execute --to notebook & nbconvert_pid=$! conda deactivate # 2. Scheduling a job to shutdown the notebook to save the cost PYTHON_DIR='/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.10' echo "Starting the autostop script in cron" (crontab -l 2>/dev/null; echo "*/5 * * * * bash -c 'if ps -p $nbconvert_pid > /dev/null; then echo \"Notebook is still running.\" >> /var/log/jupyter.log; else echo \"Notebook execution completed.\" >> /var/log/jupyter.log; $PYTHON_DIR -c \"import boto3;boto3.client(\'sagemaker\').stop_notebook_instance(NotebookInstanceName=get_notebook_name())\" >> /var/log/jupyter.log; fi'") | crontab - EOF
-
Dieses Skript führt das Jupyter-Notebook aus, das das erneute Trainieren und die erneute Bereitstellung des Modells für die Inferenz übernimmt. Nach Abschluss der Ausführung wird das Notebook innerhalb von 5 Minuten automatisch heruntergefahren. Weitere Informationen zur Problemstellung und zur Codeimplementierung finden Sie unter"Teil 2 – Nutzung von Amazon FSx for NetApp ONTAP (FSx ONTAP) als Datenquelle für das Modelltraining in SageMaker" .
-
Navigieren Sie nach der Erstellung zu den Notebook-Instanzen, wählen Sie die Zielinstanz aus und klicken Sie im Dropdown-Menü „Aktionen“ auf „Einstellungen aktualisieren“.
-
Wählen Sie die erstellte Lebenszykluskonfiguration aus und klicken Sie auf Notebook-Instanz aktualisieren.
Serverlose AWS Lambda-Funktion
Wie bereits erwähnt, ist die AWS Lambda-Funktion für das Hochfahren der AWS SageMaker Notebook-Instanz verantwortlich.
-
Um eine AWS Lambda-Funktion zu erstellen, navigieren Sie zum entsprechenden Bereich, wechseln Sie zur Registerkarte Funktionen und klicken Sie auf Funktion erstellen.
-
Bitte tragen Sie alle erforderlichen Angaben auf der Seite ein und denken Sie daran, die Runtime auf Python 3.10 umzustellen.
-
Bitte überprüfen Sie, ob die angegebene Rolle über die erforderliche Berechtigung AmazonSageMakerFullAccess verfügt, und klicken Sie auf die Schaltfläche Funktion erstellen.
-
Wählen Sie die erstellte Lambda-Funktion aus. Kopieren Sie auf der Registerkarte „Code“ den folgenden Code und fügen Sie ihn in den Textbereich ein. Dieser Code startet die Notebook-Instanz mit dem Namen fsxn-ontap.
import boto3 import logging def lambda_handler(event, context): client = boto3.client('sagemaker') logging.info('Invoking SageMaker') client.start_notebook_instance(NotebookInstanceName='fsxn-ontap') return { 'statusCode': 200, 'body': f'Starting notebook instance: {notebook_instance_name}' }
-
Klicken Sie auf die Schaltfläche Bereitstellen, um diese Codeänderung anzuwenden.
-
Um anzugeben, wie diese AWS Lambda-Funktion ausgelöst werden soll, klicken Sie auf die Schaltfläche „Trigger hinzufügen“.
-
Wählen Sie EventBridge aus dem Dropdown-Menü aus und klicken Sie dann auf das Optionsfeld „Neue Regel erstellen“. Geben Sie im Feld „Zeitplanausdruck“ Folgendes ein:
rate(1 day)
und klicken Sie auf die Schaltfläche „Hinzufügen“, um diese neue Cronjob-Regel zu erstellen und auf die AWS Lambda-Funktion anzuwenden.
Nach Abschluss der zweistufigen Konfiguration initiiert die AWS Lambda-Funktion täglich das SageMaker-Notebook, führt eine erneute Modellschulung mithilfe der Daten aus dem FSx ONTAP-Repository durch, stellt das aktualisierte Modell erneut in der Produktionsumgebung bereit und fährt die SageMaker-Notebook-Instanz automatisch herunter, um die Kosten zu optimieren. Dadurch wird sichergestellt, dass das Modell aktuell bleibt.
Damit ist das Tutorial zur Entwicklung einer MLOps-Pipeline abgeschlossen.