ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia

Ceci est un article de blog invité co-écrit avec Minghui Yu et Jianzhe Xiao de Bytedance.

ByteDance est une entreprise technologique qui exploite une gamme de plateformes de contenu pour informer, éduquer, divertir et inspirer les gens à travers les langues, les cultures et les géographies. Les utilisateurs font confiance à nos plateformes de contenu et les apprécient en raison des expériences riches, intuitives et sûres qu'elles offrent. Ces expériences sont rendues possibles par notre moteur backend d'apprentissage automatique (ML), avec des modèles ML conçus pour la modération de contenu, la recherche, la recommandation, la publicité et de nouveaux effets visuels.

L'équipe ByteDance AML (Applied Machine Learning) fournit des systèmes ML hautement performants, fiables et évolutifs et des services ML de bout en bout pour les activités de l'entreprise. Nous recherchions des moyens d'optimiser nos systèmes d'inférence ML afin de réduire les coûts, sans augmenter les temps de réponse. Quand AWS a lancé Inférence AWS, une puce d'inférence ML hautes performances spécialement conçue par AWS, nous avons collaboré avec notre équipe de compte AWS pour tester si AWS Inferentia peut répondre à nos objectifs d'optimisation. Nous avons exécuté plusieurs preuves de concept, ce qui a entraîné une réduction des coûts d'inférence jusqu'à 60 % par rapport aux instances EC4 G2dn basées sur GPU T4 et une latence d'inférence jusqu'à 25 % inférieure. Pour réaliser ces économies de coûts et ces améliorations de performances, nous avons décidé de déployer des modèles sur AWS Inferentia Cloud de calcul élastique Amazon (Amazon EC2) Instances Inf1 en production.

Le graphique suivant montre l'amélioration de la latence pour l'un de nos modèles de détection de visage qui était précédemment déployé sur des GPU avec Tensor RT. La latence moyenne a diminué de 20 % (de 50 millisecondes à 40 millisecondes) et la latence p99 a diminué de 25 % (de 200 millisecondes à 150 millisecondes).

Dans cet article, nous expliquons comment nous avons économisé sur les coûts d'inférence tout en réduisant les latences et en augmentant le débit à l'aide d'AWS Inferentia.

À la recherche d'un calcul performant et rentable

L'équipe ByteDance AML se concentre sur la recherche et la mise en œuvre de systèmes ML de pointe et les ressources informatiques hétérogènes dont ils ont besoin. Nous créons des systèmes de formation et d'inférence à grande échelle pour une grande variété de modèles de recommandation, de traitement du langage naturel (TAL) et de vision par ordinateur (CV). Ces modèles sont très complexes et traitent une énorme quantité de données provenant des nombreuses plateformes de contenu exploitées par ByteDance. Le déploiement de ces modèles nécessite des ressources GPU importantes, que ce soit dans le cloud ou sur site. Par conséquent, les coûts de calcul de ces systèmes d'inférence sont assez élevés.

Nous cherchions à réduire ces coûts sans affecter le débit ou la latence. Nous voulions la flexibilité du cloud et un cycle de livraison plus rapide, qui est beaucoup plus court que celui nécessaire pour une configuration sur site. Et même si nous étions ouverts à l'exploration de nouvelles options de ML accéléré, nous voulions également une expérience de développement transparente.

Notre équipe AWS nous a appris que les instances EC2 Inf1 basées sur AWS Inferentia offrent une inférence ML hautes performances au coût par inférence le plus bas dans le cloud. Nous étions curieux de les explorer et les avons trouvés bien adaptés à notre cas d'utilisation, car nous exécutons un apprentissage automatique substantiel sur de grandes quantités de données d'image, d'objet, de parole et de texte. Ils correspondaient parfaitement à nos objectifs, car nous pouvions réaliser d'énormes économies de coûts compte tenu de la complexité de nos modèles et du volume de prévisions quotidiennes. De plus, AWS Inferentia dispose d'une grande quantité de mémoire sur puce, que vous pouvez utiliser pour mettre en cache des modèles volumineux au lieu de les stocker hors puce. Nous avons reconnu que cela peut avoir un impact significatif sur la réduction de la latence d'inférence, car les cœurs de traitement d'AWS Inferentia, appelés NeuronCores, ont un accès à grande vitesse aux modèles qui sont stockés dans la mémoire sur puce et ne sont pas limités par la mémoire hors puce. bande passante.

Au final, après avoir évalué plusieurs options, nous avons retenu les instances EC2 Inf1 pour leur meilleur rapport performance/prix par rapport aux instances G4dn et NVIDIA T4 on premise. Nous nous sommes engagés dans un cycle d'itération continue avec l'équipe AWS pour débloquer les avantages de prix et de performances d'Inf1.

Déploiement de charges de travail d'inférence sur AWS Inferentia

