Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia

Le moteur de recherche de produits d'Amazon indexe des milliards de produits, sert des centaines de millions de clients dans le monde et est l'un des services les plus utilisés au monde. L'équipe Amazon Search développe une technologie d'apprentissage automatique (ML) qui alimente le - moteur de recherche et aide les clients à effectuer des recherches sans effort. Pour offrir une excellente expérience client et opérer à l'échelle massive requise par le - moteur de recherche, cette équipe est toujours à la recherche de moyens de créer des systèmes plus rentables avec des exigences de latence et de débit en temps réel. L'équipe explore en permanence le matériel et les compilateurs optimisés pour l'apprentissage en profondeur afin d'accélérer la formation et l'inférence des modèles, tout en réduisant les coûts opérationnels à tous les niveaux.

Dans cet article, nous décrivons comment Amazon Search utilise Inférence AWS, un accélérateur hautes performances conçu par AWS pour accélérer les charges de travail d'inférence d'apprentissage en profondeur. L'équipe exécute l'inférence ML à faible latence avec des modèles NLP basés sur Transformer sur AWS Inferentia Cloud de calcul élastique Amazon (Amazon EC2) Inf1 et permet d'économiser jusqu'à 85 % sur les coûts d'infrastructure tout en maintenant un débit et des performances de latence élevés.

Apprentissage en profondeur pour la prédiction des intentions de duplication et de requête

