Utiliser des composants d' SageMaker IA - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser des composants d' SageMaker IA

Dans ce didacticiel, vous allez exécuter un pipeline à l'aide de composants SageMaker AI pour Kubeflow Pipelines afin d'entraîner un modèle de classification à l'aide de Kmeans avec le MNIST jeu de données sur l'IA. SageMaker Le flux de travail utilise Kubeflow Pipelines comme orchestrateur et l' SageMaker IA pour exécuter chaque étape du flux de travail. L'exemple a été tiré d'un exemple d' SageMaker IA existant et modifié pour fonctionner avec les composants SageMaker AI pour Kubeflow Pipelines.

Vous pouvez définir votre pipeline en Python en utilisant AWS SDK for Python (Boto3) ensuite le KFP tableau de bord ou Boto3 pour compiler, déployer et exécuter vos flux de travail. KFP CLI Le code complet de l'exemple de pipeline de MNIST classification est disponible dans le référentiel Github de Kubeflow. Pour l'utiliser, clonez les fichiers Python sur votre nœud de passerelle.

Vous pouvez trouver d'autres exemples de pipelines SageMaker AI Kubeflow sur. GitHub Pour plus d'informations sur les composants utilisés, consultez le GitHub référentiel KubeFlow Pipelines.

Pour exécuter l'exemple de pipeline de classification, créez un rôle IAM d'exécution SageMaker AI accordant à votre tâche de formation l'autorisation d'accéder aux AWS ressources, puis poursuivez les étapes correspondant à votre option de déploiement.

Création d'un rôle d'exécution SageMaker basé sur l'IA

Le kfp-example-sagemaker-execution-role IAM rôle est un rôle d'exécution assumé par les tâches d' SageMaker IA pour accéder aux AWS ressources. Dans la commande suivante, vous créez un rôle d'IAMexécution nommékfp-example-sagemaker-execution-role, vous associez deux politiques gérées (AmazonSageMakerFullAccess, AmazonS3FullAccess) et vous créez une relation de confiance avec l' SageMaker IA pour accorder aux tâches d' SageMaker IA l'accès à ces AWS ressources.

Vous fournissez ce rôle en tant que paramètre d'entrée lors de l'exécution du pipeline.

Exécutez la commande suivante pour créer le rôle. Notez ARN ce qui est renvoyé dans votre sortie.

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'

Suivez les instructions du didacticiel SageMaker Training Pipeline pour la MNIST classification avec K-Means.

Préparation de jeux de données

Pour exécuter les pipelines, vous devez télécharger le script de prétraitement de l'extraction de données dans un compartiment Amazon S3. Ce compartiment et toutes les ressources pour cet exemple doivent se situer dans la région us-east-1. Pour en savoir plus sur la création d'un compartiment, consultez Créer un compartiment.

Depuis le dossier mnist-kmeans-sagemaker du référentiel Kubeflow que vous avez cloné sur votre nœud de passerelle, exécutez la commande suivante pour télécharger le fichier kmeans_preprocessing.py dans votre compartiment Amazon S3. Modifiez <bucket-name> en spécifiant le nom de votre compartiment Amazon S3.

aws s3 cp mnist-kmeans-sagemaker/kmeans_preprocessing.py s3://<bucket-name>/mnist_kmeans_example/processing_code/kmeans_preprocessing.py

Compiler et déployer votre pipeline

Après avoir défini le pipeline, vous devez le compiler en une représentation intermédiaire avant de pouvoir le soumettre au service Kubeflow Pipelines sur votre cluster. La représentation intermédiaire est une spécification de flux de travail sous la forme d'un YAML fichier compressé dans un fichier tar.gz. Vous en avez besoin KFP SDK pour compiler votre pipeline.

Installer KFP SDK

Exécutez ce qui suit à partir de la ligne de commande de votre nœud de passerelle :

  1. Installez les instructions KFP SDK suivantes dans la documentation des pipelines Kubeflow.

  2. Vérifiez que le KFP SDK est installé à l'aide de la commande suivante :

    pip show kfp
  3. Vérifiez que dsl-compile a été installé correctement comme suit :

    which dsl-compile

Compilation de votre pipeline

Vous avez trois options pour interagir avec Kubeflow Pipelines : KFP UI KFPCLI, ou le. KFP SDK Les sections suivantes illustrent le flux de travail à l'aide de l'KFPinterface utilisateur etCLI.

Procédez comme suit à partir de votre nœud de passerelle.

  1. Modifiez votre fichier Python avec le nom et le IAM rôle de votre compartiment Amazon S3ARN.

  2. Utilisez la commande dsl-compile à partir de la ligne de commande pour compiler votre pipeline comme suit. Remplacez <path-to-python-file> par le chemin d'accès à votre pipeline et <path-to-output> par l'emplacement où vous souhaitez avoir votre fichier tar.gz.

    dsl-compile --py <path-to-python-file> --output <path-to-output>

Téléchargez et exécutez le pipeline à l'aide du KFP CLI

