Dans ce guide, vous allez déployer et diffuser des LLM à l'aide de nœuds TPU à hôte unique sur GKE avec le framework de diffusion vLLM. Ce guide fournit des instructions et des configurations pour déployer les modèles ouverts suivants :
Ce guide est destiné aux ingénieurs en machine learning (ML) et aux spécialistes des données et de l'IA qui souhaitent explorer les fonctionnalités d'orchestration de conteneurs Kubernetes pour diffuser des modèles ouverts pour l'inférence. Pour en savoir plus sur les rôles courants et les exemples de tâches cités dans le contenu Google Cloud , consultez Rôles utilisateur et tâches courantes de GKE.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Make sure that you have the following role or roles on the project: roles/artifactregistry.admin, roles/browser, roles/compute.networkAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/resourcemanager.projectIamAdmin, and roles/serviceusage.serviceUsageAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.
- Dans la liste Sélectionner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
- Créez un compte Hugging Face.
- Assurez-vous que votre projet dispose d'un quota TPU suffisant (GKE Standard) ou d'un quota TPU suffisant (GKE Autopilot). Pour en savoir plus, consultez Planifier des TPU dans GKE.
- Cliquez sur Votre profil > Paramètres > Jetons d'accès.
- Sélectionnez New Token (Nouveau jeton).
- Spécifiez le nom de votre choix et un rôle d'au moins Lecteur.
- Sélectionnez Générer un jeton.
- Copiez le jeton dans votre presse-papiers.
Dans Cloud Shell, clonez le dépôt suivant :
git clone https://github.com/GoogleCloudPlatform/accelerated-platforms --branch hf-model-vllm-tpu-tutorial && \ cd accelerated-platforms && \ export ACP_REPO_DIR="$(pwd)"Définissez vos variables d'environnement :
export TF_VAR_platform_default_project_id=PROJECT_ID export HF_TOKEN_READ=HF_TOKENRemplacez les valeurs suivantes :
PROJECT_ID: ID de votre projet Google Cloud.HF_TOKEN: jeton Hugging Face que vous avez généré précédemment.
Ce guide nécessite Terraform version 1.8.0 ou ultérieure. Cloud Shell est installé par défaut avec Terraform v1.5.7.
Pour mettre à jour la version de Terraform dans Cloud Shell, vous pouvez exécuter le script suivant. Ce script installe l'outil
tfswitchet Terraform v1.8.0 dans votre répertoire d'accueil. Suivez les instructions du script pour définir la variable d'environnement nécessaire ou transmettez l'indicateur--modify-rc-fileau script."${ACP_REPO_DIR}/tools/bin/install_terraform.sh" && \ export PATH=${HOME}/bin:${HOME}/.local/bin:${PATH}Exécutez le script de déploiement suivant. Le script de déploiement active les API Google Cloud requises et provisionne l'infrastructure nécessaire pour ce guide. Cela inclut un nouveau réseau VPC, un cluster GKE avec des nœuds privés et d'autres ressources d'assistance. L'exécution du script peut prendre plusieurs minutes.
Vous pouvez diffuser des modèles à l'aide de TPU dans un cluster GKE Autopilot ou Standard. Un cluster Autopilot offre une expérience Kubernetes entièrement gérée. Pour en savoir plus sur le choix du mode de fonctionnement GKE le mieux adapté à vos charges de travail, consultez À propos des modes de fonctionnement GKE.
Autopilot
"${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-tpu-model/deploy-ap.sh"Standard
"${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-tpu-model/deploy-standard.sh"Une fois ce script terminé, vous disposerez d'un cluster GKE prêt pour les charges de travail d'inférence.
Exécutez la commande suivante pour définir les variables d'environnement à partir de la configuration partagée :
source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"Le script de déploiement crée un secret dans Secret Manager pour stocker votre jeton Hugging Face. Vous devez ajouter manuellement votre jeton à ce secret avant de déployer le cluster. Dans Cloud Shell, exécutez cette commande pour ajouter le jeton à Secret Manager.
echo ${HF_TOKEN_READ} | gcloud secrets versions add ${huggingface_hub_access_token_read_secret_manager_secret_name} \ --data-file=- \ --project=${huggingface_secret_manager_project_id}Définissez les variables d'environnement pour le modèle que vous souhaitez déployer :
Gemma 3 1B-it
export ACCELERATOR_TYPE="v5e" export HF_MODEL_ID="google/gemma-3-1b-it"Gemma 3 4B-it
export ACCELERATOR_TYPE="v5e" export HF_MODEL_ID="google/gemma-3-4b-it"Gemma 3 27B-it
export ACCELERATOR_TYPE="v5e" export HF_MODEL_ID="google/gemma-3-27b-it"Pour d'autres configurations, y compris d'autres variantes de modèles et types de TPU, consultez les fichiers manifestes disponibles dans le dépôt GitHub
accelerated-platforms.Importez les variables d'environnement à partir de votre déploiement. Ces variables d'environnement contiennent les informations de configuration nécessaires à partir de l'infrastructure que vous avez provisionnée.
source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"Exécutez le script suivant pour configurer les ressources de téléchargement du modèle Hugging Face qui téléchargent le modèle dans Cloud Storage :
"${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/configure_huggingface.sh"Appliquez les ressources de téléchargement de modèle Hugging Face :
kubectl apply --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/huggingface"Surveillez le job de téléchargement du modèle Hugging Face jusqu'à ce qu'il soit terminé.
until kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} wait job/${HF_MODEL_ID_HASH}-hf-model-to-gcs --for=condition=complete --timeout=10s >/dev/null; do clear kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} get job/${HF_MODEL_ID_HASH}-hf-model-to-gcs | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e 'Complete' echo -e "\nhf-model-to-gcs logs(last 10 lines):" kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} logs job/${HF_MODEL_ID_HASH}-hf-model-to-gcs --container=hf-model-to-gcs --tail 10 doneVérifiez que le job de téléchargement du modèle Hugging Face est terminé.
kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} get job/${HF_MODEL_ID_HASH}-hf-model-to-gcs | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e 'Complete'Supprimez les ressources de téléchargement du modèle Hugging Face.
kubectl delete --ignore-not-found --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/huggingface"Importez les variables d'environnement à partir de votre déploiement.
source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"Vérifiez que le nom du modèle Hugging Face est défini.
echo "HF_MODEL_NAME=${HF_MODEL_NAME}"Configurez les ressources vLLM.
"${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-tpu/vllm/configure_vllm.sh"Déployez la charge de travail d'inférence sur votre cluster GKE.
kubectl apply --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-tpu/vllm/${ACCELERATOR_TYPE}-${HF_MODEL_NAME}"Surveillez le déploiement de la charge de travail d'inférence jusqu'à ce qu'elle soit disponible.
until kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} wait deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --for=condition=available --timeout=10s >/dev/null; do clear kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} get deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e '1/1 1 1' echo -e "\nfetch-safetensors logs(last 10 lines):" kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=fetch-safetensors --tail 10 echo -e "\ninference-server logs(last 10 lines):" kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10 doneVérifiez que le déploiement de la charge de travail d'inférence est disponible.
kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} get deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e '1/1 1 1' echo -e "\nfetch-safetensors logs(last 10 lines):" kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=fetch-safetensors --tail 10 echo -e "\ninference-server logs(last 10 lines):" kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10Exécutez le script suivant pour configurer le transfert de port et envoyer un exemple de requête au modèle.
kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} port-forward service/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} 8000:8000 >/dev/null & PF_PID=$! while ! echo -e '\x1dclose\x0d' | telnet localhost 8000 >/dev/null 2>&1; do sleep 0.1 done curl http://127.0.0.1:8000/v1/chat/completions \ --data '{ "model": "/gcs/'${HF_MODEL_ID}'", "messages": [ { "role": "user", "content": "What is GKE?" } ] }' \ --header "Content-Type: application/json" \ --request POST \ --show-error \ --silent | jq kill -9 ${PF_PID}Vous devriez obtenir une réponse JSON du modèle répondant à la question.
Supprimez la charge de travail d'inférence :
kubectl delete --ignore-not-found --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-tpu/vllm/${ACCELERATOR_TYPE}-${HF_MODEL_NAME}"Nettoyez les ressources :
Autopilot
"${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-tpu-model/teardown-ap.sh"Standard
"${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-tpu-model/teardown-standard.sh"- En savoir plus sur l'inférence de modèles d'IA et de ML sur GKE
- Analysez les performances et les coûts d'inférence des modèles avec l'outil de démarrage rapide de l'inférence GKE.
- Explorez le dépôt GitHub accelerated-platforms utilisé pour créer cette architecture.
Accéder au modèle
Acceptez les conditions de licence pour tous les modèles avec accès restreint que vous souhaitez utiliser (comme Gemma) sur leur page de modèle Hugging Face respective.
Pour accéder au modèle via Hugging Face, vous avez besoin d'un jeton Hugging Face.
Pour générer un nouveau jeton si vous n'en possédez pas, procédez comme suit:
Provisionner l'environnement d'inférence GKE
Dans cette section, vous allez déployer l'infrastructure nécessaire pour diffuser votre modèle.
Lancer Cloud Shell
Ce guide utilise Cloud Shell pour exécuter les commandes. Cloud Shell est préinstallé avec les outils nécessaires, y compris
gcloud,kubectletgit.Dans la console Google Cloud , démarrez une instance Cloud Shell :
Une session s'ouvre dans le volet inférieur de la console Google Cloud .
Déployer l'architecture de base
Pour provisionner le cluster GKE et les ressources nécessaires pour accéder aux modèles de Hugging Face, procédez comme suit :
Déployer un modèle ouvert
Vous êtes maintenant prêt à télécharger et à déployer le modèle.
Sélectionnez un modèle
Télécharger le modèle
Déployer le modèle
Tester votre déploiement
Effectuer un nettoyage
Pour éviter que des frais ne vous soient facturés, supprimez toutes les ressources que vous avez créées.
Étapes suivantes
-