Déployez et gérez des pipelines de machine learning avec Terraform à l'aide d'Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Déployer et gérer des pipelines d'apprentissage automatique avec Terraform à l'aide d'Amazon SageMaker

Les clients d'AWS s'appuient sur Infrastructure as Code (IaC) pour concevoir, développer et gérer leur infrastructure cloud. IaC garantit que l'infrastructure et les services du client sont cohérents, évolutifs et reproductibles, tout en étant en mesure de suivre les meilleures pratiques dans le domaine des opérations de développement (DevOps).

Une approche possible pour gérer l'infrastructure et les services AWS avec IaC est Terraform, qui permet aux développeurs d'organiser leur infrastructure en modules de code réutilisables. Cet aspect prend de plus en plus d'importance dans le domaine de l'apprentissage automatique (ML). Le développement et la gestion des pipelines ML, y compris la formation et l'inférence avec Terraform en tant qu'IaC, vous permettent d'évoluer facilement pour plusieurs cas d'utilisation ou régions ML sans avoir à développer l'infrastructure à partir de zéro. En outre, il assure la cohérence de l'infrastructure (par exemple, le type et la taille de l'instance) pour la formation et l'inférence entre différentes implémentations du pipeline ML. Cela vous permet d'acheminer les demandes et le trafic entrant vers différents Amazon Sage Maker points finaux.

Dans cet article, nous vous montrons comment déployer et gérer des pipelines ML à l'aide de Terraform et Amazon SageMaker.

Vue d'ensemble de la solution

Cet article fournit du code et vous guide à travers les étapes nécessaires pour déployer l'infrastructure AWS pour les pipelines ML avec Terraform pour la formation et l'inférence de modèle à l'aide d'Amazon SageMaker. Le pipeline ML est géré via Fonctions d'étape AWS pour orchestrer les différentes étapes mises en œuvre dans le pipeline ML, comme illustré dans la figure suivante.

Étapes de fonction

Step Functions démarre une AWS Lambda fonction, générant un ID de travail unique, qui est ensuite utilisé lors du démarrage d'un travail de formation SageMaker. Step Functions crée également un modèle, une configuration de point de terminaison et un point de terminaison utilisé pour l'inférence. Les ressources supplémentaires incluent les éléments suivants :

Le code lié au ML pour la formation et l'inférence avec une image Docker s'appuie principalement sur les travaux existants dans ce qui suit GitHub référentiel.

Le schéma suivant illustre l'architecture de la solution :

Schéma d'architecture

Nous vous accompagnons dans les étapes de haut niveau suivantes :

  1. Déployez votre infrastructure AWS avec Terraform.
  2. Transférez votre image Docker vers Amazon ECR.
  3. Exécutez le pipeline ML.
  4. Appelez votre point de terminaison.

Structure du référentiel

Vous pouvez trouver le référentiel contenant le code et les données utilisées pour ce post dans ce qui suit GitHub référentiel.

Le référentiel comprend les répertoires suivants :

  • /terraform – Comprend les sous-dossiers suivants :
    • ./infrastructure – Contient le fichier main.tf appelant le module de pipeline ML, en plus des déclarations de variables que nous utilisons pour déployer l'infrastructure
    • ./ml-pipeline-module – Contient le module de pipeline Terraform ML, que nous pouvons réutiliser
  • /src – Comprend les sous-dossiers suivants :
    • ./container – Contient un exemple de code pour la formation et l'inférence avec les définitions de l'image Docker
    • ./lambda_function – Contient le code Python pour la fonction Lambda générant des configurations, comme un ID de travail unique pour le travail de formation SageMaker
  • /data – Contient le fichier suivant :
    • ./iris.csv – Contient des données pour la formation du modèle ML

Pré-requis

Pour cette procédure pas à pas, vous devez disposer des prérequis suivants:

Déployez votre infrastructure AWS avec Terraform

Pour déployer le pipeline ML, vous devez ajuster quelques variables et noms en fonction de vos besoins. Le code de cette étape se trouve dans le /terraform répertoire.

Lors de la première initialisation, ouvrez le fichier terraform/infrastructure/terraform.tfvars et ajustez la variable nom du projet au nom de votre projet, en plus de la variable région si vous souhaitez vous déployer dans une autre Région. Vous pouvez également modifier des variables supplémentaires telles que les types d'instance pour la formation et l'inférence.

Utilisez ensuite les commandes suivantes pour déployer l'infrastructure avec Terraform :

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

Vérifiez la sortie et assurez-vous que les ressources planifiées apparaissent correctement, et confirmez avec oui dans l'étape d'application si tout est correct. Accédez ensuite à la console Amazon ECR (ou vérifiez la sortie de Terraform dans le terminal) et obtenez l'URL de votre référentiel ECR que vous avez créé via Terraform.

La sortie doit ressembler à la sortie affichée suivante, y compris l'URL du référentiel ECR :

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

Poussez votre image Docker vers Amazon ECR

Pour que le pipeline ML et SageMaker forment et provisionnent un point de terminaison SageMaker pour l'inférence, vous devez fournir une image Docker et la stocker dans Amazon ECR. Vous pouvez trouver un exemple dans l'annuaire src/container. Si vous avez déjà appliqué l'infrastructure AWS à partir de l'étape précédente, vous pouvez pousser l'image Docker comme décrit. Une fois votre image Docker développée, vous pouvez effectuer les actions suivantes et la transmettre à Amazon ECR (ajustez l'URL Amazon ECR en fonction de vos besoins) :

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>

