user_picture

Yannis Bendi-Ouis

Doctorant en Intelligence Artificielle

Inria de Bordeaux

Déploiement de modèles de langage de grande taille open-source : une analyse des performances

Article scientifique original disponible sur arXiv (en anglais)

Depuis la sortie de ChatGPT [5] en novembre 2022, les modèles de langage de grande taille (LLMs) [1] ont connu un succès considérable, y compris dans la communauté open-source, avec de nombreux modèles à poids ouverts disponibles. Cependant, les exigences pour déployer un tel service sont souvent inconnues et difficiles à évaluer à l'avance. Pour faciliter ce processus, nous avons mené de nombreux tests au Centre Inria de l'Université de Bordeaux. Dans cet article, nous proposons une comparaison des performances de plusieurs modèles de différentes tailles (principalement Mistral [2][3] et LLaMa [4]) en fonction des GPU disponibles, en utilisant vLLM [8], une bibliothèque Python conçue pour optimiser l'inférence de ces modèles. Nos résultats fournissent des informations précieuses pour les groupes privés et publics souhaitant déployer des LLMs, leur permettant d'évaluer les performances de différents modèles en fonction de leur matériel disponible. Cette étude contribue donc à faciliter l'adoption et l'utilisation de ces grands modèles de langage dans divers domaines d'application.

Introduction

Suite à la sortie de ChatGPT par OpenAI en novembre 2022 [5], les modèles de langage de grande taille (LLMs) [1] ont suscité un grand intérêt dans le secteur privé, avec de nombreuses entreprises cherchant à offrir des services basés sur ces modèles. Cependant, l'entraînement et l'inférence de tels modèles restent inaccessibles au grand public, nécessitant une puissance de calcul considérable et des données de haute qualité. Par exemple, Meta AI a acquis 350 000 GPU NVIDIA H100 en janvier 2024, pour un coût estimé à 9 milliards de dollars, spécifiquement pour l'entraînement des LLMs. Leur entraînement de LLaMa-3 a été réalisé sur $14*10^{12}$ jetons.

Certaines entreprises pionnières ont rapidement réalisé qu'elles pouvaient bénéficier d'un monopole sur cette avancée technologique, leur conférant un pouvoir décisionnel sans précédent. Pour s'assurer qu'elles conservent ce monopole, ces entreprises font désormais du lobbying auprès des gouvernements pour la réglementation de ces modèles, en invoquant les risques et les dangers potentiels de leur utilisation malveillante. Elles proposent des mesures allant de l'interdiction de l'entraînement de modèles au-delà d'une certaine puissance de calcul au contrôle gouvernemental des GPU, avec la possibilité de désactivation à distance [12].

Cependant, il est essentiel que ces outils ne soient pas uniquement entre les mains de quelques acteurs puissants, capables d'influencer les biais de leurs modèles qu'ils distribuent à grande échelle, leur permettant ainsi une influence de masse. La transparence de ces modèles, avec l'ouverture des données d'entraînement et des poids associés, est la solution la plus appropriée pour permettre à toute entité externe de vérifier la fiabilité et la sécurité des modèles proposés. Bien que cette approche ne soit pas appréciée par la majorité de ces entreprises, certaines d'entre elles, comme Meta et Mistral, investissent massivement dans des modèles à poids ouverts, distribuant librement des variantes de leurs modèles LlaMa [4] et Mistral [2][3].

Grâce à ces efforts, de nombreux groupes, tant publics que privés, sont désormais en mesure de déployer des modèles puissants, assurant ainsi la souveraineté de leurs données et évitant la concentration de cette richesse et de ce potentiel en un seul point. Cependant, même si ces modèles sont disponibles pour tous, il n'est pas facile de les déployer ou d'estimer les ressources nécessaires pour le faire. Bien qu'il soit simple de servir un modèle à un utilisateur, il est beaucoup plus complexe de le déployer pour des dizaines, des centaines, voire des milliers d'utilisateurs simultanés. Dans ce contexte, nous avons mené plusieurs tests au Centre Inria de l'Université de Bordeaux concernant le déploiement de tels modèles.

Objectifs

L'objectif principal de notre étude est de répondre aux préoccupations de sécurité et de confidentialité soulevées par l'utilisation croissante de solutions LLM propriétaires - telles que ChatGPT - par les étudiants et les chercheurs du Centre Inria de l'Université de Bordeaux. En effet, une grande partie de nos étudiants utilisent ces outils pour les aider dans leur travail quotidien, qu'il s'agisse d'écriture, de programmation, de relecture d'articles ou de brainstorming.