La mise en route d'AWS Inferentia à l'aide du kit SDK AWS Neuron impliquait deux phases : la compilation du code du modèle et le déploiement sur les instances Inf1. Comme c'est souvent le cas lors du déplacement de modèles ML vers une nouvelle infrastructure, nous avons dû faire face à certains défis. Nous avons pu surmonter ces défis grâce à la diligence et au soutien de notre équipe AWS. Dans les sections suivantes, nous partageons plusieurs conseils et observations utiles basés sur notre expérience de déploiement de charges de travail d'inférence sur AWS Inferentia.

Modèle conforme pour OCR

Notre modèle conformateur de reconnaissance optique de caractères (OCR) détecte et lit le texte dans les images. Nous avons travaillé sur plusieurs optimisations pour obtenir des performances élevées (RPS) pour une variété de tailles de lots, tout en maintenant une faible latence. Certaines optimisations clés sont notées ci-dessous :

  • Optimisations du compilateur – Par défaut, Inferentia fonctionne mieux sur les entrées avec une longueur de séquence fixe, ce qui présentait un défi car la longueur des données textuelles n'est pas fixe. Pour surmonter cela, nous avons divisé notre modèle en deux parties : un encodeur et un décodeur. Nous avons compilé ces deux sous-modèles séparément, puis les avons fusionnés en un seul modèle via TorchScript. En exécutant le flux de contrôle de la boucle for sur les processeurs, cette approche a permis la prise en charge de longueurs de séquence variables sur Inferentia.
  • Performances de convolution en profondeur – Nous avons rencontré un goulot d'étranglement DMA dans l'opération de convolution en profondeur, qui est fortement utilisée par notre modèle conformateur. Nous avons travaillé en étroite collaboration avec l'équipe AWS Neuron pour identifier et résoudre le goulot d'étranglement des performances d'accès DMA, ce qui a amélioré les performances de cette opération et amélioré les performances globales de notre modèle OCR.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Nous avons créé deux nouvelles variantes de modèles pour optimiser notre déploiement sur Inferentia :

  • Encodeur/décodeur combiné et déroulé - Au lieu d'utiliser un encodeur et un décodeur compilés indépendamment, nous avons combiné l'encodeur et un décodeur entièrement déroulé en un seul modèle et compilé ce modèle en un seul NEFF. Le déroulement du décodeur permet d'exécuter tout le flux de contrôle du décodeur sur Inferentia sans utiliser aucune opération CPU. Avec cette approche, chaque itération du décodeur utilise exactement la quantité de calcul nécessaire pour ce jeton. Cette approche améliore les performances car nous réduisons considérablement l'excès de calcul qui était auparavant introduit par le remplissage des entrées. De plus, aucun transfert de données d'Inferentia vers le CPU n'est nécessaire entre les itérations du décodeur, ce qui réduit considérablement le temps d'E/S. Cette version du modèle ne prend pas en charge l'arrêt anticipé.
  • Décodeur déroulé partitionné – Semblable au modèle entièrement déroulé combiné, cette variante du modèle déroule plusieurs itérations du décodeur et les compile en une seule exécution (mais n'inclut pas l'encodeur). Par exemple, pour une longueur de séquence maximale de 75, nous pouvons dérouler le décodeur en 3 partitions qui calculent les jetons 1-25, 26-50 et 51-75. En termes d'E/S, cela est également beaucoup plus rapide car nous n'avons pas besoin de transférer la sortie du codeur une fois par itération. Au lieu de cela, les sorties ne sont transférées qu'une seule fois par chaque partition du décodeur. Cette version du modèle prend en charge l'arrêt anticipé, mais uniquement aux limites des partitions. Les limites de partition peuvent être ajustées pour chaque application spécifique afin de garantir que la majorité des requêtes n'exécutent qu'une seule partition.

Pour améliorer encore les performances, nous avons effectué les optimisations suivantes pour réduire l'utilisation de la mémoire ou améliorer l'efficacité de l'accès :

  • Déduplication Tensor et copies réduites – Il s'agit d'une optimisation du compilateur qui réduit considérablement la taille des modèles déroulés et le nombre d'instructions/d'accès à la mémoire en réutilisant les tenseurs pour améliorer l'efficacité de l'espace.
  • Consignes réduites - Il s'agit d'une optimisation du compilateur utilisée avec la version non rembourrée du décodeur pour réduire considérablement le nombre total d'instructions.
  • Déduplication multicœur – Il s'agit d'une optimisation d'exécution qui est une alternative à la déduplication du tenseur. Avec cette option, tous les modèles multicœurs seront beaucoup plus économes en espace.

Modèle ResNet50 pour la classification des images

