Comment installer et déployer LLaMA 3 en production ?

Le modèle d'IA générative LLaMA 3 a été publié par Meta il y a quelques jours, et ses capacités sont déjà impressionnantes.

Apprenez à installer et à déployer LLaMA 3 en production grâce à ce guide pas à pas. Des exigences matérielles au déploiement et à la mise à l'échelle, nous couvrons tout ce que vous devez savoir pour une mise en œuvre en douceur.

LLaMA 3

Introduction au LLaMA 3

Meta a présenté les premières versions de son modèle d'IA open-source Llama 3, qui peut être utilisé pour la création de textes, la programmation ou les chatbots. En outre, Meta a annoncé son intention d'intégrer LLaMA 3 dans ses principales applications de médias sociaux. Cette initiative vise à concurrencer d'autres assistants d'IA, tels que ChatGPT d'OpenAI, Copilot de Microsoft et Gemini de Google.

Comme Llama 2, Llama 3 est un modèle de langue de grande taille librement accessible, avec des poids ouverts, proposé par une entreprise d'IA de premier plan (bien qu'il ne soit pas considéré comme "open source" au sens conventionnel du terme).

Actuellement, Llama 3 peut être téléchargé gratuitement à partir du site web de Meta dans deux tailles de paramètres différentes : 8 milliards (8B) et 70 milliards (70B). Les utilisateurs peuvent s'inscrire pour accéder à ces versions. Llama 3 est proposé en deux variantes : pre-trained, qui est un modèle de base pour la prédiction du prochain jeton, et instruction-tuned, qui est affiné pour adhérer aux commandes de l'utilisateur. Les deux versions ont une limite de contexte de 8 192 tokens.

Dans un entretien avec Dwarkesh Patel, Mark Zuckerberg, le PDG de Meta, a mentionné qu'ils ont formé deux modèles personnalisés en utilisant un cluster de 24 000 GPU. Le modèle 70B a été entraîné avec environ 15 000 milliards de tokens de données et n'a jamais atteint un point de saturation ou une limite à ses capacités. Par la suite, Meta a décidé de se concentrer sur la formation d'autres modèles. L'entreprise a également révélé qu'elle travaillait actuellement sur une version de Llama 3 avec 400 milliards de paramètres, qui, selon des experts tels que Jim Fan de Nvidia, pourrait obtenir des résultats similaires à ceux de GPT-4 Turbo, Claude 3 Opus et Gemini Ultra sur des benchmarks tels que MMLU, GPQA, HumanEval et MATH.

Selon Meta, Llama 3 a été évalué à l'aide de divers critères, notamment MMLU (connaissances de premier cycle), GSM-8K (mathématiques de niveau primaire), HumanEval (codage), GPQA (questions de niveau supérieur) et MATH (problèmes de mots mathématiques). Ces benchmarks démontrent que le modèle 8B surpasse les modèles à poids ouverts tels que Gemma 7B et Mistral 7B Instruct de Google, et que le modèle 70B est compétitif par rapport à Gemini Pro 1.5 et Claude 3 Sonnet.

Meta rapporte que le modèle Llama 3 a été amélioré avec la capacité de comprendre le codage, comme pour Llama 2, et pour la première fois, il a été entraîné en utilisant à la fois des images et du texte. Pour la première fois, il a été entraîné à l'aide d'images et de textes. Toutefois, ses résultats actuels se limitent au texte.

LLaMA 3 Repères LLaMA 3 Repères

Exigences matérielles de LLaMA 3 et sélection des bonnes instances sur AWS EC2

Comme de nombreuses organisations utilisent AWS pour leurs charges de travail de production, voyons comment déployer LLaMA 3 sur AWS EC2.

La mise en œuvre des LLM se heurte à de nombreux obstacles, tels que la consommation de VRAM (mémoire GPU), la vitesse d'inférence, le débit et l'utilisation de l'espace disque. Dans ce scénario, nous devons nous assurer que nous allouons une instance GPU sur AWS EC2 avec une capacité VRAM suffisante pour prendre en charge l'exécution de nos modèles.

LLaMA 3 8B nécessite environ 16 Go d'espace disque et 20 Go de VRAM (mémoire GPU) en FP16. Il est bien sûr possible de déployer LLaMA 3 sur une unité centrale, mais la latence serait trop élevée pour un cas d'utilisation en production réelle. Quant à LLaMA 3 70B, il nécessite environ 140 Go d'espace disque et 160 Go de VRAM en FP16.

Il est assez facile de mettre la main sur 20 Go de VRAM pour LLaMA 3 8B. Je vous recommande de provisionner un GPU NVIDIA A10 : ce GPU est livré avec 24 Go de VRAM et il s'agit d'un GPU rapide basé sur la plate-forme Ampere. Sur AWS EC2, vous devez sélectionner une instance G5 afin de provisionner un GPU A10. Une instance g5.xlarge suffira.

Le déploiement du modèle LLaMA 3 70B est cependant beaucoup plus difficile. Aucun GPU n'a assez de VRAM pour ce modèle, vous devrez donc provisionner une instance multi-GPU. Si vous provisionnez une instance g5.48xlarge sur AWS, vous obtiendrez 192 Go de VRAM (8 x GPU A10), ce qui sera suffisant pour LLaMA 3 70B.

