Ce tutoriel explique comment affiner un modèle mistralai/Mixtral-8x7B-v0.1 sur un cluster Slurm à nœuds et GPU multiples sur Google Cloud. Le cluster utilise deux instances de machine virtuelle 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 production hautes performances à 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 un système de fichiers Lustre partagé et un réseau à haut débit.
- Une fois le cluster déployé, vous exécutez un job d'affinage distribué à l'aide de l'ensemble de scripts qui accompagnent ce tutoriel. Le job utilise PyTorch Fully Sharded Data Parallel (FSDP), auquel vous accédez via la bibliothèque Hugging Face Transformer Reinforcement Learning (TRL).
Ce tutoriel s'adresse aux ingénieurs et chercheurs 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 distribuer une charge de travail d'IA sur plusieurs nœuds et GPU.
Objectifs
- Accéder à Mixtral à l'aide de Hugging Face
- Installer Cluster Toolkit
- Préparer votre environnement
- Créez et déployez un cluster Slurm A4 High-GPU de qualité production.
- Configurez un environnement multinœud pour l'entraînement distribué avec FSDP.
- Ajustez le modèle Mixtral à l'aide de la classe
trl.SFTTrainerde Hugging Face. - Transférez les données vers des disques SSD locaux.
- 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 lustre.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 lustre.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 . 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.
- Installez les dépendances dont vous avez besoin pour utiliser Cluster Toolkit.
Accéder à Mixtral à l'aide de Hugging Face
Pour utiliser Hugging Face afin d'accéder à Mixtral, procédez comme suit :
- Connectez-vous à Hugging Face et explorez le modèle Mixtral.
- Créez un jeton d'accès
readHugging Face. - Copiez et enregistrez la valeur du jeton. Vous en aurez besoin dans la suite de ce tutoriel.
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 projet Google Cloud dans lequel vous souhaitez créer votre cluster Slurm.YOUR_ZONE: zone où se trouve votre réservation.YOUR_REGION: région où se trouve votre réservation.YOUR_RESERVATION_NAME: URL ou nom de la réservation que vous souhaitez utiliser pour créer votre cluster Slurm.YOUR_CLUSTER_NAME: nom de votre déploiement. Utilisez un nom court ne contenant que des lettres et des chiffres (par exemple,a4high). Ce nom est également attribué au cluster Slurm créé par le déploiement.YOUR_GCS_BUCKET: nom du bucket dans lequel vous stockez les résultats du point de contrôle d'entraînement. Spécifiez un bucket existant ou créez-en un. Avant de le créer, familiarisez-vous avec les règles de dénomination des buckets.YOUR_HF_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 :
Écrasez le fichier
a4high-slurm-deployment.yamldans le répertoireexamples/machine-learning/a4-highgpu-8gavec vos variables d'environnement en exécutant la commande suivante :Ouvrez le fichier
a4high-slurm-blueprint.yamldans le répertoireexamples/machine-learning/a4-highgpu-8g, puis modifiez-le pour utiliser Managed Lustre pour le répertoire partagé/homecomme suit :- Supprimez le bloc de module
homefspar défaut avecsource: modules/file-system/filestore. - Activez les modules
lustrefs(blochomefsavecremote_mount: lustrefs) etprivate-service-access. - Dans le bloc
vars, configurez les éléments suivants :- Remplacez la valeur de
install_managed_lustredans/var/tmp/slurm_vars.jsonpartrue. - Définissez le paramètre
per_unit_storage_throughputsur500. - Définissez le paramètre
lustre_size_gibsur36000. - Décommenter
lustre_instance_id: lustre-instance. - Mettez en commentaire ou supprimez les
filestore_ip_rangeinutilisés.
- Remplacez la valeur de
- Supprimez le bloc de module
Déployez le cluster :
La commande
./gcluster deploylance un processus 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'à 35 minutes.
- La deuxième phase déploie le cluster à l'aide de cette image personnalisée. Ce processus devrait se terminer plus rapidement que 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 dépendances Python du script d'entraînement, créez un fichier
requirements-fsdp.txtavec le contenu suivant :Spécifiez
train-mixtral.pycomme script d'entraînement principal :Pour spécifier les tâches à exécuter sur votre cluster Slurm, créez le fichier
train-mixtral.shavec le contenu suivant :
Importer les scripts dans votre 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 à${DEPLOYMENT_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 outils requis en exécutant le script d'installation sur un nœud de calcul :
Cette commande configure l'environnement virtuel, installe toutes les dépendances et télécharge les pondérations du modèle Mixtral dans ~/Mixtral-8x7B-v0.1. Ce processus peut prendre jusqu'à 30 minutes.
L'exécution de cette étape via srun délègue le script d'installation du nœud de connexion à un nœud de calcul alloué, ce qui permet au script d'accéder aux pilotes de GPU lors de la compilation.
Démarrer votre charge de travail d'affinage
Pour démarrer votre charge de travail d'entraînement :
Envoyez le job au planificateur Slurm :
Surveiller votre charge de travail
Pour surveiller la progression de votre job d'affinage, utilisez les méthodes suivantes :
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.Le job comporte deux phases principales :
- Copie du grand modèle de base sur le SSD local de chaque nœud de calcul.
- Le job d'entraînement, qui commence une fois la copie du modèle terminée.
L'exécution de l'ensemble du job prend environ 60 minutes.
Vous pouvez également 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=YOUR_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%7DVous pouvez également saisir la commande directement dans le terminal :
Lorsque vous surveillez votre charge de travail, vous pouvez voir les éléments suivants :
Utilisation du GPU : pour une tâche d'affinage correcte, 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 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 les ressources
Exécutez les commandes suivantes pour supprimer les ressources que vous avez créées dans ce tutoriel :
Pour supprimer votre cluster Slurm, accédez au répertoire
cluster-toolkitet exécutez la commande suivante :Supprimez votre bucket :
Pour supprimer une image Packer, ouvrez votre navigateur Web, accédez à la page suivante, recherchez votre image spécifique, puis cliquez sur "Supprimer".
Supprimer votre projet
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID
Étapes suivantes
- Redéployer un cluster Slurm
- Tester les performances du réseau sur un cluster Slurm
- Surveiller les VM dans un cluster Slurm
- Créer un point de terminaison de service : une fois votre modèle affiné prêt, vous pouvez le déployer sur un point de terminaison de service à l'aide de Google Kubernetes Engine (GKE) ou de Vertex AI pour le rendre accessible à l'inférence.
- En savoir plus sur les services de stockage recommandés pour les charges de travail d'IA et de ML