Déployer LLaMA 3, Mistral et Mixtral sur AWS EC2 avec vLLM

En 2023, de nombreux LLM open-source avancés ont été publiés, mais le déploiement de ces modèles d'IA en production reste un défi technique. Dans cet article, nous allons montrer comment déployer certains des meilleurs LLM sur AWS EC2 : LLaMA 3 70B, Mistral 7B et Mixtral 8x7B. Nous utiliserons un moteur d'inférence avancé qui supporte l'inférence par lots afin de maximiser le débit : vLLM.

vLLM

LLaMA 3, Mistral et Mixtral

Meta a créé et lancé la série LLaMA 3 de grands modèles de langage (LLM), qui comprend une variété de modèles de texte génératifs qui ont été pré-entraînés et affinés. Ces modèles varient en taille, avec des paramètres allant de 7 milliards à 70 milliards.

Mistral AI, une startup cofondée par des personnes ayant travaillé chez Google DeepMind et Meta, a fait une entrée remarquée dans le monde des LLM avec Mistral 7B puis Mixtral 8x7B.

Ce qui rend le Mistral 7B particulièrement impressionnant, ce sont ses performances. Dans divers tests, il a surpassé Llama2-13B, et même Llama1-34B dans de nombreuses mesures. Cela suggère que Mistral 7B offre des capacités similaires ou supérieures avec une charge de calcul nettement inférieure. En ce qui concerne les tâches de codage, Mistral 7B rivalise avec CodeLlama 7B, et sa taille compacte de 13,4 Go lui permet de fonctionner sur des machines standard.

Mixtral 8x7B est un modèle adaptable et rapide qui convient à diverses applications. Il fonctionne à une vitesse six fois supérieure et atteint ou dépasse les performances du LLaMA 3 70B dans toutes les mesures de test. Ce modèle prend en charge plusieurs langues et possède des capacités de codage inhérentes. Il peut gérer des séquences d'une longueur maximale de 32k tokens.

Tous ces modèles sont open-source et vous pouvez les déployer sur votre propre serveur si vous avez accès au matériel adéquat. Voyons comment les déployer sur AWS EC2 avec vLLM.

Inférence par lots et multi GPU avec vLLM

vLLM est une bibliothèque rapide et conviviale conçue pour une inférence et un déploiement LLM efficaces. Les performances de vLLM proviennent de plusieurs techniques avancées telles que l'attention paginée pour une gestion efficace de la clé d'attention et de la mémoire des valeurs, le traitement par lots des requêtes entrantes en temps réel et les noyaux CUDA personnalisés.

En outre, vLLM offre une bonne flexibilité grâce à l'inférence distribuée (via le parallélisme tensoriel), au streaming de sortie et à la prise en charge des architectures GPU NVIDIA et AMD.

En particulier, vLLM sera très utile pour déployer LLaMA 3, Mistral et Mixtral, car il nous permettra de déployer nos modèles sur des instances AWS EC2 intégrant plusieurs petits GPU (comme le NVIDIA A10), au lieu d'un seul gros GPU (comme le NVIDIA A100 ou H100). De plus, vLLM nous permettra d'augmenter considérablement le débit de notre modèle grâce à l'inférence par lots.

Fournir le bon matériel sur AWS EC2

Le déploiement des LLM est un défi pour de nombreuses raisons : L'utilisation de la VRAM (mémoire GPU), la vitesse d'inférence, le débit, l'utilisation de l'espace disque... Ici, nous devons nous assurer que nous provisionnerons une instance GPU sur AWS EC2 qui a suffisamment de VRAM pour exécuter nos modèles.

Les instances G5 sont un bon choix car elles vous donnent accès aux GPU NVIDIA A10 modernes et peuvent évoluer jusqu'à 192 Go de VRAM (voir l'instance g5.48xlarge), tout en restant assez économiques.

Mistral 7B est le modèle le plus facile à déployer car il nécessite environ 14 Go de VRAM. Viennent ensuite Mixtral 8x7B avec 110 Go et LLaMA 3 70B avec 140 Go. Ici, nous ne considérons que fp16, et non fp32, et nous n'appliquons aucune sorte de quantification.

Par conséquent, Mistral 7B peut fonctionner sur une instance g5.xlarge mais Mixtral 8x7B et LLaMA 3 70B nécessitent une instance g5.48xlarge, nous allons donc provisionner une instance g5.48xlarge dans ce tutoriel.

Pour provisionner de telles instances, connectez-vous à votre console AWS EC2 et lancez une nouvelle instance : sélectionnez l'AMI NVIDIA deep learning, sur une instance g5.48xlarge. Vous aurez besoin d'au moins 300 Go d'espace disque.

Deep Learning AMI sur une instance G5 sur AWS

Installer vLLM pour l'inférence distribuée

L'installation de vLLM est assez simple. Ouvrons une connexion SSH à notre instance AWS nouvellement créée, et installons vLLM avec pip :

pip install vllm

Comme nous allons utiliser vLLM pour l'inférence distribuée sur 8 x A10 GPUs, nous devons également installer Ray :

pip install ray

En cas de problèmes de compatibilité pendant le processus d'installation, il peut être plus facile pour vous de construire vLLM à partir des sources ou d'utiliser leur image Docker : voir la documentation d'installation pour plus de détails.

Créer le script d'inférence

Vous pouvez maintenant créer votre premier script d'inférence. Créez un fichier Python contenant les éléments suivants :

from vllm import LLM

# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)

print(llm.generate("What is batch inference?"))

Exécutez maintenant votre script avec Python, qui renvoie quelque chose comme ceci :

Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.

Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.

Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.

In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.

Comme vous pouvez le voir, c'est un jeu d'enfant. Vous devez adapter tensor_parallel_size en fonction du nombre de GPU sous-jacents dont vous disposez.

Ce qui précède était un scénario unique. Nous voulons maintenant démarrer un serveur d'inférence digne de ce nom, capable de gérer plusieurs requêtes et d'effectuer des inférences par lots à la volée. Tout d'abord, démarrez le serveur :

python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8

Après un certain temps, une fois que le modèle est correctement chargé dans la VRAM, vous pouvez ouvrir une deuxième fenêtre de l'interpréteur de commandes et faire quelques demandes :

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
    "prompt": "What is batch inference?"
}'

Vous obtiendrez le même résultat que précédemment, mais cette fois, vous pourrez effectuer plusieurs demandes en même temps.

Conclusion

L'utilisation d'un serveur d'inférence avancé comme vLLM est bénéfique si vous souhaitez maximiser l'utilisation de votre GPU et déployer facilement votre modèle sur plusieurs GPU en parallèle.

Comme vous pouvez le constater, il est très facile de déployer les modèles d'IA open-source les plus avancés, tels que LLaMA 3, Mistral et Mixtral, sur votre propre serveur grâce à cette technique.

Dans ce tutoriel, nous avons utilisé AWS EC2, mais nous aurions bien sûr pu utiliser d'autres fournisseurs. Le principal défi sera le coût des GPU et leur disponibilité.

Si vous ne souhaitez pas déployer ces LLM par vous-même, nous vous recommandons d'utiliser notre API NLP Cloud. Cela vous fera gagner beaucoup de temps et pourrait même être moins cher que de déployer vos propres LLM. Si ce n'est pas encore fait, n'hésitez pas à essayer !

Vincent
Developer Advocate chez NLP Cloud