Comment déployer Llama 3.1 405B avec Novita AI

Comment déployer Llama 3.1 405B avec Novita AI

Avant-propos

La sortie de Llama3.1 a immédiatement attiré l’attention mondiale, marquant la première fois qu’un modèle open-source s’approche et même dépasse les modèles propriétaires dans certains indicateurs. Cet article présente la méthode et les étapes pour déployer le modèle Llama3.1-405B à partir de zéro en utilisant une instance GPU Novita AI. Il est particulièrement à noter que déployer un grand modèle à partir de zéro est une tâche longue et exigeante. Si vous souhaitez éviter ce travail fastidieux et utiliser directement le modèle Llama3.1-405B, vous pouvez rechercher une excellente plateforme d’hébergement de modèles dans l’industrie pour appeler le service d’inférence sous la forme de l’API OpenAI. Non seulement c’est facile à utiliser, mais le coût est également très abordable, avec un coût total très faible et maîtrisable. Actuellement, Novita AI a lancé un service API pour Llama3.1, et vous pouvez l’essayer directement dans le Playground : https://novita.ai/model-api/llm-api/playground

Exigences de base pour le déploiement de Llama3.1-405B

La série de modèles Llama3.1 open-source de Meta comprend trois tailles : 8B, 70B et 405B. Le modèle 405B est le plus grand modèle de langage open-source à ce jour, avec une échelle de paramètres de 40,5 milliards. Les performances du modèle dans plusieurs évaluations ont dépassé les modèles GPT-4 et GPT-4o, et sont comparables à Claude3.5-Sonnet. Il est difficile de charger un modèle aussi volumineux dans le GPU. La version FP16 originale du modèle 405B nécessite 810 Go de mémoire GPU, comme illustré ci-dessous. Cependant, même avec le GPU H100 le plus performant disponible sur le marché, un serveur avec la configuration maximale de 8 cartes ne peut pas charger directement cette version du modèle. Il est nécessaire de quantifier la version FP16 du modèle en une représentation de précision inférieure, réduisant ainsi les besoins en mémoire et permettant de le charger avec succès dans le GPU.

L’architecture du modèle de la série Llama3.1 hérite de Llama3, et la structure est très similaire, ce qui est très favorable au framework d’inférence. Des solutions d’inférence open-source comme vLLM peuvent rapidement terminer l’adaptation et prendre en charge l’inférence de grands modèles tels que Llama3.1-405B. En résumé, pour réaliser le déploiement du service d’inférence Llama3.1-405B, nous devons nous préparer sous trois aspects :

  • Matériel : Il est recommandé de choisir une instance de serveur GPU configurée avec 8 GPU H100 et de réserver environ 1,5 To d’espace de stockage. Vous pouvez sélectionner l’instance via la console Novita AI et fournir de la capacité de stockage en montant un volume réseau.

  • Modèle : Préparez un compte Huggingface, téléchargez le modèle original Llama3.1-405B, ou vous pouvez également télécharger la version FP8 ou INT4 du modèle.
  • Framework 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é le serveur GPU avec 8 cartes H100, connectez-vous au serveur et commencez à télécharger le modèle. Nous présentons ici la méthode de téléchargement de la version FP16 du modèle et sa conversion manuelle en versions quantifiées FP8 et INT4 (bien sûr, vous pouvez également télécharger directement le modèle quantifié sur la plateforme Huggingface). Il est recommandé de télécharger la version Instruct depuis la plateforme Huggingface. Tout d’abord, inscrivez-vous et connectez-vous à la plateforme Huggingface, créez et enregistrez le jeton d’accès de l’utilisateur actuel sur la page des paramètres, qui sera utilisé lors du téléchargement du modèle. Ouvrez la page d’accueil du modèle Llama3.1-405B : https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, soumettez la demande de modèle à Meta et attendez environ une demi-heure pour l’autorisation.

De retour sur le serveur GPU, installez le programme client Huggingface et commencez à télécharger le modèle avec les commandes suivantes :

pip install huggingface-hub
huggingface-cli login  ## Entrez le jeton d'accès
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## Commencez à télécharger le grand modèle 405B

Après une longue attente (en fonction de la vitesse actuelle du réseau), le modèle 405B de 800 Go est téléchargé avec succès localement. Les informations spécifiques du modèle peuvent être consultées en appelant huggingface-cli scan-cache.

Ensuite, effectuez la quantification FP8 et INT4 du modèle original.

Tout d’abord, téléchargez l’outil de quantification FP8. Vous pouvez utiliser directement l’outil open-source AutoFP8 : https://github.com/neuralmagic/AutoFP8, et utiliser le script qui l’accompagne pour la quantification manuelle, avec le mode de quantification dynamique, comme suit :

git clone https://github.com/neural
magic/AutoFP8.git
cd AutoFP8
pip install -e .  ## Compilez et installez 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 du modèle quantifié avec --save-dir. Comme il s’agit d’une quantification uniquement des poids, la vitesse globale est très rapide.

Vous pouvez également télécharger directement la version FP8 quantifiée 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

De même que pour la quantification FP8, vous pouvez utiliser l’outil open-source AutoAWQ pour la quantification en version INT4. L’adresse de cette solution de quantification est : https://github.com/casper-hansen/AutoAWQ. La méthode de quantification est la suivante :

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## Compilez et installez l'outil AutoAWQ localement
## Modifiez manuellement examples/quantize.py
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# Commencez la quantification
python examples/quantize.py

Construction du framework d’inférence

Grâce au fort soutien de la communauté open-source, vLLM est reconnu comme un framework d’inférence efficace de niveau industriel, avec un support très riche pour les grands modèles et des mises à jour très rapides. À partir de v0.5.3.post1, vLLM prend en charge le service d’inférence de la série de modèles Llama3.1.

La méthode pour télécharger le code source de vLLM et le compiler est la suivante :

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 une compilation réussie, vous pouvez démarrer le service d’inférence.

En plus de compiler vLLM localement, vous pouvez également compiler vLLM dans une image Docker, comme suit :

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 directement l’image officielle de vLLM :

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

Exécution du service d’inférence

Après avoir terminé la construction du framework d’inférence vLLM, vous pouvez démarrer vLLM et charger le modèle Llama3.1-405B pour lancer le service d’inférence. Pour le framework d’inférence vLLM compilé localement, 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 exécutez le service d’inférence dans un conteneur Docker, vous pouvez vous référer à la commande suivante pour l’exécuter :

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 que le framework d’inférence vLLM fonctionne avec succès, il écoutera sur.

Novita AI est la plateforme cloud tout-en-un qui alimente vos ambitions en IA. API intégrées, serverless, instances GPU – les outils rentables dont vous avez besoin. Éliminez l’infrastructure, commencez gratuitement, et réalisez votre vision IA.

Lectures recommandées :

  1. From Docker To Kubernetes
  2. Demystifying Kubernetes Scheduling: A Deep Dive into Predicates and Priorities