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 PyTorch Megatron-LM 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) :

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE API.

    Enable the API

  8. Make sure that you have the following role or roles on the project: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Accéder à IAM
    2. Sélectionnez le projet.
    3. Cliquez sur Accorder l'accès.
    4. 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.

    5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
    6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
    7. 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

  1. Créer des variables d'environnement pour certains paramètres courants

    export CLUSTER_NAME=CLUSTER_NAME
    export REGION=REGION
    export ZONE=ZONE
    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.
    • REGION : région dans laquelle vous avez créé le cluster.
    • ZONE : zone dans laquelle vous avez créé votre cluster.
    • PROJECT_ID : ID de votre projet Google Cloud.
  2. Configurez Google Cloud CLI de manière à utiliser vos identifiants Google Cloud pour l'authentification :

    gcloud auth login
    

    Pour en savoir plus, consultez la page S'authentifier pour utiliser Google Cloud CLI.

  3. Installez kubectl et le plug-in gcloud CLI GKE :

    sudo apt-get install kubectl
    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  4. Récupérez les identifiants de votre cluster GKE :

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --zone=${ZONE} \
      --project=${PROJECT_ID}
    
  5. 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, ce qui permet aux commandes kubectl de référencer les fichiers locaux.

Pour en savoir plus, consultez la section Programmeur de topologie.

  1. Configurez le compte de service :

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
    
  2. 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.py
    
  3. Installez 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.yaml
    
  4. Observez 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 Google Cloud Artifact Registry

  1. 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
    
  2. Créez et transférez l'image pytorch-megatron:23.11-py3 vers votre dépôt. Assurez-vous que le nom du dépôt Docker dans le fichier scripts/build-and-push-docker-image.sh correspond au nom du dépôt que vous avez utilisé dans le script scripts/setup-and-configure-resources.sh. Vous pouvez également modifier le nom du tag de l'image Docker avant le transfert.

    bash scripts/build-and-push-docker-image.sh
    

Lancer le benchmark Megatron-LM Llama2

  1. Modifiez le fichier helm/values.yaml pour spécifier le bucket Cloud Storage et l'image Docker créées dans les sections précédentes. Pour obtenir des exemples de configurations, consultez la section sample-configurations.

  2. Facultatif : Vous pouvez également modifier le fichier selected-configuration.sh pour 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_NAME par un nom arbitraire pour votre test.

Le test écrit les métriques de l'outil de profilage des systèmes Nsight dans le bucket Cloud Storage spécifié dans le répertoire megatron-experiments.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :

Supprimez le cluster GKE :

Accédez à la page Clusters :

accéder aux clusters

  1. Sélectionnez la case à cocher correspondant à CLUSTER_NAME.
  2. Cliquez sur Supprimer.
  3. Pour confirmer la suppression, saisissez CLUSTER_NAME, puis cliquez sur Supprimer.

Supprimer le bucket Cloud Storage

Accédez à la page Buckets :

Accéder à la page "Buckets"

  1. Cochez la case correspondant au bucket Cloud Storage que vous avez créé dans ce guide de démarrage rapide.

  2. Cliquez sur Supprimer.

  3. Pour confirmer la suppression, saisissez DELETE, puis cliquez sur Supprimer.

Étape suivante