Mise à l'échelle de la formation et de l'inférence de milliers de modèles ML avec Amazon SageMaker | Services Web Amazon

Mise à l'échelle de la formation et de l'inférence de milliers de modèles ML avec Amazon SageMaker | Services Web Amazon

Alors que l'apprentissage automatique (ML) devient de plus en plus répandu dans un large éventail d'industries, les organisations constatent le besoin de former et de servir un grand nombre de modèles ML pour répondre aux divers besoins de leurs clients. Pour les fournisseurs de logiciels en tant que service (SaaS) en particulier, la capacité de former et de servir des milliers de modèles de manière efficace et rentable est cruciale pour rester compétitif sur un marché en évolution rapide.

La formation et le service de milliers de modèles nécessitent une infrastructure robuste et évolutive, où Amazon Sage Maker peut aider. SageMaker est une plate-forme entièrement gérée qui permet aux développeurs et aux scientifiques des données de créer, former et déployer rapidement des modèles ML, tout en offrant les avantages économiques de l'utilisation de l'infrastructure AWS Cloud.

Dans cet article, nous explorons comment vous pouvez utiliser les fonctionnalités de SageMaker, y compris Traitement d'Amazon SageMaker, les tâches de formation SageMaker et les points de terminaison multi-modèles (MME) SageMaker, pour former et servir des milliers de modèles de manière rentable. Pour commencer avec la solution décrite, vous pouvez vous référer au cahier d'accompagnement sur GitHub.

Cas d'utilisation : prévision énergétique

Pour ce poste, nous assumons le rôle d'une entreprise ISV qui aide ses clients à devenir plus durables en suivant leur consommation d'énergie et en fournissant des prévisions. Notre entreprise compte 1,000 XNUMX clients qui souhaitent mieux comprendre leur consommation d'énergie et prendre des décisions éclairées sur la manière de réduire leur impact environnemental. Pour ce faire, nous utilisons un ensemble de données synthétiques et entraînons un modèle ML basé sur Prophète pour chaque client de faire des prévisions de consommation d'énergie. Avec SageMaker, nous pouvons former et servir efficacement ces 1,000 XNUMX modèles, en fournissant à nos clients des informations précises et exploitables sur leur consommation d'énergie.

Il y a trois fonctionnalités dans l'ensemble de données généré :

  • customer_id – Il s'agit d'un identifiant entier pour chaque client, compris entre 0 et 999.
  • horodatage – Il s'agit d'une valeur de date/heure qui indique l'heure à laquelle la consommation d'énergie a été mesurée. Les horodatages sont générés de manière aléatoire entre les dates de début et de fin spécifiées dans le code.
  • consommation – Il s'agit d'une valeur flottante qui indique la consommation d'énergie, mesurée dans une unité arbitraire. Les valeurs de consommation sont générées aléatoirement entre 0 et 1,000 XNUMX avec une saisonnalité sinusoïdale.

Vue d'ensemble de la solution

Pour former et servir efficacement des milliers de modèles ML, nous pouvons utiliser les fonctionnalités SageMaker suivantes :

  • Traitement SageMaker – SageMaker Processing est un service de préparation de données entièrement géré qui vous permet d'effectuer des tâches de traitement de données et d'évaluation de modèle sur vos données d'entrée. Vous pouvez utiliser SageMaker Processing pour transformer les données brutes dans le format nécessaire à la formation et à l'inférence, ainsi que pour exécuter des évaluations par lots et en ligne de vos modèles.
  • Emplois de formation SageMaker – Vous pouvez utiliser les tâches de formation SageMaker pour former des modèles sur une variété d'algorithmes et de types de données d'entrée, et spécifier les ressources de calcul nécessaires à la formation.
  • MME SageMaker – Les points de terminaison multimodèles vous permettent d'héberger plusieurs modèles sur un seul point de terminaison, ce qui facilite la diffusion de prédictions à partir de plusieurs modèles à l'aide d'une seule API. Les MME SageMaker peuvent économiser du temps et des ressources en réduisant le nombre de points de terminaison nécessaires pour servir les prédictions de plusieurs modèles. Les MME prennent en charge l'hébergement de modèles basés sur CPU et GPU. Notez que dans notre scénario, nous utilisons 1,000 XNUMX modèles, mais ce n'est pas une limitation du service lui-même.

Le diagramme suivant illustre l'architecture de la solution.

architecture qui affiche le processus décrit

Le workflow comprend les étapes suivantes:

  1. Nous utilisons SageMaker Processing pour prétraiter les données et créer un seul fichier CSV par client et le stocker dans Service de stockage simple Amazon (Amazon S3).
  2. La tâche de formation SageMaker est configurée pour lire la sortie de la tâche de traitement SageMaker et la distribuer de manière circulaire aux instances de formation. Notez que cela peut également être réalisé avec Pipelines Amazon SageMaker.
  3. Les artefacts de modèle sont stockés dans Amazon S3 par la tâche de formation et sont servis directement à partir de SageMaker MME.

Adaptez la formation à des milliers de modèles

