Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Améliorez la recherche de grande valeur avec les points de terminaison d'inférence asynchrone Hugging Face et Amazon SageMaker

Un grand nombre de nos clients AWS fournissent des services de recherche, d'analyse et d'informatique décisionnelle en tant que service. Ce type de recherche et de business intelligence permet à leurs clients finaux de garder une longueur d'avance sur les marchés et les concurrents, d'identifier les opportunités de croissance et de résoudre les problèmes de manière proactive. Par exemple, certains de nos clients du secteur des services financiers effectuent des recherches sur les actions, les fonds spéculatifs et les sociétés de gestion de placements pour les aider à comprendre les tendances et à identifier les stratégies de portefeuille. Dans l'industrie de la santé, une part de plus en plus importante de la recherche en santé est désormais basée sur l'information. Une grande partie de la recherche implique l'analyse de données qui ont été initialement collectées pour le diagnostic, le traitement ou d'autres projets de recherche, et qui sont maintenant utilisées à de nouvelles fins de recherche. Ces formes de recherche en santé ont conduit à une prévention primaire efficace pour éviter de nouveaux cas, à une prévention secondaire pour une détection précoce et à une prévention pour une meilleure gestion de la maladie. Les résultats de la recherche améliorent non seulement la qualité de vie, mais contribuent également à réduire les dépenses de santé.

Les clients ont tendance à digérer les informations provenant de sources publiques et privées. Ils appliquent ensuite des modèles de traitement du langage naturel (TAL) établis ou personnalisés pour résumer et identifier une tendance et générer des informations basées sur ces informations. Les modèles NLP utilisés pour ces types de tâches de recherche traitent de grands modèles et impliquent généralement de longs articles à résumer en tenant compte de la taille du corpus - et des points finaux dédiés, qui ne sont pas optimisés en termes de coûts pour le moment. Ces applications reçoivent une rafale de trafic entrant à différents moments de la journée.

Nous pensons que les clients bénéficieraient grandement de la possibilité de réduire à zéro et d'augmenter leur capacité d'inférence selon les besoins. Cela optimise le coût de la recherche et ne compromet toujours pas la qualité des inférences. Cet article explique comment Hugging Face avec Amazon Sage Maker l'inférence asynchrone peut aider à atteindre cet objectif.

Vous pouvez créer des modèles de synthèse de texte avec plusieurs frameworks d'apprentissage en profondeur tels que TensorFlow, PyTorch et Apache MXNet. Ces modèles ont généralement une grande charge utile d'entrée de plusieurs documents texte de taille variable. Les modèles avancés d'apprentissage en profondeur nécessitent un prétraitement intensif en calcul avant l'inférence du modèle. Les temps de traitement peuvent atteindre quelques minutes, ce qui supprime la possibilité d'exécuter une inférence en temps réel en transmettant des charges utiles via une API HTTP. Au lieu de cela, vous devez traiter les charges utiles d'entrée de manière asynchrone à partir d'un magasin d'objets comme Service de stockage simple Amazon (Amazon S3) avec mise en file d'attente automatique et seuil de simultanéité prédéfini. Le système doit pouvoir recevoir des notifications d'état et réduire les coûts inutiles en nettoyant les ressources lorsque les tâches sont terminées.

SageMaker aide les data scientists et les développeurs à préparer, créer, former et déployer rapidement des modèles d'apprentissage automatique (ML) de haute qualité en rassemblant un large éventail de fonctionnalités spécialement conçues pour le ML. SageMaker fournit les conteneurs de service de modèle open source les plus avancés pour XGBoost (récipient, SDK), Scikit Learn (récipient, SDK), PyTorche (récipient, SDK), TensorFlow (récipient, SDK) et Apache MXNet (récipient, SDK).

