Un Nouveau Système pour Servir de Gros Modèles de Deep Learning
Combiner le parallélisme de modèle et l'échange de mémoire pour servir efficacement de gros modèles.
― 7 min lire
Table des matières
Aujourd'hui, plein de modèles avancés d'apprentissage profond sont utilisés dans des domaines comme la compréhension des langues et des images. Ces modèles ont souvent des milliards de paramètres, ce qui les rend assez grands et complexes. Pour gérer plusieurs modèles efficacement, on a besoin d'un bon système capable de gérer les besoins en mémoire de ces modèles, surtout quand on utilise des clusters GPU.
Le défi des grands modèles
Quand les organisations veulent utiliser de grands modèles d'apprentissage profond, elles gardent généralement tous les paramètres d'un modèle dans la mémoire d'un GPU. Ça permet au GPU de traiter rapidement. Mais, si un modèle est trop grand pour tenir dans un seul GPU, il faut trouver un moyen de diviser le modèle sur plusieurs GPU. Ça peut compliquer les choses et coûter cher car les organisations doivent peut-être acheter plus de GPU pour gérer tous leurs modèles.
En plus, avoir plein de GPU peut mener à une sous-utilisation, ce qui signifie que certains matériels ne sont pas bien utilisés quand certains modèles ne reçoivent pas beaucoup de Demandes. Ça arrive souvent quand les taux de demande sont inégaux ou en pics, ce qui est assez commun dans des scénarios réels.
Solutions actuelles
Certains systèmes existants utilisent le Parallélisme de modèles pour servir de grands modèles sur plusieurs GPU. Par exemple, certaines approches divisent les paramètres du modèle pour qu'ils puissent être gérés par différents GPU. Ça peut rendre le service de plusieurs grands modèles beaucoup plus facile. D'autres systèmes permettent d'échanger de la mémoire, en déplaçant des modèles entre la mémoire CPU et GPU pour faire face aux limites de mémoire GPU.
Cependant, aucun système n'a réussi à combiner à la fois le parallélisme de modèles et l'Échange de mémoire pour maximiser l'efficacité et l'utilisation des ressources.
Présentation d'un nouveau système
On propose un nouveau système de service qui combine le parallélisme de modèles et l'échange de mémoire. Ce système peut servir plusieurs grands modèles, même si leur taille totale dépasse ce que le cluster GPU peut gérer. Il vise à minimiser les délais dans le traitement des demandes tout en s'assurant que les ressources sont utilisées efficacement.
Le système utilise un modèle moteur-travailleur. L'engin reçoit les demandes, les gère et les envoie aux travailleurs appropriés. Chaque travailleur est connecté à un GPU et ils sont organisés pour gérer des parties du modèle. Quand une demande arrive, l'engin la met en attente et l'envoie aux travailleurs pour traitement.
Gestion efficace des demandes
Quand un modèle est nécessaire, l'engin doit s'assurer que les paramètres du modèle sont chargés dans la mémoire GPU. Un défi se présente quand l'engin doit gérer le chargement et le déchargement des modèles en même temps, car il doit respecter l'ordre et les dépendances de chargement.
Pour résoudre ça, notre système utilise une approche Asynchrone pour gérer le chargement. Ça veut dire que quand un travailleur commence à charger des paramètres pour un modèle, il n'a pas besoin d'attendre que ce chargement soit terminé avant de passer à la tâche suivante. Ça permet à différentes étapes de travailleurs de charger différentes parties du modèle en même temps.
En plus, on utilise une méthode appelée mémoire fixe. Ça garantit que les données sont prêtes pour un transfert rapide entre la CPU et le GPU sans retards inutiles. En ayant les paramètres d'un modèle prêts et en évitant des mouvements de données supplémentaires, on peut traiter les demandes plus rapidement.
Tester notre système
On doit voir à quel point notre nouveau système fonctionne sous différentes conditions. D'abord, on vérifie la rapidité avec laquelle le système peut échanger des modèles dans et hors de la mémoire GPU. On effectue des tests en forçant le système à réaliser des échanges de modèles et à mesurer combien de temps chaque échange prend. On s'attend à ce qu'en utilisant plus de GPU, le temps d'échange de modèles diminue parce que la charge de travail est partagée.
Nos résultats montrent qu'en utilisant plus de GPU, le temps d'échange diminue. Cependant, il y a des limites. Le temps d'échange ne diminue pas autant qu'on le souhaiterait, et c'est en partie à cause de la manière dont les données sont transférées. Même si la taille des données envoyées est plus petite, le temps pris pour chaque message individuel reste le même.
Ensuite, on teste à quel point le système peut gérer des demandes en pics. On simule des scénarios réels où les taux de demandes sont inégaux, envoyant des demandes à plusieurs modèles à la fois. En variant les modèles de demandes, on vérifie comment le système fait face aux changements de charge, surtout quand certains modèles reçoivent beaucoup plus de demandes que d'autres.
Nos tests révèlent quelques schémas clés. Quand les demandes sont en pics, le système fonctionne mieux parce qu'il est probable que les demandes iront plusieurs fois au même modèle. Ça réduit le besoin de swaps constants de modèles et aide à maintenir des temps de réponse plus rapides.
Cas d'utilisation pratiques
La capacité de servir plusieurs grands modèles efficacement est cruciale pour de nombreuses organisations. Par exemple, les entreprises qui dépendent des algorithmes de traitement de langue et d'image peuvent bénéficier de la possibilité de servir plusieurs tâches distinctes à la fois sans avoir besoin de matériel extensif.
Quand les ressources sont limitées, notre système permet aux organisations de servir efficacement de nombreux modèles de pointe en même temps. En utilisant à la fois le parallélisme de modèles et l'échange de mémoire, les organisations peuvent répondre aux besoins des utilisateurs sans trop dépenser en matériel.
À l'avenir
Bien que notre système montre des promesses, il y a des domaines à améliorer. Une optimisation possible est de charger ou décharger des modèles en fonction de modèles prédits. Dans de nombreux scénarios réels, les demandes peuvent suivre des tendances prévisibles. Par exemple, le même modèle pourrait être nécessaire plusieurs fois de suite. En étant plus proactif dans la gestion du chargement et du déchargement des modèles, le système peut encore réduire les temps d'attente pour les utilisateurs.
Un autre défi réside dans le fait de servir des modèles qui diffèrent en taille ou en configuration. En ce moment, notre système suppose que tous les modèles sont similaires en taille, mais en réalité, ce n'est souvent pas le cas. Ajuster notre approche pour gérer des modèles de tailles variées rendra le système encore plus polyvalent.
Conclusion
Pour résumer, servir efficacement de grands modèles d'apprentissage profond est un gros défi, mais notre nouveau système offre une solution solide en combinant le parallélisme de modèles et l'échange de mémoire. Grâce à une conception et à des tests attentifs, on a prouvé que notre approche peut gérer efficacement les demandes, réduire la latence et optimiser l'utilisation des ressources. À mesure que les organisations continuent d'adopter des modèles avancés, des solutions comme la nôtre joueront un rôle clé pour s'assurer qu'elles peuvent répondre à leurs besoins efficacement et économiquement.
Titre: Computron: Serving Distributed Deep Learning Models with Model Parallel Swapping
Résumé: Many of the most performant deep learning models today in fields like language and image understanding are fine-tuned models that contain billions of parameters. In anticipation of workloads that involve serving many of such large models to handle different tasks, we develop Computron, a system that uses memory swapping to serve multiple distributed models on a shared GPU cluster. Computron implements a model parallel swapping design that takes advantage of the aggregate CPU-GPU link bandwidth of a cluster to speed up model parameter transfers. This design makes swapping large models feasible and can improve resource utilization. We demonstrate that Computron successfully parallelizes model swapping on multiple GPUs, and we test it on randomized workloads to show how it can tolerate real world variability factors like burstiness and skewed request rates. Computron's source code is available at https://github.com/dlzou/computron.
Auteurs: Daniel Zou, Xinchen Jin, Xueyang Yu, Hao Zhang, James Demmel
Dernière mise à jour: 2023-06-23 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2306.13835
Source PDF: https://arxiv.org/pdf/2306.13835
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.