Déploiement du service d'inférence Llama 3.1 405B : Guide du débutant

Déploiement du service d'inférence Llama 3.1 405B : Guide du débutant

Introduction

Cet article utilise l’instance GPU 8 x H100 pour montrer comment déployer Llama3.1–405B. Déployer soi-même de grands modèles est une entreprise chronophage et coûteuse. Pour éviter ce travail fastidieux et onéreux, vous pouvez envisager d’utiliser directement Llama3.1–405B. Cherchez d’excellentes plateformes de fournisseurs de modèles dans l’industrie de l’IA et utilisez-les via la norme API OpenAI pour les services d’inférence. Elles sont conviviales et leur modèle de tarification à l’usage est économique et gérable. Nous recommandons le service API d’inférence Llama3.1–405B fourni par Novita AI.

Prérequis pour le déploiement de Llama3.1–405B

Tous les modèles Llama3.1 publiés par Meta incluent 8B, 70B et 405B. Le modèle Llama3.1–405B est le plus grand modèle de langage open source à ce jour, avec des paramètres atteignant 405 milliards. Les résultats d’évaluation des performances du modèle surpassent GPT-4 et GPT-4o et sont comparables à Claude3.5-Sonnet.

Il est difficile de charger un si gros modèle sur un GPU. La version originale FP16 du modèle 405B nécessite 810 Go de mémoire GPU, comme le montre l’image ci-dessous. Cependant, en prenant l’exemple du GPU H100 actuellement le plus puissant disponible, le serveur à 8 sockets ne peut pas charger directement cette version du modèle. Il est nécessaire de quantifier la version FP16 du modèle et de la convertir en une représentation de faible précision, réduisant ainsi les besoins en mémoire et réussissant à la charger sur le GPU.

Les modèles Llama3.1 ont une architecture similaire aux modèles Llama3, ce qui facilite l’utilisation du cadre d’inférence. Les solutions d’inférence open source comme vLLM peuvent être rapidement adaptées pour prendre en charge le grand modèle Llama3.1–405B.

Pour déployer un service d’inférence pour Llama3.1–405B, les trois préparations clés sont :

  • Matériel : Nous recommandons de louer l’instance de serveur GPU 8 x H100 et de réserver environ 1,5 To d’espace de stockage.
  • Modèle : Préparez un compte Hugging Face et téléchargez le Llama3.1–405B original ou les versions FP8 ou INT4 du modèle.
  • Cadre d’inférence : Téléchargez la dernière version de vLLM v0.5.3.post1.

Préparation du modèle

Après avoir préparé un serveur GPU 8 sockets H100, connectez-vous au serveur et téléchargez le modèle. Nous présentons comment télécharger la version FP16 du modèle et la convertir en versions quantifiées FP8 et INT4 (vous pouvez également télécharger les modèles pré-quantifiés depuis Hugging Face).

Nous recommandons de télécharger la version Instruct depuis la plateforme Hugging Face. Tout d’abord, inscrivez-vous et connectez-vous à Hugging Face. Créez et enregistrez le jeton d’accès (Access Token) de l’utilisateur actuel sur la page Paramètres, qui sera utilisé lors du téléchargement du modèle.

Ouvrez la page du modèle Llama3.1–405B : https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, soumettez une demande de modèle à Meta et attendez environ une demi-heure pour l’autorisation.

De retour sur le serveur GPU, installez l’application client Hugging Face et commencez à télécharger le modèle. La commande est la suivante :

pip install huggingface-hub  
huggingface-cli login ## Saisir le jeton d'accès  
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct ## Démarrer le téléchargement de 405B

Après une longue attente (selon la connexion Internet), le modèle 405B de 800 Go sera téléchargé sur la machine locale. Appelez huggingface-cli scan-cache pour afficher les informations détaillées du modèle.

Ensuite, nous allons effectuer la quantification FP8 et INT4 sur le modèle original.

Tout d’abord, téléchargez l’outil de quantification FP8. Vous pouvez utiliser l’outil open source AutoFP8 : https://github.com/neuralmagic/AutoFP8. Appelez les scripts qu’il contient pour quantifier en mode dynamique. Procédez comme suit :

git clone https://github.com/neuralmagic/AutoFP8.git  
cd AutoFP8  
pip install -e . ## Compiler et installer l'outil AutoFP8 localement  
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

Le script de quantification spécifie le chemin de sortie de la version quantifiée du modèle avec --save-dir. Comme il s’agit d’une quantification uniquement des poids, la vitesse globale est rapide.

Vous pouvez également télécharger la version quantifiée FP8 fournie par Meta : https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8. La commande de téléchargement est la suivante :

huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8

Comme pour la quantification FP8, vous pouvez utiliser l’outil open source AutoAWQ pour effectuer la quantification INT4. L’adresse de cette méthode de quantification est https://github.com/casper-hansen/AutoAWQ. Les étapes de quantification sont les suivantes :

Construction du cadre d’inférence

Tirant parti de la puissante communauté open source, vLLM est un cadre d’inférence efficace offrant un support pour divers LLM avec des mises à jour en temps opportun. À partir de v0.5.3.post1, vLLM prend en charge le service d’inférence pour les modèles Llama 3.1.

Les étapes pour télécharger le code source de vLLM et le compiler sont les suivantes :

git clone https://github.com/vllm-project/vllm  
cd vllm  
git checkout -b v0.5.3.post1 v0.5.3.post1  
pip install -e .

Après la compilation, vous pouvez démarrer le service d’inférence.

En plus de compiler vLLM sur la machine locale, vous pouvez construire vLLM en tant qu’image Docker. La méthode est la suivante :

git clone https://github.com/vllm-project/vllm  
cd vllm  
git checkout -b v0.5.3.post1 v0.5.3.post1  
docker build -t vllm_0.5.3.p1 .

Vous pouvez également télécharger l’image vLLM :

docker pull vllm/vllm-openai:v0.5.3.post1

Exécution du service d’inférence

Après avoir construit le cadre d’inférence vLLM, vous pouvez démarrer vLLM et charger le modèle Llama 3.1–405B pour effectuer le service d’inférence. Pour la compilation locale du cadre d’inférence vLLM, vous devez vous placer dans le répertoire racine du code source de vLLM, puis exécuter la commande suivante pour démarrer le service d’inférence :

cd vllm  
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Si vous souhaitez exécuter le service d’inférence via un conteneur Docker, vous pouvez utiliser la commande suivante :

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Une fois le cadre d’inférence vLLM en cours d’exécution, il écoute sur le port 18001 tout en recevant et en traitant les demandes des utilisateurs. Vous pouvez vérifier rapidement le service d’inférence en envoyant une requête POST au point de terminaison des complétions depuis votre terminal local. La commande est la suivante :

curl -X POST -H "Content-Type: application/json"  
http://localhost:18001/v1/completions  
-d '{"model": "llama31-405b-fp8", "prompt": "San Francisco is a"}'

Ainsi, le déploiement du modèle Llama 3.1 est maintenant terminé.

Novita AI est la plateforme cloud tout-en-un qui dynamise vos ambitions en matière d’IA. API intégrées, sans serveur, instance GPU — les outils économiques dont vous avez besoin. Éliminez l’infrastructure, commencez gratuitement et faites de votre vision de l’IA une réalité.