Ce tutoriel vous explique comment déployer et diffuser Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8), un modèle de 405 milliards de paramètres ajusté aux instructions et quantifié en FP8, sur Google Kubernetes Engine (GKE) sur Google Cloud. Le déploiement utilise Cluster Toolkit, deux instances de machines virtuelles (VM) A4 (a4-highgpu-8g) avec un total de 16 GPU NVIDIA B200, NVIDIA Dynamo et le framework de diffusion SGLang avec désagrégation de préremplissage/décodage (PD) sur un seul hôte.
Dans la configuration de déploiement décrite dans ce tutoriel, vous allez utiliser Cluster Toolkit pour provisionner un cluster GKE en mode Standard. Le cluster contient deux nœuds a4-highgpu-8g connectés via un réseau d'accès direct à la mémoire à distance (RDMA) GPUDirect. Vous installerez ensuite le planificateur KAI et la plate-forme NVIDIA Dynamo avec la planification de groupe Grove.
Enfin, vous déployez une ressource personnalisée DynamoGraphDeployment qui sépare le préremplissage et le décodage sur deux nœuds de calcul à hôte unique et huit GPU avec parallélisme de tenseur et un cache KV FP8.
Objectifs
- Installez Cluster Toolkit et provisionnez un cluster GKE A4 à deux nœuds en mode Standard.
- Installez le planificateur KAI et la plate-forme NVIDIA Dynamo avec la planification de groupe Grove sur votre cluster.
- Déployez un serveur d'inférence SGLang désagrégé par PD avec un nœud de calcul de préremplissage A4 à hôte unique et un nœud de calcul de décodage A4 à hôte unique.
- Envoyez une requête de complétion de chat au routeur d'interface Dynamo.
- Exécutez une charge de travail de benchmark de diffusion.
- Nettoyez les ressources déployées.
Coûts
Dans ce document, vous utilisez les composants facturables suivants deGoogle Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Configurez votre environnement pour le tutoriel :
- Installez et initialisez la Google Cloud CLI, puis installez
kubectlet Helm (version 3.10 ou ultérieure). Si vous utilisez Cloud Shell, ces outils sont préinstallés. - Si vous suivez ce tutoriel depuis un poste de travail Linux ou macOS plutôt que depuis Cloud Shell, installez les dépendances Cluster Toolkit requises, telles que Terraform et Git.
Activez l'API Kubernetes Engine, l'API Compute Engine, l'API Cloud Storage, l'API Identity and Access Management, l'API Cloud Resource Manager et l'API Service Usage dans votre projet Google Cloud :
Obtenir un jeton d'accès Hugging Face
Vous avez besoin d'un jeton d'accès Hugging Face pour suivre ce tutoriel. Vous pouvez créer un compte sans frais sur Hugging Face. Une fois que vous disposez d'un compte, générez un jeton d'accès :
- Sur la page Welcome to Hugging Face (Bienvenue sur Hugging Face), cliquez sur l'avatar de votre compte, puis sélectionnez Access tokens (Jetons d'accès).
- Sur la page Access tokens (Jetons d'accès), cliquez sur Create new token (Créer un jeton).
- Sélectionnez le type de jeton Read (Lecture) et saisissez un nom pour votre jeton.
- Votre jeton d'accès s'affiche. Enregistrez le jeton dans un endroit sûr.
Rôles requis
Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
- Administrateur Kubernetes Engine (
roles/container.admin) - Administrateur de Compute (
roles/compute.admin) - Administrateur de l'espace de stockage (
roles/storage.admin) - Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) - Administrateur de compte de service (
roles/iam.serviceAccountAdmin) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) - Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer)
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer vos variables d'environnement
Exportez les variables d'environnement que vous utiliserez tout au long de ce tutoriel :
Remplacez les éléments suivants :
YOUR_PROJECT_ID: ID de votre projet Google Cloud.YOUR_REGION: région où se trouve votre capacité A4 et où vous souhaitez déployer votre cluster, par exempleus-central1.YOUR_ZONE: zone où se trouve votre capacité A4, par exempleus-central1-b.YOUR_CLUSTER_NAME: nom de votre cluster GKE et de votre déploiement Cluster Toolkit. Utilisez un nom de 20 caractères ou moins pour que l'ID de compte de service du pool de nœuds généré (YOUR_CLUSTER_NAME-gke-np-sa) ne dépasse pas la limite de 30 caractères d'Identity and Access Management (IAM).YOUR_RESERVATION_NAME: nom de votre réservation A4.YOUR_BUCKET_NAME: nom unique du bucket Cloud Storage qui stocke l'état Terraform pour Cluster Toolkit.YOUR_HF_TOKEN: votre jeton d'accès Hugging Face.
Créer le cluster GKE
Téléchargez Cluster Toolkit et provisionnez un cluster GKE en mode Standard avec deux nœuds a4-highgpu-8g, une mise en réseau GPUDirect RDMA et la compatibilité DRA :
Connectez-vous à la Google Cloud CLI et générez des identifiants par défaut de l'application pour Terraform :
Téléchargez et extrayez le bundle Cluster Toolkit prédéfini pour la version spécifiée dans
CLUSTER_TOOLKIT_VERSION(v1.104.0) :Si vous exécutez cette commande sur macOS ou sur un poste de travail
arm64, définissezOS="mac"ouARCH="arm64"pour qu'il corresponde à votre plate-forme.Pour stocker l'état Terraform de votre déploiement Cluster Toolkit, créez un bucket Cloud Storage avec la gestion des versions d'objets activée :
Créez le fichier de configuration de déploiement
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpour deux nœudsa4-highgpu-8g:Par défaut, le fichier de déploiement est configuré pour utiliser une réservation spécifique. Si vous n'avez pas de réservation spécifique, vous pouvez mettre à jour
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlavant de déployer le cluster pour utiliser une autre option de consommation, telle que les VM Spot ou les VM Flex-start. Pour obtenir des instructions de configuration, consultez Options de consommation GKE.Accédez au répertoire
cluster-toolkit, déployez le cluster GKE à l'aide de la commandegcluster deploy, puis revenez à votre répertoire de travail :La création du cluster prend environ 20 à 30 minutes. Si vous exécutez
./gcluster deploysans l'option--auto-approve, saisissezalorsque vous y êtes invité pour appliquer les modifications proposées.Configurez les identifiants
kubectlpour communiquer avec votre cluster :
Installer le planificateur KAI et NVIDIA Dynamo
Préparez votre cluster en créant un secret Hugging Face et en installant le planificateur KAI et la plate-forme NVIDIA Dynamo avec la planification de groupe Grove :
Créez un secret Kubernetes nommé
hf-secretpour stocker votre jeton d'accès Hugging Face :Téléchargez le chart Helm de la plate-forme NVIDIA Dynamo (
v1.5.0), installez le planificateur KAI, puis installez la plate-forme Dynamo avec Grove activé :
Déployer le serveur SGLang désagrégé à hôte unique
Le fichier manifeste de la charge de travail (llama3.1-405b-singlehost-a4.yaml) définit un ResourceClaimTemplate Kubernetes (all-mrdma), qui alloue les appareils RDMA multi-NIC du nœud (mrdma.google.com) via DRA, et un DynamoGraphDeployment NVIDIA Dynamo (llama3-405b-a4-disagg) avec la planification de groupe Grove activée. Le déploiement comprend les éléments suivants :
- Interface (
Frontend) : exécute une instance répliquée de routeur qui accepte les requêtes des clients, découvre les nœuds de calcul de préremplissage et de décodage enregistrés, et coordonne le routage des requêtes désagrégées. - Nœud de calcul de préremplissage (
Prefill) : exécute un nœud de calcul à hôte unique sur un nœuda4-highgpu-8gavec huit GPU NVIDIA B200. Au démarrage, le pod source l'environnement NCCL/gIB, télécharge le point de contrôlenvidia/Llama-3.1-405B-Instruct-FP8depuis Hugging Face Hub vers le disque SSD NVMe local du nœud, puis lancepython3 -m dynamo.sglangdans--disaggregation-mode prefillavec les options suivantes :--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- Nœud de calcul de décodage (
Decode) : exécute un nœud de calcul à hôte unique sur le deuxième nœuda4-highgpu-8gavec huit GPU NVIDIA B200. Au démarrage, le pod met en cache les pondérations du modèle sur le disque SSD NVMe local du nœud et lancepython3 -m dynamo.sglangdans--disaggregation-mode decodeavec les options suivantes :--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
Déployez et surveillez le serveur d'inférence désagrégé :
Téléchargez le fichier manifeste de la charge de travail
llama3.1-405b-singlehost-a4.yaml:Vous pouvez également créer un fichier nommé
llama3.1-405b-singlehost-a4.yamlavec le contenu suivant :Appliquez le fichier manifeste de la charge de travail à votre cluster :
Pour surveiller le téléchargement des pondérations et l'initialisation du serveur, listez les pods de votre cluster et diffusez les journaux des pods de préremplissage et de décodage :
Remplacez
YOUR_POD_NAMEpar le nom du pod de préremplissage ou du pod de décodage de la sortiekubectl get pods.Lors de la première exécution, le téléchargement des pondérations du modèle 405B FP8 et l'initialisation des serveurs SGLang prennent environ 10 à 20 minutes. Avant d'envoyer des requêtes, attendez que les pods d'interface, de préremplissage et de décodage affichent
1/1dans la colonneREADYdekubectl get pods:NAME READY STATUS RESTARTS AGE llama3-405b-a4-disagg-0-decode-tgl7q 1/1 Running 0 15m llama3-405b-a4-disagg-0-frontend-wrxq5 1/1 Running 0 15m llama3-405b-a4-disagg-0-prefill-67h5s 1/1 Running 0 15m
Envoyer des requêtes d'inférence
Envoyez une requête de complétion de chat au service Llama 3.1 405B déployé :
Transférez le port local
8000vers le servicellama3-405b-a4-disagg-frontend:Laissez le transfert de port s'exécuter dans cette session de terminal ou exécutez la commande en arrière-plan.
Dans une deuxième session de terminal, envoyez une requête de complétion de chat au point de terminaison
/v1/chat/completions:
Exécuter une charge de travail de benchmark
Effectuez une analyse comparative du serveur Llama 3.1 405B déployé à partir du pod d'interface Dynamo à l'aide de sglang.bench_serving. Configurez le benchmark pour 1 024 jetons d'entrée, 1 024 jetons de sortie (1k/1k), 2 048 requêtes et une simultanéité maximale de 512 :
Une fois l'analyse comparative terminée, recherchez un résultat contenant des métriques telles que les suivantes :
Output token throughputTotal token throughputTTFTTPOT
Effectuer un nettoyage
Pour éviter que des frais supplémentaires ne soient facturés sur votre compte Google Cloud pour les ressources utilisées dans ce tutoriel, supprimez les charges de travail Kubernetes, le cluster GKE et votre bucket Cloud Storage :
Supprimez les ressources DynamoGraphDeployment et ResourceClaimTemplate :
Désinstallez les versions Helm de la plate-forme NVIDIA Dynamo et du planificateur KAI :
Supprimez le secret Kubernetes Hugging Face :
À partir du répertoire
cluster-toolkit, détruisez le cluster GKE et l'infrastructure associée à l'aide de la commandegcluster destroy:Pour supprimer le bucket Cloud Storage qui stocke l'état Terraform, utilisez la commande
gcloud storage rm:gcloud storage rm --recursive "gs://${GCS_BUCKET}"
Étapes suivantes
- En savoir plus sur NVIDIA Dynamo
- En savoir plus sur SGLang.
- En savoir plus sur les VM A4 avec GPU NVIDIA B200
- En savoir plus sur Cluster Toolkit
- Découvrez comment gérer les clusters GKE optimisés pour l'IA.