Dans une telle configuration, vous pouvez vous attendre aux latences (temps de réponse) suivantes : 50 jetons générés en 1 seconde pour LLaMA 3 8B, et 50 jetons générés en 5 secondes pour LLaMA 3 70B.

Afin de réduire le coût d'exploitation de ces modèles et d'augmenter la latence, vous pouvez étudier les techniques de quantification, mais sachez que de telles optimisations peuvent nuire à la précision de votre modèle. La quantification n'entre pas dans le cadre de cet article.

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.xlarge ou g5.48xlarge. N'oubliez pas de prévoir suffisamment d'espace disque.

Deep Learning AMI sur une instance G5 sur AWS

Inférence de production avec vLLM

vLLM est une bibliothèque conçue pour faciliter et accélérer l'inférence et le déploiement de LLM. Son efficacité est attribuée à diverses méthodes sophistiquées, notamment l'attention paginée pour une gestion optimale de la clé d'attention et de la mémoire des valeurs, le traitement en temps réel des requêtes entrantes par lots et les noyaux CUDA personnalisés.

En outre, vLLM offre un haut degré d'adaptabilité en utilisant le calcul distribué (à l'aide du parallélisme tensoriel), le streaming en temps réel et la compatibilité avec les cartes graphiques NVIDIA et AMD.

Plus précisément, vLLM facilitera grandement le déploiement de LLaMA 3, en nous permettant d'utiliser des instances AWS EC2 équipées de plusieurs GPU NVIDIA A10 compacts. Cette solution est plus avantageuse que l'utilisation d'un seul grand GPU, tel que le NVIDIA A100 ou H100. En outre, vLLM améliorera considérablement l'efficacité de notre modèle grâce à l'inférence continue par lots.

L'installation de vLLM est assez simple. Établissons une connexion SSH à notre instance AWS récemment créée, et installons vLLM à l'aide de pip :

pip install vllm

Comme nous prévoyons d'effectuer une inférence distribuée à l'aide de vLLM sur 8 GPU A10, l'installation de Ray est également nécessaire :

pip install ray

Si vous rencontrez des problèmes de compatibilité lors de l'installation, il peut être plus simple pour vous de compiler vLLM à partir des sources ou d'utiliser leur image Docker : Consultez les instructions d'installation de vLLM.

Lancer le serveur d'inférence

Créons maintenant notre script d'inférence Python :

from vllm import LLM

# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")

# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)

print(llm.generate("What are the most popular quantization techniques for LLMs?"))

Vous pouvez exécuter le script ci-dessus. Si c'est la première fois que vous exécutez ce script, vous devrez attendre que le modèle soit téléchargé et chargé sur le GPU, puis vous obtiendrez quelque chose comme ceci :

The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation

C'est assez simple à comprendre. Il suffit d'ajuster le tensor_parallel_size en fonction du nombre de GPU que l'on possède.

Nous cherchons maintenant à mettre en place un serveur d'inférence approprié, capable de gérer de nombreuses demandes et d'exécuter des inférences simultanées. Pour commencer, démarrez le serveur :

Pour LLaMA 3 8B :

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct

Pour LLaMA 3 70B :

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8

Le chargement du modèle sur le GPU devrait prendre jusqu'à 1 minute. Vous pouvez ensuite démarrer un deuxième terminal et commencer à faire des requêtes :

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "What are the most popular quantization techniques for LLMs?"
}'

Vous avez maintenant un serveur d'inférence prêt pour la production qui peut gérer de nombreuses requêtes parallèles grâce à la mise en lot continue. A un moment donné, si le nombre de requêtes est trop élevé, le GPU sera surchargé. Dans ce cas, vous devrez répliquer le modèle sur plusieurs instances de GPU et équilibrer la charge de vos requêtes (mais cela sort du cadre de cet article).

Conclusion

Comme vous pouvez le constater, le déploiement de LLaMA 3 en production ne nécessite pas de code complexe grâce à des serveurs d'inférence comme vLLM.

Fournir le matériel adéquat est cependant un défi. D'abord parce que ces GPU sont très coûteux, mais aussi en raison de la pénurie mondiale de GPU. Si c'est la première fois que vous essayez de provisionner un serveur GPU sur AWS, il se peut que vous n'ayez pas l'autorisation de créer un serveur GPU. Dans ce cas, vous devrez contacter le support et expliquer votre cas d'utilisation. Dans cet article, nous avons utilisé AWS EC2, mais d'autres fournisseurs sont bien sûr disponibles (Azure, GCP, OVH, Scaleway...).

Si vous n'êtes pas intéressé par le déploiement de LLaMA 3 par vous-même, nous vous suggérons d'utiliser notre NLP Cloud API. Cette option peut être plus efficace et potentiellement beaucoup plus rentable que la gestion de votre propre infrastructure LLaMA 3. Essayez LLaMA 3 sur NLP Cloud dès maintenant !

Si vous avez des questions sur LLaMA 3 et sur le déploiement de l'IA en général, n'hésitez pas à nous les poser, c'est toujours un plaisir de vous aider !

Julien
Directeur technique de NLP Cloud