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 Komponenten SageMaker
In diesem Tutorial führen Sie eine Pipeline mit SageMaker Components for Kubeflow Pipelines aus, um ein Klassifikationsmodell mithilfe von Kmeans bei eingeschaltetem Datensatz zu trainieren. MNIST SageMaker Der Workflow verwendet Kubeflow Pipelines als Orchestrator und SageMaker zur Ausführung der einzelnen Schritte des Workflows. Das Beispiel wurde einem vorhandenen SageMaker Beispiel
Sie können Ihre Pipeline in Python definieren, indem Sie AWS SDK for Python (Boto3) dann das KFP Dashboard oder Boto3 verwenden KFPCLI, um Ihre Workflows zu kompilieren, bereitzustellen und auszuführen. Der vollständige Code für das Beispiel für die MNIST Klassifizierungspipeline ist im Github-Repository von Kubeflow
Weitere Beispiele für SageMaker Kubeflow-Pipelines
Um das Beispiel einer Klassifizierungspipeline auszuführen, erstellen Sie eine SageMaker IAM Ausführungsrolle, die Ihrem Trainingsjob die Berechtigung zum Zugriff auf AWS Ressourcen gewährt, und fahren Sie dann mit den Schritten fort, die Ihrer Bereitstellungsoption entsprechen.
Erstellen Sie eine SageMaker Ausführungsrolle
Bei der kfp-example-sagemaker-execution-role
IAM Rolle handelt es sich um eine Runtime-Rolle, die SageMaker Jobs für den Zugriff auf AWS Ressourcen übernehmen. Im folgenden Befehl erstellen Sie eine IAM Ausführungsrolle mit dem Namenkfp-example-sagemaker-execution-role
, fügen zwei verwaltete Richtlinien (AmazonSageMakerFullAccess, AmazonS3FullAccess) hinzu und richten eine Vertrauensbeziehung ein, SageMaker um SageMaker Jobs Zugriff auf diese AWS Ressourcen zu gewähren.
Sie geben diese Rolle als Eingabeparameter an, wenn Sie die Pipeline ausführen.
Führen Sie den folgenden -Befehl aus, um die Rolle zu erstellen. Notieren Sie sichARN, was in Ihrer Ausgabe zurückgegeben wird.
SAGEMAKER_EXECUTION_ROLE_NAME=kfp-example-sagemaker-execution-role TRUST="{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"sagemaker.amazonaws.com\" }, \"Action\": \"sts:AssumeRole\" } ] }" aws iam create-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --assume-role-policy-document "$TRUST" aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess aws iam attach-role-policy --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess aws iam get-role --role-name ${SAGEMAKER_EXECUTION_ROLE_NAME} --output text --query 'Role.Arn'
Folgen Sie den Anweisungen des SageMaker Trainingspipeline-Tutorials zur MNIST Klassifizierung mit K-Means.
Datensätze vorbereiten
Um die Pipelines auszuführen, müssen Sie das Vorverarbeitungsskript für die Datenextraktion in einen Amazon-S3-Bucket hochladen. Dieser Bucket und alle Ressourcen für dieses Beispiel müssen sich in der Region us-east-1
befinden. Informationen zum Erstellen eines Buckets finden Sie unter Erstellen eines Buckets.
Führen Sie aus dem mnist-kmeans-sagemaker
Ordner des Kubeflow-Repositorys, das Sie auf Ihrem Gateway-Knoten geklont haben, den folgenden Befehl aus, um die kmeans_preprocessing.py
Datei in Ihren Amazon-S3-Bucket hochzuladen. Ändern Sie <bucket-name>
in den Namen Ihres Amazon-S3-Buckets.
aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://
<bucket-name>
/mnist_kmeans_example/processing_code/kmeans_preprocessing.py
Kompilieren und implementieren Sie Ihre Pipeline
Nachdem Sie die Pipeline definiert haben, müssen Sie sie in eine Zwischendarstellung kompilieren, bevor Sie sie an den Kubeflow Pipelines Service auf Ihrem Cluster senden. Die Zwischendarstellung ist eine Workflow-Spezifikation in Form einer Datei, die in eine YAML Datei tar.gz komprimiert ist. Sie benötigen die KFPSDK, um Ihre Pipeline zu kompilieren.
Installieren KFP SDK
Führen Sie in der Befehlszeile Ihres Gateway-Knotens Folgendes aus:
-
Installieren Sie die KFP SDK folgenden Anweisungen in der Dokumentation zu den Kubeflow-Pipelines
. -
Stellen Sie mit dem folgenden Befehl sicher, dass der installiert KFP SDK ist:
pip show kfp
-
Stellen Sie wie folgt sicher, dass
dsl-compile
korrekt installiert wurde:which dsl-compile
Kompilieren Ihrer Pipeline
Sie haben drei Möglichkeiten, mit Kubeflow-Pipelines zu interagieren: KFP UI KFPCLI, oder. KFP SDK In den folgenden Abschnitten wird der Arbeitsablauf mithilfe der KFP Benutzeroberfläche und veranschaulicht. CLI
Führen Sie die folgenden Schritte von Ihrem Gateway-Knoten aus.
-
Ändern Sie Ihre Python-Datei mit Ihrem Amazon S3 S3-Bucket-Namen und Ihrer IAM RolleARN.
-
Verwenden Sie den
dsl-compile
Befehl von der Befehlszeile aus, um Ihre Pipeline wie folgt zu kompilieren. Ersetzen Sie<path-to-python-file>
durch den Pfad zu Ihrer Pipeline und<path-to-output>
durch den Speicherort, an dem sich Ihre Datei tar.gz befinden soll.dsl-compile --py
<path-to-python-file>
--output<path-to-output>
Laden Sie die Pipeline hoch und führen Sie sie aus mit KFP CLI
Führen Sie die folgenden Schritte von der Befehlszeile Ihres Gateway-Nodes aus. KFPorganisiert Läufe Ihrer Pipeline als Experimente. Sie haben die Möglichkeit, einen Namen für das Experiment anzugeben. Wenn Sie keinen angeben, wird der Durchlauf unter Standardexperiment aufgeführt.
-
Laden Sie Ihre Pipeline wie folgt hoch:
kfp pipeline upload --pipeline-name
<pipeline-name>
<path-to-output-tar.gz>
Die Ausgabe sollte wie folgt aussehen. Beachten Sie die Pipeline
ID
.Pipeline 29c3ff21-49f5-4dfe-94f6-618c0e2420fe has been submitted Pipeline Details ------------------ ID 29c3ff21-49f5-4dfe-94f6-618c0e2420fe Name sm-pipeline Description Uploaded at 2020-04-30T20:22:39+00:00 ... ...
-
Erstellen Sie einen Lauf mit dem folgenden Befehl. Der Befehl KFP CLI run unterstützt derzeit nicht die Angabe von Eingabeparametern bei der Erstellung des Laufs. Sie müssen Ihre Parameter in der AWS SDK for Python (Boto3) Pipeline-Datei vor dem Kompilieren aktualisieren. Ersetzen Sie
<experiment-name>
und<job-name>
durch beliebige Namen. Ersetzen Sie<pipeline-id>
durch die ID Ihrer eingereichten Pipeline. Ersetze es<your-role-arn>
durch das ARN von.kfp-example-pod-role
Ersetzen Sie<your-bucket-name>
durch den Namen des von Ihnen erstellten Amazon-S3-Buckets.kfp run submit --experiment-name
<experiment-name>
--run-name<job-name>
--pipeline-id<pipeline-id>
role_arn="<your-role-arn>
" bucket_name="<your-bucket-name>
"Sie können einen Lauf auch direkt einreichen, indem Sie das kompilierte Pipeline-Paket verwenden, das als Ausgabe des
dsl-compile
Befehls erstellt wurde.kfp run submit --experiment-name
<experiment-name>
--run-name<job-name>
--package-file<path-to-output>
role_arn="<your-role-arn>
" bucket_name="<your-bucket-name>
"Die Ausgabe sollte folgendermaßen aussehen:
Creating experiment aws. Run 95084a2c-f18d-4b77-a9da-eba00bf01e63 is submitted +--------------------------------------+--------+----------+---------------------------+ | run id | name | status | created at | +======================================+========+==========+===========================+ | 95084a2c-f18d-4b77-a9da-eba00bf01e63 | sm-job | | 2020-04-30T20:36:41+00:00 | +--------------------------------------+--------+----------+---------------------------+
-
Navigieren Sie zur Benutzeroberfläche, um den Fortschritt des Auftrags zu überprüfen.
Laden Sie die Pipeline über die KFP Benutzeroberfläche hoch und führen Sie sie aus
-
Wählen Sie im linken Bereich die Registerkarte Pipelines aus.
-
Wählen Sie in der oberen rechten Ecke +. UploadPipeline
-
Geben Sie den Namen und die Beschreibung der Pipeline ein.
-
Wählen Sie Datei hochladen und geben Sie den Pfad zu der Datei tar.gz ein, die Sie mit CLI oder mit erstellt haben. AWS SDK for Python (Boto3)
-
Wählen Sie im linken Bereich die Registerkarte Pipelines aus.
-
Suchen Sie die Pipeline, die Sie erstellt haben.
-
Wählen Sie + CreateRun.
-
Geben Sie Ihre Eingabeparameter ein.
-
Wählen Sie Ausführen aus.
Vorhersagen ausführen
Sobald Ihre Klassifizierungspipeline bereitgestellt ist, können Sie Klassifizierungsvorhersagen für den Endpunkt ausführen, der von der Deploy-Komponente erstellt wurde. Verwenden Sie die KFP Benutzeroberfläche, um nach den Ausgabeartefakten zu suchensagemaker-deploy-model-endpoint_name
. Laden Sie die .tgz-Datei herunter, um den Endpunktnamen zu extrahieren, oder überprüfen Sie die SageMaker Konsole in der Region, die Sie verwendet haben.
Konfigurieren Sie die Berechtigungen für die Ausführung von Vorhersagen
Wenn Sie Vorhersagen von Ihrem Gateway-Knoten aus ausführen möchten, überspringen Sie diesen Abschnitt.
Wenn Sie einen anderen Computer für die Ausführung von Vorhersagen verwenden möchten, weisen Sie die sagemaker:InvokeEndpoint
entsprechende Berechtigung der IAM Rolle zu, die vom Client-Computer verwendet wird.
-
Führen Sie auf Ihrem Gateway-Knoten den folgenden Befehl aus, um eine IAM Richtliniendatei zu erstellen:
cat <<EoF > ./sagemaker-invoke.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:InvokeEndpoint" ], "Resource": "*" } ] } EoF
-
Ordnen Sie die Richtlinie der IAM Rolle des Client-Knotens zu.
Führen Sie den folgenden Befehl aus.
<your-instance-IAM-role>
Ersetzen Sie durch den Namen der IAM Rolle. Ersetzen Sie<path-to-sagemaker-invoke-json>
durch den Pfad zu der von Ihnen erstellten Richtliniendatei.aws iam put-role-policy --role-name
<your-instance-IAM-role>
--policy-name sagemaker-invoke-for-worker --policy-document file://<path-to-sagemaker-invoke-json>
Vorhersagen ausführen
-
Erstellen Sie auf Ihrem Client-Computer eine AWS SDK for Python (Boto3) Datei
mnist-predictions.py
mit dem folgenden Inhalt. Ersetzen Sie dieENDPOINT_NAME
Variable. Das Skript lädt den MNIST Datensatz, erstellt CSV aus diesen Ziffern einen, sendet ihn dann CSV zur Vorhersage an den Endpunkt und druckt die Ergebnisse aus.import boto3 import gzip import io import json import numpy import pickle ENDPOINT_NAME='
<endpoint-name>
' region = boto3.Session().region_name # S3 bucket where the original mnist data is downloaded and stored downloaded_data_bucket = f"jumpstart-cache-prod-{region}" downloaded_data_prefix = "1p-notebooks-datasets/mnist" # Download the dataset s3 = boto3.client("s3") s3.download_file(downloaded_data_bucket, f"{downloaded_data_prefix}/mnist.pkl.gz", "mnist.pkl.gz") # Load the dataset with gzip.open('mnist.pkl.gz', 'rb') as f: train_set, valid_set, test_set = pickle.load(f, encoding='latin1') # Simple function to create a csv from our numpy array def np2csv(arr): csv = io.BytesIO() numpy.savetxt(csv, arr, delimiter=',', fmt='%g') return csv.getvalue().decode().rstrip() runtime = boto3.Session(region).client('sagemaker-runtime') payload = np2csv(train_set[0][30:31]) response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='text/csv', Body=payload) result = json.loads(response['Body'].read().decode()) print(result) -
Führen Sie die AWS SDK for Python (Boto3) Datei wie folgt aus:
python mnist-predictions.py
Ergebnisse und Protokolle anzeigen
Wenn die Pipeline läuft, können Sie eine beliebige Komponente auswählen, um Ausführungsdetails wie Eingaben und Ausgaben zu überprüfen. Dies listet die Namen der erstellten Ressourcen auf.
Wenn die KFP Anforderung erfolgreich verarbeitet und ein SageMaker Job erstellt wurde, enthalten die Komponentenprotokolle in der KFP Benutzeroberfläche einen Link zu dem Job, der in erstellt wurde SageMaker. Die CloudWatch Protokolle werden auch bereitgestellt, wenn der Job erfolgreich erstellt wurde.
Wenn Sie zu viele Pipeline-Aufträge auf demselben Cluster ausführen, wird möglicherweise eine Fehlermeldung angezeigt, die darauf hinweist, dass nicht genügend Pods verfügbar sind. Um dieses Problem zu beheben, melden Sie sich bei Ihrem Gateway-Knoten an und löschen Sie die Pods, die von den Pipelines erstellt wurden, die Sie nicht verwenden:
kubectl get pods -n kubeflow kubectl delete pods -n kubeflow
<name-of-pipeline-pod>
Bereinigen
Wenn Sie mit Ihrer Pipeline fertig sind, müssen Sie Ihre Ressourcen bereinigen.
-
Beenden Sie im KFP Dashboard Ihre Pipeline-Läufe, falls sie nicht ordnungsgemäß beendet werden, indem Sie Terminate wählen.
-
Wenn die Option Terminieren nicht funktioniert, melden Sie sich bei Ihrem Gateway-Knoten an und beenden Sie manuell alle Pods, die durch Ihre Pipeline-Ausführung erstellt wurden, wie folgt:
kubectl get pods -n kubeflow kubectl delete pods -n kubeflow
<name-of-pipeline-pod>
-
Melden Sie sich mit Ihrem AWS Konto beim SageMaker Service an. Beenden Sie manuell alle Schulungen, Batch-Transformationen und HPO Jobs. Löschen Sie Modelle, Daten-Buckets und Endpunkte, um zusätzliche Kosten zu vermeiden. Durch das Beenden der Pipeline-Läufe werden die laufenden Jobs nicht gestoppt. SageMaker