Réduisez les coûts et la complexité du prétraitement du ML avec Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Réduisez les coûts et la complexité du prétraitement ML avec Amazon S3 Object Lambda

Service de stockage simple Amazon (Amazon S3) est un service de stockage d'objets qui offre une évolutivité, une disponibilité des données, une sécurité et des performances de pointe. Souvent, les clients ont des objets dans des compartiments S3 qui nécessitent un traitement supplémentaire pour être utilisés efficacement par les applications consommatrices. Les ingénieurs de données doivent prendre en charge ces vues de données spécifiques à l'application avec des compromis entre la persistance des copies dérivées ou la transformation des données au niveau du consommateur. Aucune des deux solutions n'est idéale car elle introduit une complexité opérationnelle, pose des problèmes de cohérence des données et gaspille des ressources informatiques plus coûteuses.

Ces compromis s'appliquent globalement à de nombreux pipelines d'apprentissage automatique (ML) qui s'entraînent sur des données non structurées, telles que l'audio, la vidéo et le texte de forme libre, entre autres sources. Dans chaque exemple, la tâche d'entraînement doit télécharger des données à partir de compartiments S3, préparer une vue spécifique à l'application, puis utiliser un algorithme d'IA. Cet article présente un modèle de conception pour réduire les coûts, la complexité et gérer de manière centralisée cette deuxième étape. Il utilise le béton exemple de traitement d'image, même si l'approche s'applique globalement à toute charge de travail. Les avantages économiques sont également plus prononcés lorsque l'étape de transformation ne nécessite pas de GPU, contrairement à l'algorithme d'IA.

La solution proposée centralise également le code de transformation des données et permet une transformation juste à temps (JIT). De plus, l'approche utilise une infrastructure sans serveur pour réduire les frais généraux opérationnels et les charges lourdes indifférenciées.

Vue d'ensemble de la solution