Cependant, l'utilisation de ces solutions propriétaires soulève de sérieuses questions de sécurité et de confidentialité. Elles ne garantissent pas la confidentialité des données, et les intérêts privés derrière elles peuvent potentiellement les utiliser à des fins commerciales, de formation ou même d'espionnage industriel. Ce dernier point est particulièrement préoccupant pour un centre de recherche comme Inria, qui doit assurer la confidentialité du travail de recherche de ses employés et qui est en concurrence directe avec les entreprises offrant ces solutions propriétaires.

Il est donc crucial pour Inria de proposer des solutions alternatives et de préserver sa souveraineté numérique. De plus, étant donné l'importance croissante de cette technologie, de plus en plus de chercheurs et d'étudiants souhaitent mener des expériences basées sur les LLMs. Par exemple, la mise en place de systèmes RAG (Retrieval Augmented Generation) [6][7] est une application courante dans le monde des affaires, qui consiste à utiliser un LLM pour "discuter" avec ses données. Il serait donc intéressant de leur offrir un service adapté.

Prérequis

Compétences

Pour déployer un LLM sur un GPU, certaines connaissances et compétences sont requises en développement Linux et Python, ainsi qu'une grande curiosité pour les modèles existants et la quantification. Bien que la compréhension du fonctionnement interne des Transformers ne soit pas nécessaire, elle peut être un atout.

Les compétences requises incluent la capacité à mettre à jour les pilotes CUDA (version 12 minimum), installer une version de Python (minimum 3.9), installer les dépendances Python, effectuer des requêtes HTTP, et choisir le bon modèle pour votre cas d'utilisation, quantifié ou non en fonction de vos ressources.

Matériel

Nous avons mené nos tests sur le serveur de calcul Plafrim, équipé de deux types de GPU :

    NVIDIA V100 16 GB
    NVIDIA A100 40 GB

Logiciel

Nous avons utilisé vLLM [8], une bibliothèque Python conçue pour optimiser l'inférence de ces modèles. Cette bibliothèque nécessite au moins l'installation préalable de Python 3.9 et CUDA 12.

L'avantage de vLLM par rapport à d'autres solutions est sa capacité à gérer plusieurs requêtes simultanément, sans file d'attente et sans augmentation linéaire du temps de calcul en fonction du nombre de requêtes, mais plutôt logarithmique.

Cependant, en fonction du matériel disponible, d'autres solutions peuvent être envisagées. Notamment, tensorRT-LLM offre d'excellentes performances avec les GPU NVIDIA, et lllama.cpp fournit des performances remarquables sur les Mac équipés de puces M1, M2 ou M3.

Quantification

Certains modèles peuvent être très volumineux, ce qui rend particulièrement difficile leur chargement dans le matériel disponible - limité par sa VRAM.

Pour résoudre ce problème, l'une des meilleures solutions est de quantifier nos modèles. Au lieu d'écrire les valeurs de nos poids sur 16 ou 32 bits, nous pouvons accepter une légère perte de précision et les écrire sur 4 ou 8 bits.

Cette perte a été évaluée plusieurs fois, et bien qu'elle varie en fonction des modèles et des méthodes de quantification utilisées, nous pouvons affirmer qu'elle est négligeable jusqu'à 6 bits et acceptable jusqu'à 4 bits. Cependant, pour un nombre de paramètres supérieur à 70 milliards, les modèles sont suffisamment robustes pour permettre une quantification inférieure à 4 bits tout en maintenant une bonne cohérence.

Parmi les différentes méthodes de quantification [10], nous pouvons mentionner AWQ [9], GPTQ [11] et GGUF (llama.cpp).

Expérimentation

Dans cette étude, nous cherchons à déterminer la charge maximale de requêtes simultanées qu'un serveur équipé de GPU V100 16 GB ou A100 40 GB peut supporter, en fonction du LLM utilisé. Pour cela, nous avons mené des tests en augmentant progressivement le nombre de requêtes simultanées et la taille des invites, jusqu'à atteindre la charge maximale. Pour chaque requête, nous avons mesuré le temps nécessaire pour générer 100 jetons. Et, pour chaque modèle et GPU, nous avons mesuré la charge de mémoire, la vitesse d'exécution et le nombre de jetons par seconde en fonction du nombre de requêtes simultanées et de la taille maximale du contexte.

Nous avons choisi de nous concentrer principalement sur les modèles proposés par Mistral AI [2][3], en raison de leur diversité, de leur popularité et de leurs compétences. Nous apprécions également leurs performances sur les langues européennes, en particulier le français. De plus, leur architecture Mixture of Experts [3] permet des économies de calcul lors de l'inférence, en ne sélectionnant qu'une partie des poids du modèle à chaque étape, ce qui réduit également la consommation d'énergie.

