Ce tutoriel explique comment entraîner un grand modèle de langage (LLM) sur un cluster Slurm à nœuds et GPU multiples sur Google Cloud. Le modèle que vous utilisez dans ce tutoriel est basé sur un modèle Qwen2 à 1,5 milliard de paramètres. Le cluster Slurm utilise deux machines virtuelles a4-highgpu-8g, chacune dotée de huit GPU NVIDIA B200.
Les deux principaux processus décrits dans ce tutoriel sont les suivants :
- Déployez un cluster Slurm de haute performance adapté à la production à l'aide deGoogle Cloud Cluster Toolkit. Dans le cadre de ce déploiement, vous allez créer une image de VM personnalisée avec les logiciels nécessaires préinstallés. Vous configurez également une instance Filestore partagée et un réseau RDMA à haut débit.
- Une fois le cluster déployé, vous exécutez un job de pré-entraînement distribué à l'aide de l'ensemble de scripts qui accompagnent ce tutoriel. Le job utilise la bibliothèque Hugging Face Accelerate.
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 souhaitent déployer des clusters Slurm hautes performances sur Google Cloud pour entraîner des LLM.
Objectifs
- Accédez au modèle Qwen2 à l'aide de Hugging Face.
- Préparez votre environnement.
- Créez et déployez un cluster Slurm A4 de niveau production.
- Entraînez le modèle Qwen2 à l'aide de la bibliothèque Accelerate .
- surveiller votre job ;
- 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
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous 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
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous 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.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud 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 . Par exemple,myemail@example.com.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@developer.gserviceaccount.com \ --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@developer.gserviceaccount.com" \ --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 à Qwen2 à l'aide de Hugging Face
Pour utiliser Hugging Face afin d'accéder à Qwen2, procédez comme suit :
Installer Cluster Toolkit
Cluster Toolkit est un outil Open Source qui simplifie le déploiement des charges de travail de calcul hautes performances (HPC), d'intelligence artificielle (IA) et de machine learning (ML) sur Google Cloud. 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: nom du Google Cloud projet dans lequel vous souhaitez créer le cluster GKE.YOUR_CLUSTER_NAME: nom du cluster Slurm que vous souhaitez créer.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_BUCKET_NAME: nom du bucket dans lequel vous stockez les résultats du point de contrôle d'entraînement. Avant de le créer, familiarisez-vous avec les règles de dénomination des buckets.HUGGING_FACE_TOKEN: jeton Hugging Face que vous avez créé à une étape 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: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'à 50 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'entraînement 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 un fichier
requirements.txtavec le contenu suivant :
Remarque : Ce tutoriel n'utilise pas les dernières versions des dépendances NVIDIA et PyTorch. Si vous avez besoin de dépendances plus récentes, consultez la documentation NVIDIA et la documentation PyTorch.Pour télécharger, tokeniser et prétraiter l'ensemble de données dans un format prêt pour l'entraînement, créez un fichier
preprocess_data.pyavec le contenu suivant :Pour spécifier les instructions de votre job, créez un 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.Créez une règle de pare-feu :
Importez vos scripts dans le répertoire d'accueil du nœud de connexion :
Se connecter au cluster Slurm
Connectez-vous au cluster Slurm en vous connectant au nœud de connexion via SSH :
Installer des frameworks et des outils
Une fois connecté au nœud de connexion, installez les frameworks et les outils en procédant comme suit :
Configurez un environnement virtuel Python avec toutes les dépendances requises :
Commencer le pré-entraînement de votre charge de travail
Pour commencer à entraîner votre charge de travail :
Envoyez le job au planificateur Slurm :
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
Vous pouvez également saisir la commande directement dans le terminal :
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. TEST
Durée du job : l'exécution du job devrait prendre environ une heure.
Télécharger votre modèle
Une fois votre job exécuté, votre modèle entraîné est enregistré dans le répertoire ~/qwen2-from-scratch-on-smollm-fineweb/ sur le nœud de connexion. Étant donné que ce répertoire partagé persistant est installé sur tous les nœuds de votre cluster, vos points de contrôle de modèle restent disponibles même une fois le job terminé ou les nœuds de calcul désalloués.
Vous pouvez télécharger le modèle enregistré à partir du nœud de connexion sur votre machine locale à l'aide de la commande gcloud compute scp, comme illustré dans l'exemple suivant :
Une fois votre modèle téléchargé, vous pouvez effectuer les opérations suivantes :
- Chargez le modèle pour l'inférence : utilisez le framework Hugging Face Transformers pour charger le répertoire
qwen2-trained-model/et effectuer l'inférence avec votre nouveau modèle Qwen2 entraîné. - Affinage supplémentaire : utilisez le point de contrôle enregistré comme point de départ pour un affinage supplémentaire sur un ensemble de données plus spécifique.
- Transférer le modèle vers le Hub Hugging Face : partagez votre modèle entraîné en le transférant vers le Hub Hugging Face.
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 vos ressources
Pour supprimer votre cluster Slurm, procédez comme suit :
Pour supprimer votre bucket Cloud Storage, procédez comme suit :
Pour supprimer une image Packer, ouvrez votre navigateur Web, accédez à la page suivante, recherchez votre image spécifique, puis cliquez sur "Supprimer".
Pour 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