Effectuez les étapes suivantes à partir de la ligne de commande de votre nœud de passerelle. KFPorganise les cycles de votre pipeline sous forme d'expériences. Vous avez la possibilité de spécifier un nom d'expérience. Si vous n'en spécifiez pas, l'exécution sera répertoriée sous expérience par défaut.

  1. Téléchargez votre pipeline comme suit :

    kfp pipeline upload --pipeline-name <pipeline-name> <path-to-output-tar.gz>

    Le résultat doit être similaire à ce qui suit. Prenez note de l'ID du pipeline.

    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 ... ...
  2. Créez une exécution à l'aide de la commande suivante. La commande KFP CLI run ne permet actuellement pas de spécifier les paramètres d'entrée lors de la création de l'exécution. Vous devez mettre à jour vos paramètres dans le fichier de AWS SDK for Python (Boto3) pipeline avant de procéder à la compilation. Remplacez <experiment-name> et <job-name> par des noms quelconques. Remplacez <pipeline-id> par l'ID de votre pipeline envoyé. <your-role-arn>Remplacez par ARN lekfp-example-pod-role. Remplacez <your-bucket-name> par le nom du compartiment Amazon S3 que vous avez créé.

    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>"

    Vous pouvez également soumettre directement une exécution à l'aide du package de pipeline compilé créé en tant que sortie de la commande dsl-compile.

    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>"

    Le résultat doit être similaire à ce qui suit :

    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 | +--------------------------------------+--------+----------+---------------------------+
  3. Accédez à l'interface utilisateur pour vérifier la progression de la tâche.

Téléchargez et exécutez le pipeline à l'aide de l'KFPinterface utilisateur

  1. Dans le panneau de gauche, choisissez l'option Pipelines.

  2. Dans le coin supérieur droit, choisissez +. UploadPipeline

  3. Saisissez le nom du pipeline et sa description.

  4. Choisissez Charger un fichier et entrez le chemin du fichier tar.gz que vous avez créé à l'aide du CLI ou avec AWS SDK for Python (Boto3).

  5. Dans le panneau de gauche, choisissez l'onglet Pipelines.

  6. Recherchez le pipeline que vous avez créé.

  7. Choisissez + CreateRun.

  8. Entrez vos paramètres d'entrée.

  9. Cliquez sur Exécuter.

Prédictions d'exécution

Une fois votre pipeline de classification déployé, vous pouvez exécuter des prédictions de classification par rapport au point de terminaison créé par le composant Déployer. Utilisez l'KFPinterface utilisateur pour vérifier les artefacts de sortiesagemaker-deploy-model-endpoint_name. Téléchargez le fichier .tgz pour extraire le nom du point de terminaison ou vérifiez la console SageMaker AI dans la région que vous avez utilisée.

Configuration des autorisations pour exécuter les prédictions

Si vous souhaitez exécuter des prédictions à partir de votre nœud de passerelle, ignorez cette section.

Pour utiliser une autre machine pour exécuter des prédictions, attribuez l'sagemaker:InvokeEndpointautorisation au IAM rôle utilisé par la machine cliente.
  1. Sur votre nœud de passerelle, exécutez ce qui suit pour créer un fichier IAM de politique :

    cat <<EoF > ./sagemaker-invoke.json {     "Version": "2012-10-17",     "Statement": [         {             "Effect": "Allow",             "Action": [                 "sagemaker:InvokeEndpoint"             ],             "Resource": "*"         }     ] } EoF
  2. Attachez la politique au IAM rôle du nœud client.

    Exécutez la commande suivante. Remplacez <your-instance-IAM-role> par le nom du IAM rôle. Remplacez <path-to-sagemaker-invoke-json> par le chemin d'accès au fichier de politique que vous avez créé.

    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>

Prédictions d'exécution

  1. Créez un AWS SDK for Python (Boto3) fichier à partir de votre machine cliente nommé mnist-predictions.py avec le contenu suivant. Remplacez la variable ENDPOINT_NAME. Le script charge l'MNISTensemble de données, crée un CSV à partir de ces chiffres, puis l'envoie CSV au point de terminaison pour prédiction et imprime les résultats.

    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)
  2. Exécutez le AWS SDK for Python (Boto3) fichier comme suit :

    python mnist-predictions.py

Affichage des résultats et des journaux

Lorsque le pipeline est en cours d'exécution, vous pouvez choisir n'importe quel composant pour vérifier les détails d'exécution, tels que les entrées et les sorties. Cette liste répertorie les noms des ressources créées.

Si la KFP demande est traitée avec succès et qu'une tâche SageMaker AI est créée, les journaux du composant dans l'KFPinterface utilisateur fournissent un lien vers la tâche créée dans SageMaker AI. Les CloudWatch journaux sont également fournis si la tâche est créée avec succès.

Si vous exécutez trop de tâches de pipeline sur le même cluster, un message d'erreur peut s'afficher et indiquer que vous n'avez pas suffisamment de pods disponibles. Pour résoudre ce problème, connectez-vous à votre nœud de passerelle et supprimez les pods créés par les pipelines que vous n'utilisez pas :

kubectl get pods -n kubeflow kubectl delete pods -n kubeflow <name-of-pipeline-pod>

Nettoyage

Lorsque vous n'avez plus besoin de votre pipeline, vous devez nettoyer vos ressources.

  1. Dans le KFP tableau de bord, mettez fin à vos cycles de pipeline s'ils ne se terminent pas correctement en choisissant Terminate.

  2. Si l'option Résilier ne fonctionne pas, connectez-vous à votre nœud de passerelle et résiliez manuellement tous les pods créés par votre exécution de pipeline, comme suit :

    kubectl get pods -n kubeflow kubectl delete pods -n kubeflow <name-of-pipeline-pod>
  3. À l'aide de votre AWS compte, connectez-vous au service SageMaker AI. Arrêtez manuellement toutes les formations, les transformations par lots et les HPO tâches. Supprimez les modèles, les compartiments de données et les points de terminaison pour éviter des coûts supplémentaires. L'arrêt des cycles de pipeline n'arrête pas les emplois dans le domaine de l' SageMaker IA.