Lorsque les algorithmes ML traitent des données non structurées telles que des images et des vidéos, cela nécessite diverses tâches de normalisation (telles que la mise à l'échelle des gris et le redimensionnement). Cette étape existe pour accélérer la convergence du modèle, éviter le surajustement et améliorer la précision des prédictions. Vous effectuez souvent ces étapes de prétraitement sur des instances qui exécutent ultérieurement la formation AI. Cette approche crée des inefficacités, car ces ressources ont généralement des processeurs plus coûteux (par exemple, des GPU) que ces tâches ne nécessitent. Au lieu de cela, notre solution externalise ces opérations à travers des solutions économiques et évolutives horizontalement. Objet Amazon S3 Lambda fonctions.

Ce modèle de conception présente trois avantages essentiels. Tout d'abord, il centralise les étapes de transformation des données partagées, telles que la normalisation des images et la suppression de la duplication du code du pipeline ML. Ensuite, les fonctions S3 Object Lambda évitent les problèmes de cohérence des données dans les données dérivées grâce aux conversions JIT. Troisièmement, l'infrastructure sans serveur réduit les frais généraux opérationnels, augmente le temps d'accès et limite les coûts à la milliseconde d'exécution de votre code.

Il existe une solution élégante dans laquelle vous pouvez centraliser ces opérations de prétraitement et de conversion de données avec S3 Object Lambda. S3 Object Lambda vous permet d'ajouter du code qui modifie les données d'Amazon S3 avant de les renvoyer à une application. Le code s'exécute dans un AWS Lambda fonction, un service de calcul sans serveur. Lambda peut s'adapter instantanément à des dizaines de milliers d'exécutions parallèles tout en prenant en charge des dizaines de langages de programmation et même conteneurs personnalisés. Pour plus d'informations, voir Présentation d'Amazon S3 Object Lambda - Utilisez votre code pour traiter les données lors de leur récupération à partir de S3.

Le diagramme suivant illustre l'architecture de la solution.

Normaliser les ensembles de données utilisés pour former le modèle d'apprentissage automatique

Dans cette solution, vous disposez d'un bucket S3 qui contient les images brutes à traiter. Ensuite, vous créez un Point d'accès S3 pour ces images. Si vous créez plusieurs modèles ML, vous pouvez créer des points d'accès S3 distincts pour chaque modèle. Alternativement, Gestion des identités et des accès AWS (JE SUIS) politiques pour les points d'accès prendre en charge le partage de fonctions réutilisables dans les pipelines ML. Ensuite, vous attachez une fonction Lambda qui a votre logique métier de prétraitement au point d'accès S3. Après avoir récupéré les données, vous appelez le point d'accès S3 pour effectuer des transformations de données JIT. Enfin, vous mettez à jour votre modèle ML pour utiliser le nouveau Point d'accès Lambda de l'objet S3 pour récupérer des données depuis Amazon S3.

Créer le point d'accès de normalisation

Cette section décrit les étapes de création du point d'accès S3 Object Lambda.

Les données brutes sont stockées dans un compartiment S3. Pour fournir à l'utilisateur le bon ensemble d'autorisations pour accéder à ces données, tout en évitant les stratégies de compartiment complexes qui peuvent avoir un impact inattendu sur une autre application, vous devez créer des points d'accès S3. Les points d'accès S3 sont des noms d'hôte uniques que vous pouvez utiliser pour accéder aux compartiments S3. Avec les points d'accès S3, vous pouvez créer des politiques de contrôle d'accès individuelles pour chaque point d'accès afin de contrôler facilement et en toute sécurité l'accès aux ensembles de données partagés.

  1. Créez votre point d'accès.
  2. Créez une fonction Lambda qui effectue le redimensionnement et la conversion de l'image. Voir le code Python suivant :
import boto3
import cv2
import numpy as np
import requests
import io def lambda_handler(event, context): print(event) object_get_context = event["getObjectContext"] request_route = object_get_context["outputRoute"] request_token = object_get_context["outputToken"] s3_url = object_get_context["inputS3Url"] # Get object from S3 response = requests.get(s3_url) nparr = np.fromstring(response.content, np.uint8) img = cv2.imdecode(nparr, flags=1) # Transform object new_shape=(256,256) resized = cv2.resize(img, new_shape, interpolation= cv2.INTER_AREA) gray_scaled = cv2.cvtColor(resized,cv2.COLOR_BGR2GRAY) # Transform object is_success, buffer = cv2.imencode(".jpg", gray_scaled) if not is_success: raise ValueError('Unable to imencode()') transformed_object = io.BytesIO(buffer).getvalue() # Write object back to S3 Object Lambda s3 = boto3.client('s3') s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) return {'status_code': 200}
  1. Créer un Objet Point d'accès Lambda en utilisant le point d'accès pris en charge à partir de l'étape 1.

La fonction Lambda utilise le point d'accès de prise en charge pour télécharger les objets d'origine.

  1. Mises à jour Amazon Sage Maker pour utiliser le nouveau point d'accès S3 Object Lambda pour récupérer les données d'Amazon S3. Voir le code bash suivant :
aws s3api get-object --bucket arn:aws:s3-object-lambda:us-west-2:12345678901:accesspoint/image-normalizer --key images/test.png

Analyse des économies de coûts

Traditionnellement, les pipelines ML copient des images et d'autres fichiers d'Amazon S3 vers des instances SageMaker, puis effectuent une normalisation. Cependant, la transformation de ces actions sur les instances de formation présente des inefficacités. Tout d'abord, Lambda fonctionne à l'échelle horizontale pour gérer la rafale, puis se rétrécit élastiquement, seulement charge par milliseconde lorsque le code est en cours d'exécution. De nombreuses étapes de prétraitement ne nécessitent pas de GPU et peuvent même utiliser ARM64. Cela crée une incitation à déplacer ce traitement vers un calcul plus économique tel que Fonctions Lambda optimisées par les processeurs AWS Graviton2.

En utilisant un exemple de la Calculateur de prix Lambda, vous pouvez configurer la fonction avec 256 Mo de mémoire et comparer les coûts pour x86 et Graviton (ARM64). Nous avons choisi cette taille car elle est suffisante pour de nombreuses tâches de préparation de données d'une seule image. Ensuite, utilisez le Calculateur de prix SageMaker pour calculer les dépenses d'une instance ml.p2.xlarge. Il s'agit de la plus petite instance de formation SageMaker prise en charge avec prise en charge GPU. Ces résultats montrent jusqu'à 90 % d'économies de calcul pour les opérations qui n'utilisent pas de GPU et peuvent passer à Lambda. Le tableau suivant résume ces constatations.

 

Lambda avec x86 Lambda avec Graviton2 (ARM) SageMaker ml.p2.xlarge
Mémoire (Go) 0.25 0.25 61
Processeur  -  - 4
GPU  -  - 1
Coût/heure $0.061 $0.049 $0.90

Conclusion

Vous pouvez créer des applications modernes pour obtenir des informations sur vos données. Ces différentes applications ont des exigences d'affichage de données uniques, telles que des actions de formatage et de prétraitement. Le traitement de ces autres cas d'utilisation peut entraîner une duplication des données, une augmentation des coûts et une plus grande complexité pour maintenir la cohérence. Cet article propose une solution pour gérer efficacement ces situations à l'aide des fonctions S3 Object Lambda.

Non seulement cela supprime le besoin de duplication, mais cela ouvre également la voie à la mise à l'échelle horizontale de ces actions sur des calculs moins coûteux ! Même l'optimisation du code de transformation pour l'instance ml.p2.xlarge serait encore beaucoup plus coûteuse en raison des GPU inactifs.

Pour plus d'idées sur l'utilisation du sans serveur et du ML, consultez Inférence d'apprentissage automatique à grande échelle à l'aide d'AWS sans serveur et les Déployer des modèles d'apprentissage automatique avec des modèles sans serveur.


À propos des auteurs

Réduisez les coûts et la complexité du prétraitement du ML avec Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Nate Bachmeier est un architecte de solutions senior AWS qui explore New York de manière nomade, une intégration cloud à la fois. Il est spécialisé dans la migration et la modernisation des charges de travail des clients. En plus de cela, Nate est étudiant à temps plein et a deux enfants.

Réduisez les coûts et la complexité du prétraitement du ML avec Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Marvin Fernandes est un architecte de solutions chez AWS, basé dans la région de New York. Il a plus de 20 ans d'expérience dans la création et l'exécution d'applications de services financiers. Il travaille actuellement avec de grandes entreprises clientes pour résoudre des problèmes commerciaux complexes en créant des architectures cloud évolutives, flexibles et résilientes.

Horodatage:

Plus de Apprentissage automatique AWS