Ce tutoriel vous explique comment déployer et diffuser Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8), un modèle de codage Mixture of Experts, sur Google Kubernetes Engine (GKE). Le déploiement utilise des accélérateurs TPU v6e (Trillium) multi-hôtes et le framework de diffusion SGLang avec TorchTPU (torchtpu) et la désagrégation préremplissage-décodage (PD).
Dans la configuration de déploiement décrite dans ce tutoriel, vous provisionnez deux pools de nœuds ct6e-standard-4t multi-hôtes, chacun organisé selon une topologie 2x4 (huit puces TPU v6e sur deux nœuds par pool de nœuds, pour un total de 16 puces TPU v6e). Vous utilisez l'API Kubernetes LeaderWorkerSet pour effectuer les opérations suivantes :
- Exécutez des serveurs de préremplissage et de décodage multi-hôtes désagrégés sur des tranches TPU v6e distinctes avec le parallélisme Tensor et le parallélisme expert activés.
- Acheminez les requêtes via un routeur de désagrégation SGLang.
Pour exécuter un workflow de diffusion SGLang TorchTPU multi-hôte similaire sur des accélérateurs TPU7x (Ironwood) avec le modèle Qwen3-Coder-480B plus volumineux, consultez Diffuser Qwen3-Coder-480B sur GKE avec SGLang TorchTPU multi-hôte et désagrégation de PD sur des accélérateurs TPU7x.
Objectifs
- Configurez votre cluster GKE et vos pools de nœuds TPU v6e multi-hôtes.
- Configurez les identifiants et installez le contrôleur LeaderWorkerSet.
- Déployez les charges de travail de préremplissage, de décodage et de routeur SGLang multihôtes.
- Envoyez une requête d'inférence au service de routeur SGLang.
- Exécutez une charge de travail de benchmark de diffusion.
- Effectuer un nettoyage.
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.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
Configurez votre environnement pour le tutoriel :
Installez et initialisez la Google Cloud CLI, puis installez
kubectl. Si vous utilisez Cloud Shell, les deux outils sont préinstallés.Activez l'API Kubernetes Engine, l'API Compute Engine, l'API Cloud TPU et l'API Artifact Registry dans votre projet Google Cloud :
Assurez-vous que votre projet dispose d'un quota de disque et d'un quota d'adresses IP externes suffisants dans la région où se trouve votre capacité TPU :
Dans la console Google Cloud , accédez à la page Quotas et limites du système.
Vérifiez que vous disposez d'au moins 400 Gio de quota Google Cloud Hyperdisk Balanced disponible sur les quatre volumes éphémères de 100 Gio utilisés pour la mise en cache du modèle par les pods de préremplissage et de décodage.
Filtrez par Adresses IPv4 externes régionales en cours d'utilisation et vérifiez que vous disposez d'un quota d'adresses IP suffisant dans votre région cible.
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) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser)
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.
Assurez-vous que votre compte de service Compute Engine par défaut dispose des rôles IAM (Identity and Access Management) suivants sur votre projet :
- Compte de service de nœud par défaut Kubernetes Engine (
roles/container.defaultNodeServiceAccount) - Lecteur Artifact Registry (
roles/artifactregistry.reader)
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_CLUSTER_NAME: nom de votre cluster GKE.YOUR_PROJECT_ID: ID de votre projet Google Cloud.YOUR_REGION: région dans laquelle vous souhaitez déployer votre cluster, par exempleus-central1.YOUR_ZONE: zone dans laquelle vous souhaitez déployer vos pools de nœuds TPU v6e, par exempleus-central1-b.YOUR_RESERVATION_NAME: si vous utilisez une réservation, nom de votre réservation de TPU v6e.YOUR_HF_TOKEN: votre jeton d'accès Hugging Face.
Si vous utilisez une image de conteneur SGLang TorchTPU personnalisée, remplacez lmsysorg/sglang:v0.1.0-tpu dans la variable SGLANG_IMAGE par l'URI de votre image.
Créer le cluster GKE
Pour créer un cluster GKE en mode Standard et associer deux pools de nœuds TPU v6e multi-hôtes pour la désagrégation du préremplissage et du décodage, procédez comme suit :
Créez un cluster GKE régional qui utilise des nœuds
e2-standard-4pour le pool de nœuds par défaut, qui fournit suffisamment de ressources de processeur et de mémoire pour le contrôleur LeaderWorkerSet et le routeur de désagrégation SGLang :Créez deux pools de nœuds TPU v6e multi-hôtes, chacun contenant deux nœuds
ct6e-standard-4t(huit puces TPU v6e dans une topologie2x4par pool de nœuds, pour un total de 16 puces TPU v6e) :Au lieu d'utiliser une réservation spécifique, vous pouvez également créer les pools de nœuds à l'aide de la capacité Spot ou de VM à démarrage flexible :
VM Spot
Provisionnez les pools de nœuds à l'aide de la capacité Spot en remplaçant les options
--reservation-affinity=specificet--reservation="${RESERVATION}"par l'option--spot:La création d'instances utilisant la capacité Spot peut prendre du temps après la création du pool de nœuds, et elles peuvent être préemptées pendant l'exécution de la charge de travail.
VM à démarrage flexible
Provisionnez les pools de nœuds à l'aide de l'option de consommation Démarrage flexible :
Pour en savoir plus, consultez Exécuter une petite charge de travail par lot avec des TPU et des VM à démarrage flexible.
Configurez les identifiants
kubectlpour communiquer avec votre cluster :
Configurer les identifiants et installer LeaderWorkerSet
Pour préparer votre cluster au déploiement SGLang multi-hôte, procédez comme suit :
Créez un secret Kubernetes nommé
hf-secretpour stocker votre jeton d'accès Hugging Face :Installez la ressource CustomResourceDefinition et le contrôleur LeaderWorkerSet sur votre cluster :
Déployer le serveur SGLang multi-hôte
Le fichier manifeste de la charge de travail (qwen3-coder-30b-multihost-disagg-v6e-2x4.yaml) définit les ressources suivantes pour coordonner la mise en service désagrégée du préremplissage et du décodage sur les deux pools de nœuds TPU v6e 2x4 :
StorageClass (
hyperdisk-balanced-tpu) : provisionne des volumes ReadWriteOnce éphémères de 100 Gio, basés sur le stockage Google Cloud Hyperdisk Balanced. Chacun des quatre pods de préremplissage et de décodage installe son propre volume sur/datapour stocker localement les points de contrôleQwen/Qwen3-Coder-30B-A3B-Instruct-FP8téléchargés.Pool de préremplissage (
sglang-prefill-serviceetsglang-tpu-prefill) : exécute un LeaderWorkerSet, qui contient un pod leader et un pod de nœud de calcul, épinglés exclusivement à un pool de nœuds TPU v6e2x4. Ce pool de nœuds comporte huit puces TPU, qui fournissent huit TensorCores. LeaderWorkerSet utilise l'annotationleaderworkerset.sigs.k8s.io/exclusive-topologydéfinie sur"cloud.google.com/gke-nodepool". Les pods lancentsglang.launch_serveravec les options suivantes, en exposant le port8000et le port d'amorçage8998:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
Pool de décodage (
sglang-decode-serviceetsglang-tpu-decode) : exécute un LeaderWorkerSet desize: 2épinglé au deuxième pool de nœuds TPU v6e2x4(huit puces TPU, qui fournissent huit TensorCores). LeaderWorkerSet lancesglang.launch_serveravec les options suivantes :--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
Routeur de désagrégation (
sglang-routeretsglang-service) : exécute un déploiement de processeur qui exécute le modulesglang_router.launch_routeravec l'option--pd-disaggregationet expose un service ClusterIP sur le port8000. Le routeur dirige les requêtes et coordonne le transfert du cache KV entre les servicessglang-prefill-serviceetsglang-decode-service.
Pour déployer et surveiller les serveurs SGLang multi-hôtes, procédez comme suit :
Téléchargez le fichier manifeste de la charge de travail :
Vous pouvez également créer un fichier nommé
qwen3-coder-30b-multihost-disagg-v6e-2x4.yamlavec le contenu suivant :Appliquez le fichier manifeste de la charge de travail à votre cluster :
Vérifiez que les pods de routeur, de préremplissage et de décodage ont été créés :
Lorsque tous les pods sont prêts, la sortie ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE sglang-router-6d87cb8c7d-gv4wr 1/1 Running 0 39m sglang-tpu-decode-0 1/1 Running 0 40m sglang-tpu-decode-0-1 1/1 Running 0 40m sglang-tpu-prefill-0 1/1 Running 0 40m sglang-tpu-prefill-0-1 1/1 Running 0 40mSurveillez les journaux du pod leader de préremplissage et de décodage jusqu'à la fin du démarrage :
Le téléchargement initial du modèle, le chargement des pondérations et la compilation prennent environ sept à dix minutes lors de la première exécution.
Si vous utilisez une capacité préemptive telle que la capacité Spot ou des VM Flex-start, la création de vos nœuds de tranche TPU peut prendre plus de temps après la création du pool de nœuds, et ils peuvent être préemptés pendant l'exécution des charges de travail. Pour en savoir plus, consultez Instances de VM préemptives. Pour vérifier si vos nœuds de tranche TPU ont été créés, consultez Vérifier l'état et les conditions du nœud.
Attendez que les journaux des pods leaders de préremplissage et de décodage affichent le message suivant et que
kubectl get podsaffiche1/1dans la colonneREADYpour tous les pods :The server is fired up and ready to roll!Ouvrez une deuxième session de terminal et transférez le port local
8000verssglang-service:Laissez le transfert de port s'exécuter dans cette session de terminal.
Envoyer des requêtes d'inférence
Revenez à votre première session de terminal et envoyez une requête de complétion de chat au point de terminaison /v1/chat/completions exposé par le routeur SGLang :
Exécuter une charge de travail de benchmark
Pour évaluer le modèle Qwen3-Coder-30B-A3B déployé à l'aide d'une charge de travail d'entrée de 1 024 jetons et de sortie de 1 024 jetons (1k/1k) à partir du pod sglang-router, exécutez la commande suivante :
Une fois le benchmark terminé, recherchez un résultat contenant des métriques telles que les suivantes :
Output token throughput
Total token throughput
TTFT
TPOT
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 ressources suivantes :
Supprimez les charges de travail de préremplissage, de décodage et de routeur SGLang :
Supprimez les pools de nœuds TPU v6e et le cluster GKE :
Étapes suivantes
- En savoir plus sur SGLang.
- En savoir plus sur les TPU v6e (Trillium)
- En savoir plus sur Cloud TPU
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2026/11/03 (UTC).