La recherche sur Amazon Marketplace est un problème multitâche et multimodal, traitant de plusieurs entrées telles que les ASIN (numéro d'identification standard Amazon, un numéro alphanumérique à 10 chiffres qui identifie de manière unique les produits), les images de produits, les descriptions textuelles et les requêtes. Pour créer une expérience utilisateur sur mesure, les prédictions de nombreux modèles sont utilisées pour différents aspects de la recherche. C'est un défi car le système de recherche a des milliers de modèles avec des dizaines de milliers de transactions par seconde (TPS) en cas de pic de charge. Nous nous concentrons sur deux composantes de cette expérience :

  • Prédictions en double perçues par le client – Pour afficher la liste de produits la plus pertinente qui correspond à la requête d'un utilisateur, il est important d'identifier les produits que les clients ont du mal à différencier.
  • Prédiction d'intention de requête – Pour adapter la page de recherche et la mise en page du produit afin de mieux répondre à ce que le client recherche, il est important de prévoir l'intention et le type de la requête de l'utilisateur (par exemple, une requête liée aux médias, une requête d'aide et d'autres types de requêtes)

Ces deux prédictions sont faites à l'aide d'architectures de modèles Transformer, à savoir des modèles basés sur BERT. En fait, les deux partagent le même modèle basé sur BERT comme base, et chacun empile une tête de classification/régression au-dessus de cette colonne vertébrale.

La prédiction dupliquée prend en compte diverses caractéristiques textuelles pour une paire de produits évalués en tant qu'entrées (telles que le type de produit, le titre, la description, etc.) et est calculée périodiquement pour les grands ensembles de données. Ce modèle est formé de bout en bout de manière multitâche. Tâches de traitement Amazon SageMaker sont utilisés pour exécuter périodiquement ces charges de travail par lots afin d'automatiser leur lancement et de ne payer que le temps de traitement utilisé. Pour ce cas d'utilisation de charge de travail par lots, l'exigence de débit d'inférence était de 8,800 XNUMX TPS au total.

La prédiction d'intention prend la requête textuelle de l'utilisateur en entrée et est nécessaire en temps réel pour servir dynamiquement le trafic quotidien et améliorer l'expérience utilisateur sur Amazon Marketplace. Le modèle est entraîné sur un objectif de classification multi-classes. Ce modèle est ensuite déployé sur Service de conteneur élastique Amazon (Amazon ECS), qui permet une mise à l'échelle automatique rapide et définition et gestion faciles du déploiement. Comme il s'agit d'un cas d'utilisation en temps réel, la latence du P99 devait être inférieure à 10 millisecondes pour garantir une expérience utilisateur agréable.

AWS Inferentia et le kit SDK AWS Neuron

Instances EC2 Inf1 sont alimentés par AWS Inferentia, le premier accélérateur ML conçu par AWS pour accélérer les charges de travail d'inférence d'apprentissage en profondeur. Les instances Inf1 offrent un débit jusqu'à 2.3 fois supérieur et un coût par inférence jusqu'à 70 % inférieur à celui des instances EC2 basées sur GPU comparables. Vous pouvez continuer à former vos modèles à l'aide de la structure de votre choix (PyTorch, TensorFlow, MXNet), puis les déployer facilement sur AWS Inferentia pour bénéficier des optimisations de performances intégrées. Vous pouvez déployer un large éventail de types de modèles à l'aide d'instances Inf1, depuis la reconnaissance d'images, la détection d'objets, le traitement du langage naturel (NLP) et les modèles de recommandation modernes.

Neurone AWS est un kit de développement logiciel (SDK) composé d'un compilateur, d'outils d'exécution et de profilage qui optimisent les performances d'inférence ML des instances EC2 Inf1. Neuron est nativement intégré aux frameworks ML populaires tels que TensorFlow et PyTorch. Par conséquent, vous pouvez déployer des modèles d'apprentissage en profondeur sur AWS Inferentia avec les mêmes API familières fournies par le framework de votre choix, et bénéficier de l'amélioration des performances et du coût par inférence le plus bas dans le cloud.

Depuis son lancement, le SDK Neuron n'a cessé d'augmenter l'étendue des modèles qu'il prend en charge tout en continuant d'améliorer les performances et de réduire les coûts d'inférence. Cela inclut les modèles NLP (BERT), les modèles de classification d'images (ResNet, VGG) et les modèles de détection d'objets (OpenPose et SSD).

Déployez sur des instances Inf1 pour une faible latence, un débit élevé et des économies de coûts

L'équipe Amazon Search souhaitait réduire les coûts tout en répondant à son exigence de débit élevé sur la prédiction de duplication et à l'exigence de faible latence sur la prédiction d'intention de requête. Ils ont choisi de déployer sur des instances Inf1 basées sur AWS Inferentia et ont non seulement satisfait aux exigences de hautes performances, mais ont également économisé jusqu'à 85 % sur les coûts d'inférence.

Prédictions en double perçues par le client

Avant l'utilisation d'Inf1, un Amazon DME cluster s'exécutait à l'aide d'instances basées sur le processeur. Sans compter sur l'accélération matérielle, un grand nombre d'instances étaient nécessaires pour répondre à l'exigence de débit élevé de 8,800 1.6 transactions totales par seconde. L'équipe est passée à des instances inf4xlarge, chacune avec 16 accélérateurs AWS Inferentia et 4 NeuronCores (16 cœurs par puce AWS Inferentia). Ils ont tracé le modèle basé sur Transformer pour un seul NeuronCore et chargé un mode par NeuronCore pour maximiser le débit. En tirant parti des 85 NeuronCores disponibles, ils ont réduit les coûts d'inférence de 2 % (sur la base de la tarification à la demande publique actuelle d'Amazon ECXNUMX).

Prédiction d'intention de requête

Compte tenu de l'exigence de latence P99 de 10 millisecondes ou moins, l'équipe a chargé le modèle sur chaque NeuronCore disponible sur les instances inf1.6xlarge. Vous pouvez facilement le faire avec PyTorch Neuron en utilisant le torche.neuron.DataParallel API. Avec le déploiement Inf1, la latence du modèle était de 3 millisecondes, la latence de bout en bout était d'environ 10 millisecondes et le débit maximal à la charge maximale atteignait 16,000 XNUMX TPS.

Premiers pas avec un exemple de code de compilation et de déploiement

Voici un exemple de code pour vous aider à démarrer sur les instances Inf1 et à réaliser les avantages en termes de performances et de coûts comme l'équipe Amazon Search. Nous montrons comment compiler et effectuer une inférence avec un modèle PyTorch, en utilisant Neurone PyTorch.

Dans un premier temps, le modèle est compilé avec torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Pour la liste complète des arguments possibles au trace méthode, reportez-vous à API Python de trace PyTorch-Neuron. Comme vous pouvez le voir, arguments du compilateur peut être transmis au torch.neuron API directement. Tous les opérateurs FP32 sont convertis en BF16 with --fp32-cast=all, offrant les meilleures performances tout en préservant la plage dynamique. Plus d'options de moulage sont disponibles pour vous permettre de contrôler les performances pour modéliser le compromis de précision. Les modèles utilisés pour les deux cas d'utilisation ont été compilés pour un seul NeuronCore (pas canalisation).

Nous chargeons ensuite le modèle sur Inferentia avec torch.jit.load, et l'utiliser pour la prédiction. La Temps d'exécution des neurones charge automatiquement le modèle dans NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Conclusion

L'équipe Amazon Search a pu réduire ses coûts d'inférence de 85 % à l'aide d'instances Inf1 basées sur AWS Inferentia, en cas de trafic important et d'exigences de performances élevées. AWS Inferentia et le SDK Neuron ont fourni à l'équipe la flexibilité nécessaire pour optimiser le processus de déploiement indépendamment de la formation, et ont proposé une courbe d'apprentissage peu profonde via des outils complets et des API de framework familiers.

Vous pouvez débloquer les avantages en termes de performances et de coûts en vous familiarisant avec l'exemple de code fourni dans cet article. Découvrez également de bout en bout tutoriels pour exécuter des modèles de ML sur Inferentia avec PyTorch ainsi que TensorFlow.


À propos des auteurs

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Joao Moura est architecte de solutions spécialisées en IA/ML chez Amazon Web Services. Il se concentre principalement sur les cas d'utilisation du NLP et aide les clients à optimiser la formation et le déploiement de modèles d'apprentissage en profondeur. Il est également un partisan actif du matériel spécialisé ML et des solutions ML low-code.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Weiqi Zhang est responsable de l'ingénierie logicielle chez Search M5, où il travaille à la production de modèles à grande échelle pour les applications d'apprentissage automatique d'Amazon. Ses intérêts incluent la recherche d'informations et l'infrastructure d'apprentissage automatique.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Jason Carlson est un ingénieur logiciel pour le développement de pipelines d'apprentissage automatique afin de réduire le nombre d'impressions de recherche volées en raison de doublons perçus par les clients. Il travaille principalement avec Apache Spark, AWS et PyTorch pour aider à déployer et à alimenter/traiter les données des modèles ML. Pendant son temps libre, il aime lire et courir.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Shaohui Xi est un SDE au sein de l'équipe Search Query Understanding Infra. Il dirige les efforts visant à créer des services d'inférence en ligne d'apprentissage en profondeur à grande échelle avec une faible latence et une haute disponibilité. En dehors du travail, il aime skier et découvrir de bons petits plats.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Zhuoqi Zhang est ingénieur en développement logiciel au sein de l'équipe Search Query Understanding Infra. Il travaille à la création de frameworks de service de modèles pour améliorer la latence et le débit des services d'inférence en ligne d'apprentissage en profondeur. En dehors du travail, il aime jouer au basket, faire du snowboard et conduire.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Haowei Soleil est ingénieur logiciel au sein de l'équipe Search Query Understanding Infra. Elle travaille sur la conception d'API et d'infrastructures prenant en charge les services d'inférence en ligne d'apprentissage en profondeur. Ses intérêts incluent la conception d'API de service, la configuration de l'infrastructure et la maintenance. En dehors du travail, elle aime courir, faire de la randonnée et voyager.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Jaspreet Singh est un scientifique appliqué au sein de l'équipe M5, où il travaille sur des modèles de base à grande échelle pour améliorer l'expérience d'achat des clients. Ses intérêts de recherche comprennent l'apprentissage multi-tâches, la recherche d'information et l'apprentissage de la représentation.

Comment Amazon Search a réduit les coûts d'inférence ML de 85 % avec AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Shruti Koparkar est Senior Product Marketing Manager chez AWS. Elle aide les clients à explorer, évaluer et adopter l'infrastructure informatique accélérée EC2 pour leurs besoins d'apprentissage automatique.

Horodatage:

Plus de Apprentissage automatique AWS