Ce tutoriel explique comment affiner un grand modèle de langage (google/gemma-4-31b-it) Gemma 4 31B sur un cluster Google Kubernetes Engine (GKE) Autopilot multihôte et multi-GPU sur Google Cloud. Ce cluster utilise deux instances de machine virtuelle A4 (a4-highgpu-8g) avec un total de 16 GPU NVIDIA B200.
Les trois principaux processus décrits dans ce tutoriel sont les suivants :
- Déployez un cluster GKE multihôte en mode Autopilot.
- Créez une image de conteneur personnalisée avec les dépendances de réglage précis requises à l'aide de Cloud Build.
- Orchestrez une charge de travail d'affinage distribuée sur plusieurs hôtes sur les 16 GPU en utilisant Kubernetes JobSet et la bibliothèque Hugging Face Accelerate avec Fully Sharded Data Parallel v2 (FSDP v2), en envoyant les points de contrôle vers Hugging Face Hub.
Ce tutoriel s'adresse aux ingénieurs en machine learning (ML), aux chercheurs, aux administrateurs et opérateurs de plate-forme, ainsi qu'aux spécialistes des données et de l'IA qui déploient des clusters GKE sur Google Cloud pour affiner les LLM sur plusieurs hôtes.
Objectifs
Accédez au modèle Gemma 4 à l'aide de Hugging Face.
Préparez votre environnement.
Créez et déployez un cluster GKE A4 multihôte.
Ajustez le modèle Gemma 4 31B sur 16 GPU à l'aide de Kubernetes
JobSetet de Hugging Face Accelerate avec FSDP v2.surveiller votre job ;
Affichez les pondérations de l'adaptateur affiné sur le hub Hugging Face.
Effectuer un nettoyage.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue,
utilisez le simulateur de coût.
Avant de commencer
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 Artifact Registry (
roles/artifactregistry.admin) - Éditeur Cloud Build (
roles/cloudbuild.builds.editor) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) - Administrateur de compte de service (
roles/iam.serviceAccountAdmin) - Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) - Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin)
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.
Activez les API requises, le cas échéant :
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.gcloud services enable compute.googleapis.com
container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com Activez le compte de service Compute Engine par défaut pour votre projetGoogle Cloud :
export PROJECT_NUMBER="$(gcloud projects describe "YOUR_PROJECT_ID" --format "value(project_number)")" gcloud iam service-accounts enable "${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --project=YOUR_PROJECT_IDAttribuez les rôles IAM suivant le principe du moindre privilège dont le compte de service Compute Engine par défaut a besoin pour créer l'image de conteneur et exécuter la charge de travail d'affinage :
ROLES=( "roles/artifactregistry.writer" "roles/cloudbuild.builds.builder" "roles/logging.logWriter" "roles/monitoring.metricWriter" "roles/monitoring.viewer" "roles/stackdriver.resourceMetadata.writer" "roles/storage.objectViewer" ) for role in "${ROLES[@]}"; do gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="${role}" 1>/dev/null done unset ROLESVérifiez que les rôles ont été attribués au compte de service Compute Engine par défaut :
echo "Displaying roles for ${PROJECT_NUMBER}-compute@developer.gserviceaccount.com:" gcloud projects get-iam-policy YOUR_PROJECT_ID \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --format="table(bindings.role)"Créez des identifiants d'authentification locaux pour votre compte utilisateur :
gcloud auth application-default login
Activez OS Login pour votre projet :
gcloud compute project-info add-metadata \ --metadata=enable-oslogin=TRUE \ --project=YOUR_PROJECT_ID
Accéder à Gemma 4 à l'aide de Hugging Face
Pour utiliser Hugging Face afin d'accéder à Gemma 4, procédez comme suit :
- Connectez-vous à Hugging Face et acceptez le contrat de licence Gemma 4.
- Créez un jeton d'accès
writeHugging Face.
Cliquez sur Votre profil > Paramètres > Jetons d'accès > + Créer un jeton. - Copiez et enregistrez la valeur du jeton d'accès
write. Vous utilisez ce jeton pour télécharger le modèle de base et transférer les points de contrôle de l'adaptateur affiné vers Hugging Face Hub avant que GKE ne réduise la capacité des nœuds GPU.
Préparer votre environnement
Pour préparer votre environnement, définissez les variables d'environnement suivantes :
Remplacez les éléments suivants :
YOUR_PROJECT_ID : ID du Google Cloud projet dans lequel vous souhaitez créer le cluster GKE.
YOUR_CLUSTER_NAME : nom du cluster GKE à créer.
YOUR_REGION : région dans laquelle vous souhaitez créer votre cluster GKE. Vous ne pouvez créer le cluster que dans la région où se trouve votre réservation.
YOUR_RESERVATION_NAME : identifiant de votre capacité réservée.
YOUR_HF_TOKEN : jeton d'accès
writeHugging Face que vous avez créé dans la section précédente.YOUR_ARTIFACT_REGISTRY_LOCATION : région Google Cloud (par exemple,
us-central1) dans laquelle vous souhaitez créer votre dépôt Artifact Registry. Pour réduire la latence d'extraction des images, utilisez la même région que celle spécifiée pour YOUR_REGION.YOUR_NUMBER_OF_NODES : nombre de nœuds de VM A4 dans votre job d'affinage. Pour ce tutoriel multihôte avec 16 GPU NVIDIA B200 répartis sur deux instances
a4-highgpu-8g, définissez cette valeur sur2.
Créer un cluster GKE multihôte en mode Autopilot
Créez un cluster GKE multihôte en mode Autopilot :
La création du cluster GKE peut prendre plusieurs minutes. Pour vérifier que Google Cloud a terminé de créer votre cluster, accédez à Clusters Kubernetes dans la console Google Cloud .
Configurer kubectl pour communiquer avec votre cluster GKE
Configurez kubectl pour communiquer avec votre cluster GKE :
Créer un secret Kubernetes pour les identifiants Hugging Face
Créez un secret Kubernetes pour stocker votre jeton Hugging Face :
Préparer votre charge de travail
Pour préparer votre charge de travail, procédez comme suit :
Créer des scripts de charge de travail
Pour créer les fichiers de configuration et les scripts utilisés par votre charge de travail d'affinage, procédez comme suit :
Créez un répertoire pour les scripts de charge de travail. Utilisez ce répertoire comme répertoire de travail.
Créez le fichier
cloudbuild.yamlpour créer l'image de conteneur de votre charge de travail avec Cloud Build et la transférer vers Artifact Registry :Créez un fichier
Dockerfilepour définir l'environnement et installer les dépendances requises pour effectuer le job d'affinage :Créez le fichier
accel_fsdp_gemma4_config.yaml. Cette configuration indique à Hugging Face Accelerate de partitionnerGemma4TextDecoderLayersur 16 GPU sur deux hôtes à l'aide de FSDP v2 :Créez le fichier manifeste
finetune.yamlKubernetesJobSet:Créez le script d'affinage supervisé
finetune.py:
Créer un conteneur d'affinage à l'aide de Docker et Cloud Build
Créez un dépôt Docker Artifact Registry :
Installez les définitions de ressources personnalisées (CRD)
JobSetrequises pour orchestrer les charges de travail multihôtes :Dans le répertoire
llm-finetuning-gemmaque vous avez créé lors d'une étape précédente, envoyez la compilation du conteneur à Cloud Build :Exportez l'URL de l'image de conteneur multi-hôte. Vous en aurez besoin lors d'une prochaine étape de ce tutoriel, lorsque vous déploierez le fichier manifeste
JobSet:
Démarrer votre charge de travail d'affinage
Pour déployer et surveiller votre charge de travail d'affinage distribué, procédez comme suit :
Remplacez les variables d'environnement dans le fichier manifeste d'affinage pour créer le job d'affinage :
Étant donné que votre cluster s'exécute en mode GKE Autopilot, le provisionnement des deux nœuds A4 compatibles avec les GPU et l'extraction de l'image de conteneur peuvent prendre quelques minutes.
Surveillez les pods de nœud de calcul jusqu'à ce que les deux pods passent à l'état
Running:Une fois que les pods de nœuds de calcul sont passés à l'état
Running, diffusez les journaux d'entraînement :
Surveiller votre charge de travail
Vous pouvez surveiller l'utilisation des GPU dans votre cluster GKE pour vérifier que les 16 GPU des deux hôtes A4 traitent activement les étapes d'entraînement. Générez et ouvrez le lien d'observabilité dans votre navigateur :
Lorsque vous surveillez votre charge de travail, attendez-vous au comportement suivant :
- Utilisation du GPU : pour une tâche de réglage fin distribuée saine, vous pouvez vous attendre à ce que l'utilisation du GPU sur les 16 GPU NVIDIA B200 augmente et se stabilise entre 95 % et 100% pendant les étapes d'entraînement.
- Durée du job : sur deux nœuds
a4-highgpu-8g(16 GPU B200), le job de réglage fin de trois époques prend environ deux heures et demie.
Afficher les pondérations de votre adaptateur affiné
Une fois l'entraînement terminé, consultez les pondérations et les points de contrôle de votre adaptateur LoRA affiné sur Hugging Face Hub à l'adresse https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql.
Effectuer un nettoyage
Pour éviter des frais supplémentaires, supprimez les ressources créées au cours de ce tutoriel.
Supprimer vos ressources
Supprimez l'affinage
JobSet:Supprimez le cluster GKE :
Supprimez votre dépôt Artifact Registry :