De plus, nous avons inclus le modèle LLaMa-3-70B [4] de Meta, qui atteint des performances comparables à GPT-4 avec ses 70 milliards de paramètres. Cette taille de modèle semble être un bon compromis entre taille et performance, justifiant son inclusion dans notre étude.

Ainsi, nous avons testé les modèles suivants :

    Mistral-7B
    Codestral-22b
    Mixtral-8x7b
    Mixtral-8x22b
    LLaMa-3-70B

Résultats

Mistral 7B sur 2 V100 16 GB

Requests31631192964808222193
11.81.81.91.91.92.12.3
22.12.12.02.22.32.62.8
42.22.32.12.62.52.83.7
82.42.42.52.73.03.55.9
162.92.93.03.84.25.29.2
324.24.24.55.46.98.819.0
646.77.17.79.811.917.136.0
12810.610.411.516.224.433.372.1

Codestral 22B AWQ 4-bits sur 1 A100 40 GB

Requêtes31631192964808222193
12.32.32.42.52.62.63.0
22.32.42.52.72.72.83.5
42.42.52.62.83.03.44.8
82.62.72.83.23.74.57.4
163.03.23.44.25.06.412.3
324.54.85.46.78.411.423.1
647.98.59.312.315.821.647.7
12814.315.417.624.229.946.496.2

Codestral 22B GPTQ 8-bits sur 2 V100 16 GB

Requêtes31631192964808222193
13.13.23.23.33.43.74.3
23.33.43.43.64.04.45.8
43.73.83.94.44.85.68.8
84.85.15.36.06.88.815
167.17.57.99.811.714.327.5
3210.410.911.915.319.024.653.8
6415.517.018.725.932.143.9108.2
12821.7------

Codestral 22B sur 2 A100 40 GB

Requêtes31631192964808222193
12.32.32.42.42.52.62.8
22.32.32.42.52.62.73.3
42.42.42.52.72.83.14.2
82.52.62.83.13.44.16.3
162.82.93.23.84.45.610.2
323.33.74.05.26.48.818.1
644.34.65.78.010.515.536.8
1286.87.89.414.519.632.971.1

Mixtral 8x7B AWQ 4-bits sur 2 A100 40 GB

Requêtes31631192964808222193
13.13.23.63.43.53.54.1
23.33.33.53.53.83.84.7
43.53.63.54.34.14.66.2
83.83.84.04.34.95.79.3
164.34.64.96.06.78.515.5
326.06.47.68.710.914.2-
6410.010.511.615.5---
12818.519.621.5----

Mixtral 8x22B AWQ 4-bits sur 4 A100 40 GB

Requêtes31631192964808222193
16.06.06.36.87.07.610.9
27.27.17.48.48.710.316.7
48.08.18.710.311.914.221.3
89.09.410.013.016.719.436.2
1611.012.213.221.126.531.966.4
3216.017.622.633.637.756.7-
6428.031.835.956.071.7--
12852.055.367.0111.7---

LLaMa-3 70B AWQ 4-bits sur 2 A100 40 GB

Requêtes2151972403987031848
13.63.73.73.94.04.24.8
23.73.73.94.14.24.55.8
43.84.04.14.44.75.47.9
84.34.54.85.15.97.412.5
164.95.25.76.98.310.821.4
327.68.28.711.113.719.640.9
6412.913.915.220.325.837.5-
12823.2------

Discussions & Perspectives

La première chose que nous pouvons remarquer est que plus la taille du contexte est grande, plus le modèle est lent à générer 100 jetons. Cela est attendu et est lié à sa complexité, qui croît de manière quadratique avec la taille du contexte.

De plus, comme nous pouvons le voir avec les modèles Mixtral [3] et Llama [4], le fait qu'un modèle puisse être chargé ne signifie pas qu'il puisse être utilisé pour n'importe quelle taille de contexte. La taille du contexte a un coût quadratique en RAM (ou VRAM), qui s'ajoute à la taille du modèle, augmentant potentiellement de manière significative les exigences en mémoire.

D'autre part, nous pouvons également observer que nous n'avons pas une perte d'efficacité linéaire avec le nombre de requêtes simultanées : le temps nécessaire pour répondre à une requête ne double pas lorsque le nombre de requêtes simultanées double. Cependant, cela semble moins vrai lorsque la taille de la requête dépasse un certain seuil.

Enfin, nous pouvons remarquer que bien que le coût de ces GPU soit loin d'être trivial (V100 16GB ≈ $5000, A100 40GB ≈ $8500), il n'est pas nécessaire de posséder une quantité exorbitante pour exécuter avec succès une alternative locale à ChatGPT ou d'autres solutions propriétaires. En fait, avec deux GPU A100 40GB (ou un seul GPU 80GB), il est déjà possible d'exécuter LLaMa-3-70B ou Mixtral 8x7B dans de très bonnes conditions. Selon de nombreux benchmarks et avis d'utilisateurs, ces modèles sont de sérieux concurrents à GPT-4.