SageMaker propose quatre options pour déployer des modèles ML formés pour générer des inférences sur de nouvelles données.
  1. Inférence en temps réel Les points de terminaison conviennent aux charges de travail qui doivent être traitées avec des exigences de faible latence de l'ordre de la ms à la seconde.
  2. Transformation par lots est idéal pour les prédictions hors ligne sur de grands lots de données.
  3. Inférence sans serveur Amazon SageMaker (en mode aperçu et non recommandé pour les charges de travail de production au moment de la rédaction de cet article) est une option d'inférence spécialement conçue qui vous permet de déployer et de mettre à l'échelle facilement des modèles ML. L'inférence sans serveur est idéale pour les charges de travail qui ont des périodes d'inactivité entre les pics de trafic et qui peuvent tolérer les démarrages à froid.
  4. Inférence asynchrone les points de terminaison mettent en file d'attente les requêtes entrantes. Ils sont idéaux pour les charges de travail où les tailles de requête sont importantes (jusqu'à 1 Go) et les temps de traitement d'inférence sont de l'ordre de quelques minutes (jusqu'à 15 minutes). L'inférence asynchrone vous permet de réduire les coûts en mettant à l'échelle automatiquement le nombre d'instances à zéro lorsqu'il n'y a aucune demande à traiter.

Vue d'ensemble de la solution

Dans ce post, nous déployons un Modèle PÉGASE qui a été pré-formé pour faire des résumés de texte à partir de Étreindre le visage à Services d'hébergement SageMaker. Nous utilisons le modèle tel quel de Hugging Face pour plus de simplicité. Cependant, vous pouvez affiner le modèle en fonction d'un ensemble de données personnalisé. Vous pouvez également essayer d'autres modèles disponibles dans le Hub de modèle de visage étreignant. Nous fournissons également un point de terminaison d'inférence asynchrone qui héberge ce modèle, à partir duquel vous pouvez obtenir des prédictions.

Le gestionnaire d'inférence du point de terminaison d'inférence asynchrone attend un article comme charge utile d'entrée. Le texte résumé de l'article est la sortie. La sortie est stockée dans la base de données pour analyser les tendances ou être alimentée en aval pour d'autres analyses. Cette analyse en aval tire des informations sur les données qui aident à la recherche.

Nous montrons comment les points de terminaison d'inférence asynchrones vous permettent d'avoir des notifications de simultanéité et d'achèvement définies par l'utilisateur. Nous configurons la mise à l'échelle automatique des instances derrière le point de terminaison pour réduire à zéro lorsque le trafic diminue et remonter à mesure que la file d'attente de demandes se remplit.

Nous utilisons aussi Amazon Cloud Watch des métriques pour surveiller la taille de la file d'attente, le temps de traitement total et les appels traités.

Dans le diagramme suivant, nous montrons les étapes impliquées lors de l'exécution de l'inférence à l'aide d'un point de terminaison d'inférence asynchrone.

Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

  1. Nos pré-formés PEGASUS Le modèle ML est d'abord hébergé sur le point de terminaison de mise à l'échelle.
  2. L'utilisateur télécharge l'article à résumer dans un compartiment S3 d'entrée.
  3. Le point de terminaison d'inférence asynchrone est appelé à l'aide d'une API.
  4. Une fois l'inférence terminée, le résultat est enregistré dans le compartiment S3 de sortie.
  5. An Service de notification simple d'Amazon Une notification (Amazon SNS) est envoyée à l'utilisateur pour l'informer de la réussite ou de l'échec.

Créer un point de terminaison d'inférence asynchrone

Nous créons le point de terminaison d'inférence asynchrone similaire à un point de terminaison hébergé en temps réel. Les étapes comprennent la création d'un modèle SageMaker, suivie de la configuration du point de terminaison et du déploiement du point de terminaison. La différence entre les deux types de points de terminaison est que la configuration du point de terminaison d'inférence asynchrone contient un AsyncInferenceConfig section. Ici, nous spécifions le chemin de sortie S3 pour les résultats de l'appel du point de terminaison et incluons éventuellement des rubriques SNS pour les notifications de réussite et d'échec. Nous spécifions également le nombre maximal d'appels simultanés par instance, tel que déterminé par le client. Voir le code suivant :

AsyncInferenceConfig={ "OutputConfig": { "S3OutputPath": f"s3://{bucket}/{bucket_prefix}/output", # Optionally specify Amazon SNS topics for notifications "NotificationConfig": { "SuccessTopic": success_topic, "ErrorTopic": error_topic, } }, "ClientConfig": { "MaxConcurrentInvocationsPerInstance": 2 #increase this value up to throughput peak for ideal performance } }

Pour plus d'informations sur l'API permettant de créer une configuration de point de terminaison pour l'inférence asynchrone, consultez Créer un point de terminaison d'inférence asynchrone.

Appeler le point de terminaison d'inférence asynchrone

La capture d'écran suivante montre un bref article que nous utilisons comme charge utile d'entrée :
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Le code suivant charge l'article en tant que input.json fichier vers Amazon S3 :

sm_session.upload_data( input_location, bucket=sm_session.default_bucket(), key_prefix=prefix, extra_args={"ContentType": "text/plain"})

Nous utilisons l'URI Amazon S3 vers le fichier de charge utile d'entrée pour appeler le point de terminaison. L'objet de réponse contient l'emplacement de sortie dans Amazon S3 pour récupérer les résultats une fois terminé :

response = sm_runtime.invoke_endpoint_async(EndpointName=endpoint_name, InputLocation=input_1_s3_location)
output_location = response['OutputLocation']

La capture d'écran suivante montre l'exemple de résultat post récapitulatif :
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Pour plus d'informations sur l'API permettant d'appeler un point de terminaison d'inférence asynchrone, consultez Appeler un point de terminaison d'inférence asynchrone.

Mettre en file d'attente les demandes d'appel avec une simultanéité définie par l'utilisateur

Le point de terminaison d'inférence asynchrone met automatiquement les demandes d'appel en file d'attente. Il s'agit d'une file d'attente entièrement gérée avec diverses métriques de surveillance et ne nécessitant aucune configuration supplémentaire. Il utilise le MaxConcurrentInvocationsPerInstance paramètre dans la configuration de point de terminaison précédente pour traiter les nouvelles demandes de la file d'attente une fois les demandes précédentes terminées. MaxConcurrentInvocationsPerInstance est le nombre maximal de requêtes simultanées envoyées par le client SageMaker au conteneur de modèle. Si aucune valeur n'est fournie, SageMaker choisit une valeur optimale pour vous.

Instances de mise à l'échelle automatique dans le point de terminaison d'inférence asynchrone

Nous définissons la politique de mise à l'échelle automatique avec une capacité minimale de zéro et une capacité maximale de cinq instances. Contrairement aux points de terminaison hébergés en temps réel, les points de terminaison d'inférence asynchrone prennent en charge la réduction des instances à zéro en définissant la capacité minimale sur zéro. Nous utilisons le ApproximateBacklogSizePerInstance métrique pour la configuration de la stratégie de mise à l'échelle avec un arriéré de file d'attente cible de cinq par instance pour augmenter davantage. Nous fixons la période de recharge pour ScaleInCooldown à 120 secondes et le ScaleOutCooldown à 120 secondes. La valeur pour ApproximateBacklogSizePerInstance est choisi en fonction du trafic et de votre sensibilité à la vitesse de mise à l'échelle. Plus vous évoluez rapidement, moins vous encourez de coûts, mais plus vous devrez probablement augmenter à nouveau lorsque de nouvelles demandes arrivent. Plus vous évoluez lentement, plus vous encourez de coûts, mais vous êtes moins susceptible une demande arrive lorsque vous êtes sous-dimensionné.

client = boto3.client('application-autoscaling') # Common class representing Application Auto Scaling for SageMaker amongst other services resource_id='endpoint/' + endpoint_name + '/variant/' + 'variant1' # This is the format in which application autoscaling references the endpoint response = client.register_scalable_target(
ServiceNamespace='sagemaker', #
ResourceId=resource_id,
ScalableDimension='sagemaker:variant:DesiredInstanceCount',
MinCapacity=0,
MaxCapacity=5
) response = client.put_scaling_policy(
PolicyName='Invocations-ScalingPolicy',
ServiceNamespace='sagemaker', # The namespace of the AWS service that provides the resource.
ResourceId=resource_id, # Endpoint name
ScalableDimension='sagemaker:variant:DesiredInstanceCount', # SageMaker supports only Instance Count
PolicyType='TargetTrackingScaling', # 'StepScaling'|'TargetTrackingScaling'
TargetTrackingScalingPolicyConfiguration={ 'TargetValue': 5.0, # The target value for the metric. 'CustomizedMetricSpecification': { 'MetricName': 'ApproximateBacklogSizePerInstance', 'Namespace': 'AWS/SageMaker', 'Dimensions': [{'Name': 'EndpointName', 'Value': endpoint_name }], 'Statistic': 'Average',
}, 'ScaleInCooldown': 120, # ScaleInCooldown - The amount of time, in seconds, after a scale-in activity completes before another scale in activity can start. 'ScaleOutCooldown': 120 # ScaleOutCooldown - The amount of time, in seconds, after a scale-out activity completes before another scale out activity can start.
# 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled.
# If the value is true, scale-in is disabled and the target tracking policy won't remove capacity from the scalable resource.
}
)

Pour plus d'informations sur l'API permettant de mettre à l'échelle automatiquement un point de terminaison d'inférence asynchrone, consultez le Mise à l'échelle automatique d'un point de terminaison d'inférence asynchrone.

Configurer les notifications du point de terminaison d'inférence asynchrone

Nous créons deux rubriques SNS distinctes pour les notifications de réussite et d'erreur pour chaque résultat d'appel de point de terminaison :

sns_client = boto3.client('sns')
response = sns_client.create_topic(Name="Async-Demo-ErrorTopic2")
error_topic = response['TopicArn']
response = sns_client.create_topic(Name="Async-Demo-SuccessTopic2")
success_topic = response['TopicArn']

D'autres options pour les notifications incluent la vérification périodique de la sortie du compartiment S3 ou l'utilisation des notifications de compartiment S3 pour initialiser un AWS Lambda fonction sur le téléchargement de fichier. Les notifications SNS sont incluses dans la section de configuration du point de terminaison comme décrit précédemment.

Pour plus d'informations sur la configuration des notifications à partir d'un point de terminaison d'inférence asynchrone, consultez Vérifier les résultats des prédictions.

Surveiller le point de terminaison d'inférence asynchrone

Nous surveillons le point de terminaison d'inférence asynchrone avec des métriques CloudWatch supplémentaires intégrées spécifiques à l'inférence asynchrone. Par exemple, nous surveillons la longueur de la file d'attente dans chaque instance avec ApproximateBacklogSizePerInstance et la longueur totale de la file d'attente avec ApproximateBacklogSize.

Pour une liste complète des mesures, consultez Surveillance des points de terminaison d'inférence asynchrone.

Nous pouvons optimiser la configuration du point de terminaison pour obtenir l'instance la plus rentable avec des performances élevées. Par exemple, nous pouvons utiliser une instance avec Amazon Elastic Inference ou AWS Inferentia. Nous pouvons également augmenter progressivement le niveau de simultanéité jusqu'au pic de débit tout en ajustant d'autres paramètres de serveur modèle et de conteneur.

Graphiques CloudWatch

Nous avons simulé un trafic de 10,000 XNUMX requêtes d'inférence circulant sur une période vers le point de terminaison d'inférence asynchrone activé avec la règle de mise à l'échelle automatique décrite dans la section précédente.

La capture d'écran suivante montre les métriques d'instance avant que les demandes ne commencent à arriver. Nous commençons avec un point de terminaison actif avec aucune instance en cours d'exécution :
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Le graphique suivant montre comment le BacklogSize ainsi que BacklogSizePerInstance les métriques changent lorsque la mise à l'échelle automatique démarre et la charge sur le point de terminaison est partagée par plusieurs instances qui ont été provisionnées dans le cadre du processus de mise à l'échelle automatique.
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Comme illustré dans la capture d'écran suivante, le nombre d'instances a augmenté à mesure que le nombre d'inférences augmentait :
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

La capture d'écran suivante montre comment la mise à l'échelle ramène le point de terminaison à l'état initial de zéro instance en cours d'exécution :
Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Nettoyer

Une fois toutes les demandes terminées, nous pouvons supprimer le point de terminaison similaire à la suppression des points de terminaison hébergés en temps réel. Notez que si nous définissons la capacité minimale des points de terminaison d'inférence asynchrone sur zéro, il n'y a pas de frais d'instance encourus après sa mise à l'échelle jusqu'à zéro.

Si vous avez activé la mise à l'échelle automatique pour votre point de terminaison, assurez-vous de désenregistrer le point de terminaison en tant que cible évolutive avant de supprimer le point de terminaison. Pour ce faire, exécutez le code suivant :

response = client.deregister_scalable_target(ServiceNamespace='sagemaker',ResourceId='resource_id',ScalableDimension='sagemaker:variant:DesiredInstanceCount')

N'oubliez pas de supprimer votre point de terminaison après utilisation car vous serez facturé pour les instances utilisées dans cette démo.

sm_client.delete_endpoint(EndpointName=endpoint_name)

Vous devez également supprimer les objets S3 et les rubriques SNS. Si vous avez créé d'autres ressources AWS à consommer et à agir sur les notifications SNS, vous pouvez également les supprimer.

Conclusion

Dans cet article, nous avons montré comment utiliser la nouvelle capacité d'inférence asynchrone de SageMaker pour traiter une charge utile d'entrée volumineuse typique faisant partie d'une tâche de synthèse. Pour l'inférence, nous avons utilisé un modèle de Hugging Face et l'avons déployé sur un point de terminaison d'inférence asynchrone. Nous avons expliqué les défis courants du trafic en rafale, des temps de traitement de modèle élevés et des charges utiles importantes impliquées dans l'analyse de la recherche. La capacité inhérente du point de terminaison d'inférence asynchrone à gérer les files d'attente internes, les limites de simultanéité prédéfinies, à configurer les notifications de réponse et à réduire automatiquement à zéro nous a aidés à relever ces défis. Le code complet de cet exemple est disponible sur GitHub.

Pour démarrer avec l'inférence asynchrone SageMaker, consultez Inférence asynchrone.


À propos des auteurs

Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Dinesh Kumar Subramani est un architecte de solutions senior au sein de l'équipe UKIR SMB, basée à Édimbourg, en Écosse. Il est spécialisé dans l'intelligence artificielle et l'apprentissage automatique. Dinesh aime travailler avec des clients de tous les secteurs pour les aider à résoudre leurs problèmes avec les services AWS. En dehors du travail, il aime passer du temps avec sa famille, jouer aux échecs et écouter de la musique dans tous les genres.

Améliorez la recherche à forte valeur ajoutée avec Hugging Face et les points de terminaison d'inférence asynchrone Amazon SageMaker PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Raghu Ramesha est un architecte de solutions ML au sein de l'équipe Amazon SageMaker Service. Il se concentre sur l'aide aux clients pour créer, déployer et migrer les charges de travail de production ML vers SageMaker à grande échelle. Il est spécialisé dans les domaines de l'apprentissage automatique, de l'IA et de la vision par ordinateur, et est titulaire d'une maîtrise en informatique de l'UT Dallas. Pendant son temps libre, il aime voyager et photographier.

Horodatage:

Plus de Apprentissage automatique AWS