Inférence sans serveur Amazon SageMaker est une option d'inférence spécialement conçue qui vous facilite le déploiement et la mise à l'échelle de modèles d'apprentissage automatique (ML). Il fournit un modèle de paiement à l'utilisation, idéal pour les services où les appels de point de terminaison sont peu fréquents et imprévisibles. Contrairement à un point de terminaison d'hébergement en temps réel, qui s'appuie sur une instance de longue durée, les ressources de calcul des points de terminaison sans serveur sont provisionnées à la demande, éliminant ainsi le besoin de choisir des types d'instance ou de gérer des politiques de mise à l'échelle.
L'architecture de haut niveau suivante illustre le fonctionnement d'un point de terminaison sans serveur. Un client appelle un point de terminaison soutenu par l'infrastructure gérée par AWS.
Cependant, les points de terminaison sans serveur sont sujets à des démarrages à froid de l'ordre de quelques secondes et sont donc plus adaptés aux charges de travail intermittentes ou imprévisibles.
Pour vous aider à déterminer si un point de terminaison sans serveur constitue la bonne option de déploiement du point de vue des coûts et des performances, nous avons développé le Kit d'outils d'analyse comparative d'inférence sans serveur SageMaker, qui teste différentes configurations de points de terminaison et compare la plus optimale à une instance d'hébergement en temps réel comparable.
Dans cet article, nous présentons la boîte à outils et fournissons un aperçu de sa configuration et de ses sorties.
Vue d'ensemble de la solution
Vous pouvez télécharger la boîte à outils et l'installer à partir du GitHub repo. La mise en route est simple : installez simplement la bibliothèque, créez un Modèle SageMaker, et fournissez le nom de votre modèle ainsi qu'un fichier au format de lignes JSON contenant un exemple d'ensemble de paramètres d'appel, y compris le corps de la charge utile et le type de contenu. Une fonction pratique est fournie pour convertir une liste d'exemples d'arguments d'invocation en un fichier de lignes JSON ou un fichier pickle pour les charges utiles binaires telles que des images, de la vidéo ou de l'audio.
Installer la boîte à outils
Installez d'abord la bibliothèque d'analyse comparative dans votre environnement Python à l'aide de pip :
Vous pouvez exécuter le code suivant à partir d'un Amazon SageMakerStudio exemple, Instance de notebook SageMaker, ou toute instance avec accès programmatique à AWS et le approprié Gestion des identités et des accès AWS (IAM). Les autorisations IAM requises sont documentées dans le GitHub repo. Pour obtenir des conseils supplémentaires et des exemples de politiques pour IAM, reportez-vous à Fonctionnement d'Amazon SageMaker avec IAM. Ce code exécute un benchmark avec un ensemble de paramètres par défaut sur un modèle qui attend une entrée CSV avec deux exemples d'enregistrements. C'est une bonne pratique de fournir un ensemble représentatif d'exemples pour analyser les performances du point de terminaison avec différentes charges utiles d'entrée.
De plus, vous pouvez exécuter le test en tant que tâche de traitement SageMaker, ce qui peut constituer une option plus fiable pour les tests de performance à plus long terme avec un grand nombre d'appels. Voir le code suivant :
Notez que cela entraînera des coûts supplémentaires liés à l’exécution d’une instance ml.m5.large SageMaker Processing pendant la durée du test.
Les deux méthodes acceptent un certain nombre de paramètres à configurer, tels qu'une liste de configurations de mémoire à évaluer et le nombre de fois où chaque configuration sera invoquée. Dans la plupart des cas, les options par défaut devraient suffire comme point de départ, mais reportez-vous au GitHub repo pour une liste complète et des descriptions de chaque paramètre.
Configuration d'analyse comparative
Avant d'examiner ce que fait le benchmark et les résultats qu'il produit, il est important de comprendre quelques concepts clés lorsqu'il s'agit de configurer des points de terminaison sans serveur.
Il y a deux options de configuration clés: MemorySizeInMB
ainsi que MaxConcurrency
. MemorySizeInMB
configure la quantité de mémoire allouée à l'instance et peut être de 1024 2048 Mo, 3072 4096 Mo, 5120 6144 Mo, XNUMX XNUMX Mo, XNUMX XNUMX Mo ou XNUMX XNUMX Mo. Le nombre de processeurs virtuels évolue également proportionnellement à la quantité de mémoire allouée. Le MaxConcurrency
Le paramètre ajuste le nombre de requêtes simultanées qu’un point de terminaison est capable de traiter. Avec un MaxConcurrency
de 1, un point de terminaison sans serveur ne peut traiter qu'une seule requête à la fois.
Pour résumer, le MemorySizeInMB
Le paramètre fournit un mécanisme d'évolutivité verticale, vous permettant d'ajuster les ressources de mémoire et de calcul pour servir des modèles plus grands, tandis que MaxConcurrency
fournit un mécanisme d'évolutivité horizontale, permettant à votre point de terminaison de traiter davantage de requêtes simultanées.
Le coût d'exploitation d'un point de terminaison est largement déterminé par la taille de la mémoire, et il n'y a aucun coût associé à l'augmentation de la simultanéité maximale. Cependant, il existe une limite de compte par région pour une simultanéité maximale sur tous les points de terminaison. Faire référence à Points de terminaison et quotas SageMaker pour les dernières limites.
Résultats de l'analyse comparative
Compte tenu de cela, l’objectif de l’analyse comparative d’un point de terminaison sans serveur est de déterminer le paramètre de taille de mémoire le plus rentable et le plus fiable, ainsi que la simultanéité maximale minimale capable de gérer vos modèles de trafic attendus.
Par défaut, l'outil exécute deux benchmarks. Le premier est un test de stabilité, qui déploie un point de terminaison pour chacune des configurations de mémoire spécifiées et appelle chaque point de terminaison avec les exemples de charges utiles fournis. L’objectif de ce test est de déterminer le paramètre MemorySizeInMB le plus efficace et le plus stable. Le test de référence capture les latences d'appel et calcule le coût attendu par appel pour chaque point de terminaison. Il compare ensuite le coût à celui d’une instance d’hébergement en temps réel similaire.
Une fois l'analyse comparative terminée, l'outil génère plusieurs sorties dans les délais spécifiés. result_save_path
répertoire avec la structure de répertoire suivante :
Les benchmarking_report
Le répertoire contient un rapport consolidé avec tous les résultats récapitulatifs que nous décrivons dans cet article. Des répertoires supplémentaires contiennent des sorties brutes et intermédiaires que vous pouvez utiliser pour des analyses supplémentaires. Se référer au GitHub repo pour une description plus détaillée de chaque artefact de sortie.
Examinons quelques résultats d'analyse comparative réels pour un point de terminaison servant un modèle TensorFlow MobileNetV2 de vision par ordinateur. Si vous souhaitez reproduire cet exemple, reportez-vous au exemples de cahiers répertoire dans le dépôt GitHub.
Le premier résultat du rapport consolidé est un tableau récapitulatif qui fournit les mesures de latence minimale, moyenne, moyenne et maximale pour chaque MemorySizeInMB
configuration réussie de la taille de la mémoire. Comme le montre le tableau suivant, la latence d'appel moyenne (invocation_latency_mean
) a continué de s'améliorer à mesure que la configuration de la mémoire a augmenté à 3072 XNUMX Mo, mais a cessé de s'améliorer par la suite.
En plus des statistiques descriptives de haut niveau, un graphique est fourni montrant la distribution de la latence telle qu'observée par le client pour chacune des configurations de mémoire. Encore une fois, nous pouvons observer que la configuration de 1024 2048 Mo n'est pas aussi performante que les autres options, mais il n'y a pas de différence substantielle de performances dans les configurations de XNUMX XNUMX et supérieures.
Amazon Cloud Watch les métriques associées à chaque configuration de point de terminaison sont également fournies. Une mesure clé ici est ModelSetupTime
, qui mesure le temps nécessaire au chargement du modèle lorsque le point de terminaison a été invoqué à froid. La métrique peut ne pas toujours apparaître dans le rapport car un point de terminaison est lancé à chaud. UN cold_start_delay
Le paramètre est disponible pour spécifier le nombre de secondes de veille avant de démarrer le test sur un point de terminaison déployé. La définition de ce paramètre sur un nombre plus élevé, tel que 600 secondes, devrait augmenter la probabilité d'un appel à l'état froid et améliorer les chances de capturer cette métrique. De plus, cette métrique est beaucoup plus susceptible d'être capturée avec le test d'invocation simultanée, dont nous parlerons plus loin dans cette section.
Le tableau suivant présente les métriques capturées par CloudWatch pour chaque configuration de mémoire.
Le graphique suivant montre les compromis en termes de performances et de coûts de différentes configurations de mémoire. Une ligne indique le coût estimé de l’appel du point de terminaison 1 million de fois, et l’autre indique la latence moyenne de réponse. Ces mesures peuvent vous aider à décider quelle configuration de point de terminaison est la plus rentable. Dans cet exemple, nous constatons que la latence moyenne s'aplatit après 2048 2048 Mo, alors que le coût continue d'augmenter, ce qui indique que pour ce modèle, une configuration de taille mémoire de XNUMX XNUMX serait la plus optimale.
Le résultat final du test de coût et de stabilité est une configuration de mémoire recommandée, ainsi qu'un tableau comparant le coût d'exploitation d'un point de terminaison sans serveur à celui d'une instance d'hébergement SageMaker comparable. Sur la base des données collectées, l'outil a déterminé que la configuration de 2048 3072 Mo est la plus optimale pour ce modèle. Bien que la configuration 10 offre une latence supérieure d'environ 30 millisecondes, cela entraîne une augmentation du coût de 4.55 %, passant de 5.95 $ à 1 $ pour 88.72 million de requêtes. De plus, le résultat montre qu'un point de terminaison sans serveur permettrait d'économiser jusqu'à 1 % par rapport à une instance d'hébergement en temps réel comparable lorsqu'il y a moins d'un million de demandes d'appel mensuelles, et qu'il atteindrait le seuil de rentabilité avec un point de terminaison en temps réel après 8.5 millions de demandes.
Le deuxième type de benchmark est facultatif et teste divers MaxConcurency
paramètres sous différents modèles de trafic. Ce benchmark est généralement exécuté en utilisant la méthode optimale MemorySizeInMB
configuration à partir du test de stabilité. Les deux paramètres clés de ce benchmark sont une liste de MaxConcurency
paramètres à tester ainsi qu'une liste de multiplicateurs de clients, qui déterminent le nombre de clients simultanés simulés avec lesquels le point de terminaison est testé.
Par exemple, en définissant le concurrency_benchmark_max_conc parameter
à [4, 8] et concurrency_num_clients_multiplier
vers [1, 1.5, 2], deux points de terminaison sont lancés : un avec MaxConcurency
de 4 et l'autre 8. Chaque point final est ensuite comparé avec un (MaxConcurency
x multiplicateur) nombre de clients simultanés simulés, ce qui pour le point de terminaison avec une concurrence de 4 se traduit par des tests de charge avec 4, 6 et 8 clients simultanés.
Le premier résultat de ce test est un tableau qui montre les mesures de latence, les exceptions de limitation et les mesures de transactions par seconde (TPS) associées à chaque MaxConcurrency
configuration avec différents nombres de clients simultanés. Ces mesures aident à déterminer les mesures appropriées MaxConcurrency
paramètre pour gérer la charge de trafic attendue. Dans le tableau suivant, nous pouvons voir qu'un point de terminaison configuré avec une concurrence maximale de 8 était capable de gérer jusqu'à 16 clients simultanés avec seulement deux exceptions de limitation sur 2,500 24 appels effectués à une moyenne de XNUMX transactions par seconde.
L'ensemble de résultats suivant fournit un graphique pour chacun MaxConcurrency
paramètre montrant la répartition de la latence sous différentes charges. Dans cet exemple, nous pouvons voir qu'un point de terminaison avec un MaxConcurrency
le paramètre 4 a permis de traiter avec succès toutes les demandes avec jusqu'à 8 clients simultanés avec une augmentation minimale de la latence d'appel.
Le résultat final fournit un tableau avec les métriques CloudWatch pour chaque MaxConcurrency
configuration. Contrairement au tableau précédent montrant la répartition de la latence pour chaque configuration mémoire, qui peut ne pas toujours afficher le démarrage à froid ModelSetupTime
métrique, cette métrique est beaucoup plus susceptible d'apparaître dans ce tableau en raison du plus grand nombre de demandes d'appel et d'un plus grand nombre de requêtes d'appel. MaxConcurrency
.
Conclusion
Dans cet article, nous avons présenté la boîte à outils d'analyse comparative d'inférence sans serveur SageMaker et fourni un aperçu de sa configuration et de ses sorties. L'outil peut vous aider à prendre une décision plus éclairée en ce qui concerne l'inférence sans serveur en testant différentes configurations avec des modèles de trafic réalistes. Essayez la boîte à outils d'analyse comparative avec vos propres modèles pour constater par vous-même les performances et les économies auxquelles vous pouvez vous attendre en déployant un point de terminaison sans serveur. Veuillez vous référer au GitHub repo pour une documentation supplémentaire et des exemples de cahiers.
Ressources additionnelles
À propos des auteurs
Simon Zamarin est un architecte de solutions AI / ML dont l'objectif principal est d'aider les clients à extraire de la valeur de leurs actifs de données. Dans ses temps libres, Simon aime passer du temps avec sa famille, lire de la science-fiction et travailler sur divers projets de bricolage.
Dhawal Patel est architecte principal en apprentissage machine chez AWS. Il a travaillé avec des organisations allant des grandes entreprises aux startups de taille moyenne sur des problèmes liés à l'informatique distribuée et à l'intelligence artificielle. Il se concentre sur l'apprentissage en profondeur, y compris les domaines de la PNL et de la vision par ordinateur. Il aide les clients à obtenir une inférence de modèle haute performance sur SageMaker.
Rishabh Ray Chaudhury est chef de produit senior chez Amazon SageMaker, se concentrant sur l'inférence d'apprentissage automatique. Il est passionné par l'innovation et la création de nouvelles expériences pour les clients de machine learning sur AWS afin de les aider à faire évoluer leurs charges de travail. Dans ses temps libres, il aime voyager et cuisiner. Vous pouvez le retrouver sur LinkedIn.
- Avancé (300)
- AI
- art de l'IA
- générateur d'art ai
- robot IA
- Amazon Sage Maker
- Boîte à outils d'analyse comparative d'inférence sans serveur Amazon SageMaker
- intelligence artificielle
- certification en intelligence artificielle
- intelligence artificielle en banque
- robot d'intelligence artificielle
- robots d'intelligence artificielle
- logiciel d'intelligence artificielle
- Apprentissage automatique AWS
- blockchain
- conférence blockchain ai
- cognitif
- intelligence artificielle conversationnelle
- crypto conférence ai
- de dall
- l'apprentissage en profondeur
- google ai
- machine learning
- Platon
- platon ai
- Intelligence des données Platon
- Jeu de Platon
- PlatonDonnées
- jeu de platogamie
- échelle ai
- syntaxe
- zéphyrnet