Ce tutoriel vous explique comment déployer et diffuser Qwen3.8-2.4T (nvidia/Qwen3.8-2.4T-A95B-NVFP4), un modèle Mixture of Experts de 2,4 billions de paramètres avec 95 milliards de paramètres actifs quantifiés en NVFP4, sur Google Kubernetes Engine (GKE) surGoogle Cloud. Le déploiement utilise Cluster Toolkit, quatre instances de machines virtuelles (VM) A4 (a4-highgpu-8g) multi-hôtes avec un total de 32 GPU NVIDIA B200, NVIDIA Dynamo et le framework de diffusion SGLang avec désagrégation préremplissage-décodage (PD).
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 quatre nœuds a4-highgpu-8g connectés via un réseau GPUDirect accès direct à la mémoire à distance (RDMA). Vous installez ensuite le planificateur KAI et la plate-forme NVIDIA Dynamo avec la planification de groupe Grove, puis vous préparez les pondérations du modèle dans Cloud Storage. Ensuite, vous déployez une ressource personnalisée DynamoGraphDeployment qui installe le bucket avec Cloud Storage FUSE et sépare le préremplissage et le décodage sur deux pools de nœuds de calcul multi-hôtes de 16 GPU avec parallélisme de tenseur, parallélisme d'expert et un cache KV FP8.
Objectifs
- Installez Cluster Toolkit et provisionnez un cluster GKE A4 multi-hôte en mode Standard.
- Installez le planificateur KAI et la plate-forme NVIDIA Dynamo avec la planification de groupe Grove sur votre cluster.
- Préparez les pondérations du modèle Qwen3.8-2.4T dans un bucket Cloud Storage.
- Déployez un serveur d'inférence SGLang multi-hôte et désagrégé par disque persistant sur quatre nœuds A4, avec un total de 32 GPU NVIDIA B200.
- 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 ou chemin d'accès au bloc de réservation étendu au formatRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_BUCKET_NAME: nom unique du bucket Cloud Storage qui stocke l'état Terraform pour Cluster Toolkit et les pondérations du modèle Qwen3.8-2.4T préparé.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 quatre 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 et les pondérations du modèle préparé, créez un bucket Cloud Storage dans la même région que votre réservation A4, avec l'accès uniforme au niveau du bucket et la gestion des versions d'objets activés :
Créez le fichier de configuration de déploiement
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpour quatre 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é :
Stocker les pondérations du modèle dans Cloud Storage
Préparez le point de contrôle nvidia/Qwen3.8-2.4T-A95B-NVFP4 dans votre bucket Cloud Storage régional (gs://${GCS_BUCKET}) afin que les pods de nœuds de calcul d'inférence puissent installer les pondérations avec Cloud Storage FUSE au lieu de les télécharger depuis Hugging Face à chaque démarrage à froid :
Attribuez le rôle Utilisateur d'objets Storage (
roles/storage.objectUser) sur le bucketgs://${GCS_BUCKET}que vous avez créé dans Créer le cluster GKE au compte de service Google lié au compte de service Kubernetesworkload-identity-k8s-sa:Téléchargez les fichiers manifestes
qwen3.8-2.4t-nvfp4-stage-weights-job.yamletqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml:Vous pouvez également créer un fichier nommé
qwen3.8-2.4t-nvfp4-stage-weights-job.yamlavec le contenu suivant. Ce job indexé exécute quatre pods parallèles sur vos quatre nœuds A4. Chaque pod télécharge une tranche de taille équilibrée du point de contrôlenvidia/Qwen3.8-2.4T-A95B-NVFP4sur le disque SSD NVMe local du nœud et l'importe dansgs://${GCS_BUCKET}/hf_models/models--nvidia--qwen3_8-2_4t-a95b-nvfp4à l'aide degcloud storage rsync:Remplacez
qwen3.8-2.4t-nvfp4-stage-weights-job.yamlpar le nom de votre bucket Cloud Storage, démarrez le job de préproduction, attendez que les quatre pods aient terminé d'importer les pondérations, puis supprimez le job terminé :Le téléchargement des pondérations du modèle sur le disque SSD NVMe local et leur importation dans Cloud Storage prennent environ 25 minutes.
Facultatif : Pendant l'exécution du job de préproduction, diffusez les journaux d'un pod de préproduction dans une deuxième session de terminal pour surveiller la progression du téléchargement :
Remplacez
YOUR_POD_NAMEpar le nom de l'un des podsqwen3-8-2-4t-stage-weightsdekubectl get pods.
Déployer le serveur SGLang désagrégé multi-hôte
Le fichier manifeste de la charge de travail (qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml) définit un Kubernetes ResourceClaimTemplate (all-mrdma), qui alloue les appareils RDMA multi-NIC du nœud (mrdma.google.com) via DRA, les ressources Role et RoleBinding pour le compte de service workload-identity-k8s-sa, et un NVIDIA Dynamo DynamoGraphDeployment (qwen3-8-2-4t-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 pool de nœuds de calcul à deux nœuds sur deux nœudsa4-highgpu-8gavec un total de 16 GPU NVIDIA B200. Chaque pod installe les pondérationsnvidia/Qwen3.8-2.4T-A95B-NVFP4préparées à partir de votre bucket Cloud Storage sur/model-weightsà l'aide du pilote CSI Cloud Storage FUSE (gcsfuse.csi.storage.gke.io) avec la mise en cache des fichiers SSD NVMe locaux, source l'environnement NCCL/gIB et lancepython3 -m dynamo.sglangdans--disaggregation-mode prefillavec les options suivantes :--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3--disable-flashinfer-autotune
Nœud de calcul de décodage (
Decode) : exécute un pool de nœuds de calcul à deux nœuds sur les deux nœudsa4-highgpu-8grestants, avec un total de 16 GPU NVIDIA B200. Chaque pod installe les pondérations du modèle préparé à partir de Cloud Storage sur/model-weightsvia le pilote CSI Cloud Storage FUSE et lancepython3 -m dynamo.sglangdans--disaggregation-mode decodeavec les options suivantes :--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3
Déployez et surveillez le serveur d'inférence désagrégé :
Examinez le fichier manifeste de charge de travail
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlque vous avez téléchargé précédemment ou créez un fichier nomméqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlavec le contenu suivant :Remplacez
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlpar le nom de votre bucket Cloud Storage et appliquez le fichier manifeste de la charge de travail à votre cluster :Pour surveiller le chargement des pondérations et l'initialisation du serveur, listez les pods de votre cluster, puis diffusez les journaux du pod leader de préremplissage et du pod leader de décodage :
Remplacez
YOUR_POD_NAMEpar le nom du pod leader de préremplissage ou du pod leader de décodage de la sortiekubectl get pods.Lors d'un démarrage à froid, il faut environ 4 à 5 minutes pour diffuser les 2 400 000 000 000 poids du modèle NVFP4 (~1,44 To sur 200 segments) depuis Cloud Storage via Cloud Storage FUSE et initialiser les serveurs SGLang multi-hôtes. Avant d'envoyer des requêtes, attendez que les pods d'interface affichent
1/1et que les pods de préremplissage et de décodage affichent2/2dans la colonneREADYdekubectl get pods:NAME READY STATUS RESTARTS AGE qwen3-8-2-4t-a4-disagg-0-decode-0-decode-ldr-wz92h 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-decode-0-decode-wkr-fb8g6 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-frontend-jrx4s 1/1 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-ldr-7nz25 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-wkr-7d5cw 2/2 Running 0 5m
Envoyer des requêtes d'inférence
Envoyez une requête de complétion de chat au service Qwen3.8-2.4T déployé :
Transférez le port local
8000vers le serviceqwen3-8-2-4t-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 Qwen3.8-2.4T déployé à partir du pod d'interface Dynamo à l'aide de sglang.bench_serving avec une configuration de 1 024 jetons d'entrée, 1 024 jetons de sortie (1k/1k), 256 requêtes et une simultanéité maximale de 128 :
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:Supprimez le bucket Cloud Storage qui stocke les pondérations du modèle préparé et l'état Terraform :
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.