Entraîner Llama2 avec Megatron-LM sur des machines virtuelles A3 Mega
Présentation
Dans ce guide de démarrage rapide, vous allez apprendre à exécuter une charge de travail Megatron-LM PyTorch basée sur un conteneur sur A3 Mega. Le code est disponible dans ce dépôt GitHub : megatron-gke.
Avant de commencer
Procédez comme suit pour activer l'API Google Kubernetes Engine (GKE) :
- Connectez-vous à votre Google Cloud compte. 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the GKE API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Assurez-vous de disposer des rôles suivants sur le projet: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser
Vérifier les rôles
-
Dans la Google Cloud console, accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
-
Dans la colonne Compte principal, recherchez toutes les lignes qui vous identifient ou identifient un groupe dont vous faites partie. Pour savoir à quels groupes vous appartenez, contactez votre administrateur.
- Pour toutes les lignes qui vous spécifient ou vous incluent, consultez la colonne Rôle pour vous assurer que la liste inclut les rôles requis.
Attribuer les rôles
-
Dans la Google Cloud console, accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.
- Cliquez sur Sélectionner un rôle, puis recherchez le rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
-
Créer un cluster A3 Mega
Créez un cluster GKE A3 Mega avec GPUDirect-TCPXO et le multiréseau. Pour en savoir plus, consultez la page Maximiser la bande passante réseau de GPU avec GPUDirect-TCPX et le multiréseau.
Configurer votre environnement
Créez des variables d'environnement pour certains paramètres courants.
export CLUSTER_NAME=CLUSTER_NAME export CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION export PROJECT_ID=PROJECT_ID
Remplacez les éléments suivants :
CLUSTER_NAME: nom de votre cluster GKE Mega A3 sur lequel GPUDirect-TCPXO et le multiréseau sont activés.CONTROL_PLANE_LOCATION: emplacement Compute Engine du plan de contrôle de votre cluster. Indiquez une région pour les clusters régionaux ou une zone pour les clusters zonaux.PROJECT_ID: ID de votre Google Cloud projet.
Configurez Google Cloud CLI de manière à utiliser vos Google Cloud identifiants pour l'authentification :
gcloud auth login
Pour en savoir plus, consultez la page S'authentifier pour utiliser Google Cloud CLI.
Installez
kubectlet le plug-in gcloud CLI GKE :sudo apt-get install kubectl sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
Récupérez les identifiants de votre cluster GKE :
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${CONTROL_PLANE_LOCATION} \ --project=${PROJECT_ID}Si ce n'est pas déjà fait, installez Helm :
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh && rm get_helm.sh sudo chmod +x /usr/local/bin/helm
Utiliser le programmeur basé sur la topologie pour déployer vos pods
Vous pouvez utiliser le programmeur basé sur la topologie pour déployer vos pods GKE sur des nœuds ayant une topologie GPU spécifiée.
Dans les commandes kubectl suivantes, vous utiliserez les fichiers directement à partir d'un dépôt. Vous pouvez également cloner le dépôt localement. Les commandes kubectl peuvent alors référencer les fichiers locaux.
Pour en savoir plus, consultez la section Programmeur de topologie.
Configurez le compte de service :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
Installez les scripts du programmeur de topologie dans un fichier ConfigMap :
curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/schedule-daemon.py curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/label-nodes-daemon.py kubectl -n kube-system create configmap topology-scheduler-scripts \ --from-file=schedule-daemon.py=schedule-daemon.py \ --from-file=label-nodes-daemon.py=label-nodes-daemon.pyInstallez le DaemonSet du libellé de topologie et le pod du programmeur de topologie :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/label-nodes-daemon.yaml $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/schedule-daemon.yamlObservez les actions du programmeur de topologie :
kubectl -n kube-system logs topology-scheduler-pod
Exécuter la charge de travail
Créer le Dockerfile et le transférer vers le Google Cloud Artifact Registry
Créez un bucket Cloud Storage et un dépôt Docker. Dans le fichier
scripts/setup-and-configure-resources.sh script, remplacez les noms du bucket et du dépôt par ceux que vous avez créés, puis exécutez le script :bash scripts/setup-and-configure-resources.sh
Créez l'image
pytorch-megatron:23.11-py3et transférez-la vers votre dépôt. Assurez-vous que le nom du dépôt Docker dans le fichierscripts/build-and-push-docker-image.shcorrespond à celui que vous avez utilisé dans le scriptscripts/setup-and-configure-resources.sh. Vous pouvez également modifier le nom du tag de l'image Docker avant de la transférer.bash scripts/build-and-push-docker-image.sh
Lancer le benchmark Megatron-LM Llama2
Modifiez le fichier
helm/values.yamlpour spécifier votre bucket Cloud Storage et l'image Docker créés dans les sections précédentes. Pour obtenir des exemples de configurations, consultez la section Exemples de configurations.Facultatif : Vous pouvez également modifier le fichier
selected-configuration.shpour spécifier les modifications apportées à la configuration Helm par défaut.helm install HELM_EXPERIMENT_NAME helm/ --values helm/values.yaml
Remplacez
HELM_EXPERIMENT_NAMEpar un nom arbitraire pour votre test.
Le test écrit les métriques de l'outil de profilage Nsight Systems dans le bucket Cloud Storage
spécifié dans le megatron-experiments répertoire.
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cette démonstration soient facturées sur votre Google Cloud compte pour les ressources utilisées sur cette page, procédez comme suit :
Supprimez le cluster GKE :
Accédez à la page Clusters :
- Sélectionnez la case à cocher correspondant à CLUSTER_NAME.
- Cliquez sur Supprimer.
- Pour confirmer la suppression, saisissez CLUSTER_NAME, puis cliquez sur Supprimer.
Supprimer le bucket Cloud Storage
Accédez à la page Buckets :
Cochez la case correspondant au bucket Cloud Storage que vous avez créé dans ce guide de démarrage rapide.
Cliquez sur Supprimer.
Pour confirmer la suppression, saisissez
DELETE, puis cliquez sur Supprimer.