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 de 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 hautes performances de qualité 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 allez également configurer 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 accompagne ce tutoriel. Le job exploite 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éer et déployer 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 de Google Cloudsuivants :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du 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électionner 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, si ce n'est pas déjà fait :
Rôles requis pour activer les API
Pour activer des API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le 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 du projet.USER_IDENTIFIER: identifiant de votre compte utilisateur . Pour obtenir des exemples, consultez Représenter les utilisateurs de pools de personnel dans les stratégies IAM.ROLE: rôle IAM que vous attribuez à 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 votre numéro de 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 à un 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 de 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 la CLI 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 d'accès
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 projet Google Cloud 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_GCS_BUCKET: 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 exigences de dénomination des buckets.YOUR_HF_TOKEN: jeton Hugging Face que vous avez créé lors d'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:Utilisez la commande
gcluster createpour créer les fichiers manifestes Terraform :Appliquez un correctif aux fichiers manifestes :
Déployez le cluster :
La commande
gcluster deployest un processus en deux phases, qui se déroule comme suit :La première phase crée une image personnalisée avec tous les logiciels préinstallés, ce qui peut prendre jusqu'à 50 minutes.
La deuxième phase déploie le cluster à l'aide de cette image personnalisée. Ce processus 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 redéployer 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'ajustement, créez le fichier
accelerate_config.yamlavec le contenu suivant :Pour spécifier les tâches des jobs à 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 dans 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
Après vous être 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, procédez comme suit :
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 s'actualise au fur et à mesure de l'avancement du job.
Surveiller votre charge de travail
Vous pouvez surveiller l'utilisation des GPU dans votre cluster Slurm pour vérifier que votre job d'affinage 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 un job d'affinage sain, vous devriez voir l'utilisation de vos 16 GPU (huit GPU pour chaque VM du cluster) augmenter et se stabiliser à un niveau spécifique tout au long de l'entraînement. TEST
Durée du job : le 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. Comme 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é depuis le nœud de connexion vers votre ordinateur local à l'aide de la commande gcloud compute scp, comme illustré dans l'exemple suivant :
Après avoir téléchargé votre modèle, vous pouvez effectuer les opérations suivantes :
- Charger 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 modèle Qwen2 nouvellement entraîné. - Réglage supplémentaire : utilisez le point de contrôle enregistré comme point de départ pour un réglage 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, exécutez la commande
gcluster destroy: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 l'image en question, 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