La mise à l'échelle de la formation de milliers de modèles est possible via le distribution paramètre de la FormationEntrée classe dans le SDK SageMaker Python, qui vous permet de spécifier la manière dont les données sont distribuées sur plusieurs instances de formation pour une tâche de formation. Il existe trois options pour le distribution paramètre: FullyReplicated, ShardedByS3Keyet une ShardedByRecordL’ ShardedByS3Key L'option signifie que les données de formation sont partagées par clé d'objet S3, chaque instance de formation recevant un sous-ensemble unique de données, évitant ainsi la duplication. Une fois les données copiées par SageMaker dans les conteneurs de formation, nous pouvons lire la structure des dossiers et des fichiers pour former un modèle unique par fichier client. Voici un exemple d'extrait de code :

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Chaque tâche de formation SageMaker stocke le modèle enregistré dans le /opt/ml/model dossier du conteneur de formation avant de l'archiver dans un model.tar.gz fichier, puis le télécharge sur Amazon S3 une fois la tâche de formation terminée. Les utilisateurs expérimentés peuvent également automatiser ce processus avec SageMaker Pipelines. Lors du stockage de plusieurs modèles via la même tâche de formation, SageMaker crée un seul model.tar.gz fichier contenant tous les modèles entraînés. Cela signifierait alors que, pour servir le modèle, nous devrions d'abord décompresser l'archive. Pour éviter cela, nous utilisons les points de contrôle pour enregistrer l'état des modèles individuels. SageMaker fournit la fonctionnalité permettant de copier les points de contrôle créés pendant la tâche de formation vers Amazon S3. Ici, les points de contrôle doivent être enregistrés dans un emplacement prédéfini, la valeur par défaut étant /opt/ml/checkpoints. Ces points de contrôle peuvent être utilisés pour reprendre la formation ultérieurement ou comme modèle à déployer sur un point de terminaison. Pour un résumé de haut niveau de la façon dont la plateforme de formation SageMaker gère les chemins de stockage pour les ensembles de données de formation, les artefacts de modèle, les points de contrôle et les sorties entre le stockage AWS Cloud et les tâches de formation dans SageMaker, reportez-vous à Dossiers de stockage de formation Amazon SageMaker pour les ensembles de données de formation, les points de contrôle, les artefacts de modèle et les sorties.

Le code suivant utilise un fictif model.save() fonctionner à l'intérieur du train.py script contenant la logique d'entraînement :

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Adaptez l'inférence à des milliers de modèles avec les MME SageMaker

Les MME SageMaker vous permettent de servir plusieurs modèles en même temps en créant une configuration de point de terminaison qui inclut une liste de tous les modèles à servir, puis en créant un point de terminaison à l'aide de cette configuration de point de terminaison. Il n'est pas nécessaire de redéployer le point de terminaison chaque fois que vous ajoutez un nouveau modèle, car le point de terminaison servira automatiquement tous les modèles stockés dans les chemins S3 spécifiés. Ceci est réalisé avec Serveur multimodèle (MMS), un framework open source pour servir des modèles ML qui peuvent être installés dans des conteneurs pour fournir le frontal qui répond aux exigences des nouvelles API de conteneur MME. De plus, vous pouvez utiliser d'autres modèles de serveurs, notamment TorcheServe ainsi que Triton. MMS peut être installé dans votre conteneur personnalisé via le Boîte à outils d'inférence SageMaker. Pour en savoir plus sur la configuration de votre Dockerfile pour inclure MMS et l'utiliser pour servir vos modèles, reportez-vous à Créez votre propre conteneur pour les points de terminaison multimodèles SageMaker.

L'extrait de code suivant montre comment créer un MME à l'aide du SDK Python SageMaker :

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Lorsque le MME est en direct, nous pouvons l'invoquer pour générer des prédictions. Les appels peuvent être effectués dans n'importe quel kit SDK AWS ainsi qu'avec le kit SDK Python SageMaker, comme indiqué dans l'extrait de code suivant :

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Lors de l'appel d'un modèle, le modèle est initialement chargé à partir d'Amazon S3 sur l'instance, ce qui peut entraîner un démarrage à froid lors de l'appel d'un nouveau modèle. Les modèles fréquemment utilisés sont mis en cache dans la mémoire et sur le disque pour fournir une inférence à faible latence.

Conclusion

SageMaker est une plate-forme puissante et rentable pour former et servir des milliers de modèles ML. Ses fonctionnalités, notamment le traitement SageMaker, les tâches de formation et les MME, permettent aux organisations de former et de servir efficacement des milliers de modèles à grande échelle, tout en bénéficiant des avantages économiques de l'utilisation de l'infrastructure AWS Cloud. Pour en savoir plus sur l'utilisation de SageMaker pour former et servir des milliers de modèles, reportez-vous à Données de processus, Former un modèle avec Amazon SageMaker ainsi que Hébergez plusieurs modèles dans un conteneur derrière un point de terminaison.


À propos des auteurs

Photo de DavideDavid Gallitelli est un architecte de solutions spécialisé pour l'IA/ML dans la région EMEA. Il est basé à Bruxelles et travaille en étroite collaboration avec des clients dans tout le Benelux. Il est développeur depuis qu'il est très jeune et a commencé à coder à l'âge de 7 ans. Il a commencé à apprendre l'IA/ML à l'université et en est tombé amoureux depuis.

Photo de MauritsMaurice de Groot est un architecte de solutions chez Amazon Web Services, basé à Amsterdam. Il aime travailler sur des sujets liés au machine learning et a une prédilection pour les startups. Dans ses temps libres, il aime skier et jouer au squash.

Horodatage:

Plus de Apprentissage automatique AWS