ResNet-50 est un modèle d'apprentissage en profondeur pré-entraîné pour la classification d'images. Il s'agit d'un réseau de neurones convolutifs (CNN ou ConvNet) qui est le plus souvent appliqué à l'analyse d'images visuelles. Nous avons utilisé les techniques suivantes pour améliorer les performances de ce modèle sur Inferentia :

  • Transformation de modèle – De nombreux modèles de ByteDance sont exportés au format ONNX, qu'Inferentia ne prend actuellement pas en charge de manière native. Pour gérer ces modèles ONNX, l'équipe AWS Neuron a fourni des scripts pour transformer nos modèles du format ONNX en modèles PyTorch, qui peuvent être directement compilés pour Inferentia à l'aide de torch-neuron.
  • Optimisation des performances – Nous avons travaillé en étroite collaboration avec le Neurone AWS équipe pour régler l'heuristique de planification dans le compilateur afin d'optimiser les performances de nos modèles ResNet-50.

Modèle multimodal pour la modération de contenu

Notre modèle d'apprentissage en profondeur multimodal est une combinaison de plusieurs modèles distincts. La taille de ce modèle est relativement importante, ce qui a provoqué des échecs de chargement du modèle sur Inferentia. L'équipe AWS Neuron a résolu ce problème avec succès en utilisant le partage de poids pour réduire l'utilisation de la mémoire de l'appareil. L'équipe Neuron a publié cette fonctionnalité de déduplication du poids dans la bibliothèque Neuron libnrt et a également amélioré les outils Neuron pour des métriques plus précises. La fonctionnalité de déduplication du poids à l'exécution peut être activée en définissant la variable d'environnement suivante avant d'exécuter l'inférence :

NEURON_RT_MULTI_INSTANCE_SHARED_WEIGHTS=1

Le SDK Neuron mis à jour a réduit la consommation globale de mémoire de nos modèles dupliqués, ce qui nous a permis de déployer notre modèle multimodal pour l'inférence multicœur.

Migrer plus de modèles vers AWS Inferentia

Chez ByteDance, nous continuons à déployer des modèles innovants d'apprentissage en profondeur pour offrir des expériences utilisateur agréables à près de 2 milliards d'utilisateurs actifs par mois. Compte tenu de l'échelle massive à laquelle nous opérons, nous recherchons constamment des moyens de réduire les coûts et d'optimiser les performances. Nous continuerons à migrer les modèles vers AWS Inferentia pour bénéficier de ses hautes performances et de sa rentabilité. Nous souhaitons également qu'AWS lance davantage de types d'instances basés sur AWS Inferentia, tels que ceux avec plus de vCPU pour les tâches de prétraitement. À l'avenir, ByteDance espère voir plus d'innovations en matière de silicium d'AWS pour offrir les meilleures performances de prix pour les applications ML.

Si vous souhaitez en savoir plus sur la façon dont AWS Inferentia peut vous aider à réduire les coûts tout en optimisant les performances de vos applications d'inférence, visitez le Instances Amazon EC2 Inf1 page du produit.


À propos des auteurs

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Minghui Yu est chef d'équipe principal d'apprentissage automatique pour l'inférence chez ByteDance. Son domaine d'intérêt est l'accélération de l'informatique IA et le système d'apprentissage automatique. Il s'intéresse beaucoup à l'informatique hétérogène et à l'architecture informatique de l'ère post Moore. Dans ses temps libres, il aime le basket et le tir à l'arc.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Jianzhe Xiao est chef d'équipe d'ingénieur logiciel senior dans l'équipe AML de ByteDance. Son travail actuel consiste à aider l'équipe commerciale à accélérer le processus de déploiement du modèle et à améliorer les performances d'inférence du modèle. En dehors du travail, il aime jouer du piano.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Tian Shi est architecte de solutions senior chez AWS. Son domaine d'intérêt est l'analyse de données, l'apprentissage automatique et le sans serveur. Il se passionne pour aider les clients à concevoir et à créer des solutions fiables et évolutives sur le cloud. Dans ses temps libres, il aime nager et lire.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Jia Dong est responsable des solutions client chez AWS. Elle aime découvrir les services AWS AI/ML et aider les clients à atteindre leurs résultats commerciaux en créant des solutions pour eux. En dehors du travail, Jia aime les voyages, le yoga et les films.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Jonathan Lunt est ingénieur logiciel chez Amazon et se concentre sur le développement de framework ML. Au cours de sa carrière, il a travaillé sur toute la gamme des rôles en science des données, y compris le développement de modèles, le déploiement d'infrastructures et l'optimisation spécifique au matériel.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à AWS Inferentia PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Josué Hannan est ingénieur en apprentissage automatique chez Amazon. Il travaille sur l'optimisation des modèles d'apprentissage en profondeur pour les applications de vision par ordinateur à grande échelle et de traitement du langage naturel.

ByteDance permet d'économiser jusqu'à 60 % sur les coûts d'inférence tout en réduisant la latence et en augmentant le débit grâce à 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