Si vous avez déjà appliqué l'infrastructure AWS avec Terraform, vous pouvez pousser les modifications de votre code et de votre image Docker directement vers Amazon ECR sans avoir à redéployer via Terraform.

Exécuter le pipeline ML

Pour former et exécuter le pipeline ML, accédez à la console Step Functions et démarrez l'implémentation. Vous pouvez vérifier la progression de chaque étape dans la visualisation de la machine d'état. Vous pouvez également vérifier la progression de la tâche de formation SageMaker et l'état de votre point de terminaison SageMaker.

Fonction d'étape de démarrage

Après avoir exécuté avec succès la machine d'état dans Step Functions, vous pouvez voir que le point de terminaison SageMaker a été créé. Sur la console SageMaker, choisissez Inférence dans le volet de navigation, puis Endpoints. Assurez-vous d'attendre que le statut passe à InService.

État du point de terminaison SageMaker

Appelez votre point de terminaison

Pour appeler votre point de terminaison (dans cet exemple, pour le jeu de données iris), vous pouvez utiliser le script Python suivant avec le AWS SDK pour Python (Boto3). Vous pouvez le faire à partir d'un bloc-notes SageMaker ou intégrer l'extrait de code suivant dans une fonction Lambda :

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)

Nettoyer

Vous pouvez détruire l'infrastructure créée par Terraform avec la commande terraform destroy, mais vous devez d'abord supprimer les données et les fichiers des compartiments S3. De plus, le point de terminaison SageMaker (ou plusieurs points de terminaison SageMaker s'il est exécuté plusieurs fois) est créé via Step Functions et non géré via Terraform. Cela signifie que le déploiement se produit lors de l'exécution du pipeline ML avec Step Functions. Par conséquent, assurez-vous de supprimer également le ou les points de terminaison SageMaker créés via le pipeline Step Functions ML pour éviter des coûts inutiles. Effectuez les étapes suivantes :

  1. Sur la console Amazon S3, supprimez l'ensemble de données dans le compartiment de formation S3.
  2. Supprimez tous les modèles que vous avez formés via le pipeline ML dans le compartiment de modèles S3, via la console Amazon S3 ou l'AWS CLI.
  3. Détruisez l'infrastructure créée via Terraform :
    cd terraform/infrastructure
    terraform destroy

  4. Supprimez les points de terminaison SageMaker, la configuration des points de terminaison et les modèles créés via Step Functions, soit sur la console SageMaker, soit via l'AWS CLI.

Conclusion

Toutes nos félicitations! Vous avez déployé un pipeline ML à l'aide de SageMaker avec Terraform. Cet exemple de solution montre comment vous pouvez facilement déployer l'infrastructure et les services AWS pour les pipelines ML de manière réutilisable. Cela vous permet d'évoluer pour plusieurs cas d'utilisation ou régions, et permet de former et de déployer des modèles ML en un seul clic de manière cohérente. De plus, vous pouvez exécuter le pipeline ML plusieurs fois, par exemple, lorsque de nouvelles données sont disponibles ou que vous souhaitez modifier le code de l'algorithme. Vous pouvez également choisir d'acheminer les demandes ou le trafic vers différents terminaux SageMaker.

Je vous encourage à explorer l'ajout de fonctionnalités de sécurité et à adopter les meilleures pratiques de sécurité en fonction de vos besoins et des normes potentielles de l'entreprise. De plus, l'intégration de cette solution dans vos pipelines CI/CD vous donnera des capacités supplémentaires pour adopter et établir les meilleures pratiques et normes DevOps en fonction de vos besoins.


À propos de l’auteur

Déployez et gérez des pipelines de machine learning avec Terraform à l'aide d'Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Olivier Zollikofer est Data Scientist chez Amazon Web Services. Il permet aux entreprises clientes mondiales de créer, former et déployer des modèles d'apprentissage automatique, ainsi que de gérer le cycle de vie du modèle ML avec MLOps. De plus, il construit et conçoit des solutions cloud connexes.

Horodatage:

Plus de Apprentissage automatique AWS