Nombre de jetons générés par seconde et par utilisateur pour Mixtral 8x7B AWQ 4-bits sur 2 A100 40GBNombre de jetons générés par seconde et par utilisateur pour Mixtral 8x7B AWQ 4-bits sur 2 A100 40GB

Nombre total de jetons générés par seconde pour Mixtral 8x7B AWQ 4-bits sur 2 A100 40GBNombre total de jetons générés par seconde pour Mixtral 8x7B AWQ 4-bits sur 2 A100 40GB

Dans une moindre mesure, il est possible d'héberger des modèles plus petits (de l'ordre de 7 à 30B) et d'obtenir des vitesses de génération extrêmement impressionnantes, surtout si les requêtes sont parallélisées.

Par exemple, nous pouvons observer dans la Figure 1 le nombre de jetons générés par seconde et par utilisateur en fonction du nombre de requêtes simultanées et de la taille de l'invite, et dans la Figure 2 le nombre total de jetons générés par seconde (pour tous les utilisateurs combinés) en fonction du nombre de requêtes simultanées et de la taille des invites. Ainsi, nous pouvons observer que pour un modèle comme Mixtral 8x7B — qui a 49B de paramètres et seulement 12-13B de paramètres actifs à tout moment (architecture MoE) [3] — nous pouvons atteindre jusqu'à 700 jetons/seconde pour 128 requêtes simultanées avec un contexte presque nul (30 jetons), et nous pouvons obtenir une vitesse d'inférence de près de 20 jetons par seconde pour 20 utilisateurs simultanés.

Conclusion

Dans cet article, nous avons présenté une étude comparative des performances de plusieurs modèles de langage de grande taille (LLMs) en fonction des ressources matérielles disponibles. Nos résultats montrent que des modèles tels que Mistral [2][3] et LLaMa [5] peuvent être déployés efficacement sur des GPU V100 et A100, offrant des performances compétitives par rapport à des solutions propriétaires comme ChatGPT [5].

Ces résultats ont des implications significatives pour les communautés académiques et industrielles, fournissant des informations précieuses sur les ressources nécessaires pour déployer des LLMs. Ils soulignent également l'importance de la transparence et de la souveraineté numérique, permettant aux groupes publics et privés de déployer des modèles open-source sans dépendre de solutions propriétaires.

Nous encourageons fortement divers groupes publics et privés à déployer leurs propres solutions LLM, en particulier en utilisant des modèles open-source (ou open-weight). Cette approche non seulement réduit notre dépendance numérique, mais nous rapproche également de la souveraineté de nos données.

Nous remercions le Centre Inria de l'Université de Bordeaux pour leur soutien et leurs ressources, qui ont rendu cette étude possible.

Références

    Zhao, Wayne Xin, et al. "A survey of large language models." arXiv preprint arXiv:2303.18223 (2023).
    Jiang, Albert Q., et al. "Mistral 7B." arXiv preprint arXiv:2310.06825 (2023).
    Jiang, Albert Q., et al. "Mixtral of experts." arXiv preprint arXiv:2401.04088 (2024).
    Touvron, Hugo, et al. "Llama: Open and efficient foundation language models." arXiv preprint arXiv:2302.13971 (2023).
    Achiam, Josh, et al. "Gpt-4 technical report." arXiv preprint arXiv:2303.08774 (2023).
    Lewis, Patrick, et al. "Retrieval-augmented generation for knowledge-intensive nlp tasks." Advances in Neural Information Processing Systems 33 (2020): 9459-9474.
    Edge, Darren, et al. "From local to global: A graph rag approach to query-focused summarization." arXiv preprint arXiv:2404.16130 (2024).
    Kwon, "Efficient memory management for large language model serving with pagedattention." Proceedings of the 29th Symposium on Operating Systems Principles. 2023.
    Lin, Ji, et al. "AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration." Proceedings of Machine Learning and Systems 6 (2024): 87-100.
    Rajput, Saurabhsingh, and Tushar Sharma. "Benchmarking Emerging Deep Learning Quantization Methods for Energy Efficiency." 2024 IEEE 21st International Conference on Software Architecture Companion (ICSA-C). IEEE, 2024.
    Frantar, Elias, et al. "Gptq: Accurate post-training quantization for generative pre-trained transformers." arXiv preprint arXiv:2210.17323 (2022).
    Reimagining secure infrastructure for advanced AI, https://openai.com/index/reimagining-secure-infrastructure-for-advanced-ai/

Yannis Bendi-Ouis, Dan Dutarte, Xavier Hinaut (Centre Inria de l'Université de Bordeaux)