Ce tutoriel explique comment affiner le grand modèle de langage (LLM) Gemma 3 sur un cluster Slurm à nœuds multiples qui utilise deux instances de machine virtuelle (VM) A4. Dans ce tutoriel, vous allez effectuer les opérations suivantes :
Créer une image personnalisée
Configurez un réseau RDMA.
Exécutez un job de réglage distribué. Pour un entraînement efficace sur plusieurs nœuds, vous utilisez la bibliothèque Hugging Face Accelerate avec le parallélisme des données entièrement segmentées (FSDP).
Ce tutoriel s'adresse aux ingénieurs en machine learning (ML), aux administrateurs et opérateurs de plate-forme, ainsi qu'aux spécialistes des données et de l'IA qui souhaitent utiliser les fonctionnalités de planification des tâches Slurm pour gérer les charges de travail de réglage fin.
Objectifs
Accédez à Gemma 3 à l'aide de Hugging Face.
Préparez votre environnement.
Créez un cluster Slurm A4.
Préparer votre charge de travail.
Exécutez un job d'affinage.
surveiller votre job ;
Effectuer un nettoyage.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Avant de commencer
-
Installez la Google Cloud CLI.
-
Configurez la gcloud CLI afin d'utiliser votre identité fédérée.
Pour en savoir plus, consultez Se connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez l'API requise :
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 file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projetUSER_IDENTIFIER: identifiant de votre compte utilisateur compte. Pour consulter des exemples, reportez-vous à la page Représenter les utilisateurs de pools de personnel dans les stratégies IAM.ROLE: rôle IAM que vous accordez à votre compte utilisateur.
- Activez le compte de service par défaut pour votre projet Google Cloud :
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Remplacez PROJECT_NUMBER par votre numéro de projet. Pour consulter le numéro de votre projet, consultez Obtenir un projet existant.
- Attribuez le rôle Éditeur (
roles/editor) au compte de service par défaut :gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- 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
- Connectez-vous à votre compte Hugging Face ou créez-en un.
Accéder à Gemma 3 à l'aide de Hugging Face
Pour utiliser Hugging Face afin d'accéder à Gemma 3, procédez comme suit :
Signez le contrat de consentement pour utiliser Gemma 3 12B.
Créez un jeton d'accès
readHugging Face. Cliquez sur Votre profil > Paramètres > Jetons d'accès > + Créer un jeton.Copiez et enregistrez la valeur du jeton
read access. Vous en aurez besoin dans la suite de ce tutoriel.
Installer Cluster Toolkit
Pour en savoir plus sur l'utilisation de gcluster et la gestion des clusters, consultez la présentation de Cluster Toolkit.
Préparez la version de Cluster Toolkit :
Téléchargez la version :
Définissez le chemin
gcluster:
Préparer votre environnement
Pour préparer votre environnement, procédez comme suit :
Définissez les variables d'environnement par défaut :
Remplacez les éléments suivants :
YOUR_PROJECT_ID: ID du projetGoogle Cloud dans lequel vous souhaitez créer votre bucket Cloud Storage.YOUR_ZONE: zone où se trouve votre réservation.YOUR_REGION: région où se trouve votre réservation.RESERVATION_NAME: URL ou nom de la réservation que vous souhaitez utiliser pour créer votre cluster Slurm.YOUR_CLUSTER_NAME: nom du cluster Slurm que vous souhaitez créer.YOUR_GCS_BUCKET: nom de votre bucket Cloud Storage qui respecte les exigences de dénomination des buckets.YOUR_HF_TOKEN: jeton d'accès Hugging Face que vous avez créé dans la section précédente.
Créez un bucket Cloud Storage :
Créer un cluster Slurm A4
Pour créer un cluster Slurm A4, procédez comme suit :
Créez le fichier
a4high-slurm-deployment.yaml:Préparez les fichiers manifestes :
Créez les fichiers manifestes Terraform :
Corrigez les fichiers manifestes :
Déployez le cluster :
La commande
gcluster deployse déroule en deux phases :La première phase consiste à créer une image personnalisée avec tous les logiciels préinstallés. Cette opération peut prendre jusqu'à 45 minutes.
La deuxième phase déploie le cluster à l'aide de cette image personnalisée. Cette opération prend généralement moins de temps que la première phase.
Si la première phase réussit, mais que la deuxième échoue, vous pouvez essayer de déployer à nouveau le cluster Slurm en ignorant la première phase :
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 scripts que votre charge de travail d'affinage utilisera, procédez comme suit :
Pour configurer l'environnement virtuel Python, créez le fichier
install_environment.shavec le contenu suivant :Pour spécifier les configurations de votre job d'affinage, créez le fichier
accelerate_config.yamlavec le contenu suivant :Pour spécifier les tâches à exécuter sur votre cluster Slurm, créez le fichier
submit.slurmavec le contenu suivant :Pour spécifier les dépendances de votre job d'affinage, créez le fichier
requirements.txtavec le contenu suivant :Pour spécifier les instructions de votre job, créez le fichier
train.pyavec le contenu suivant :
Importer des scripts dans le cluster Slurm
Pour importer les scripts que vous avez créés dans la section précédente vers le cluster Slurm, procédez comme suit :
Définissez la variable
LOGIN_NODEen récupérant le nom du nœud de connexion de votre cluster :La variable
LOGIN_NODEstocke une valeur semblable à${CLUSTER_NAME}-login-001.Importez vos scripts dans le répertoire d'accueil du nœud de connexion :
Se connecter au cluster Slurm
Connectez-vous au nœud de connexion et propagez votre jeton Hugging Face à la nouvelle session :
Installer des frameworks et des outils
Après vous être connecté au nœud de connexion, configurez un environnement virtuel Python avec les dépendances requises :
Démarrer votre charge de travail d'affinage
Pour démarrer votre charge de travail de réglage fin :
Envoyez le job au planificateur Slurm et récupérez l'ID du job :
Sur le nœud de connexion de votre cluster Slurm, vous pouvez surveiller la progression du job en vérifiant les fichiers de sortie créés dans votre répertoire
home:Si votre job démarre correctement, le fichier
.erraffiche une barre de progression qui se met à jour à mesure que votre job progresse.
Surveiller votre charge de travail
Vous pouvez surveiller l'utilisation des GPU dans votre cluster Slurm pour vérifier que votre job de réglage fin s'exécute efficacement. Pour ce faire, ouvrez le lien suivant dans votre navigateur :
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
Lorsque vous surveillez votre charge de travail, vous pouvez voir les éléments suivants :
Utilisation des GPU : pour une tâche d'affinage saine, vous pouvez vous attendre à ce que l'utilisation de vos 16 GPU (huit GPU pour chaque VM du cluster) augmente et se stabilise à un niveau spécifique tout au long de votre entraînement.
Durée du job : l'exécution du job devrait prendre environ une heure.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer votre cluster Slurm
Pour supprimer votre cluster Slurm :
Si vous devez supprimer tous les réseaux VPC, règles de pare-feu, routeurs, adresses IP et sous-réseaux associés au projet, procédez comme suit :
Supprimer votre projet
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID