Llama2 mit Megatron-LM auf virtuellen A3-Mega-Maschinen trainieren


Übersicht

In dieser Kurzanleitung erfahren Sie, wie Sie eine containerbasierte Megatron-LM-PyTorch-Arbeitslast auf A3 Mega ausführen. Der Code ist in diesem GitHub-Repository verfügbar: megatron-gke.

Hinweise

Mit den folgenden Schritten aktivieren Sie die Google Kubernetes Engine-API:

  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 column 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.

      Zu IAM
    2. Wählen Sie das Projekt aus.
    3. Klicken Sie auf Zugriff erlauben.
    4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse eines Google-Kontos.

    5. Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
    6. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
    7. Klicken Sie auf Speichern.
    8. A3-Mega-Cluster erstellen

      Erstellen Sie einen A3 Mega-GKE-Cluster mit GPUDirect-TCPXO und Multi-Networking. Weitere Informationen finden Sie unter GPU-Netzwerkbandbreite mit GPUDirect und Multi-Networking maximieren.

Umgebung einrichten

  1. Umgebungsvariablen für einige gängige Parameter erstellen

    export CLUSTER_NAME=CLUSTER_NAME
    export REGION=REGION
    export ZONE=ZONE
    export PROJECT_ID=PROJECT_ID
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: Der Name Ihres A3 Mega-GKE-Cluster, für den GPUDirect-TCPXO und Multi-Networking aktiviert sind.
    • REGION: die Region, in der Sie den Cluster erstellt haben
    • ZONE: die Zone, in der Sie den Cluster erstellt haben.
    • PROJECT_ID: Ihre Google Cloud -Projekt-ID.
  2. Konfigurieren Sie die Google Cloud CLI so, dass Ihre Google Cloud Anmeldedaten für die Authentifizierung verwendet werden:

    gcloud auth login
    

    Weitere Informationen finden Sie unter Für die Verwendung der Google Cloud CLI authentifizieren.

  3. Installieren Sie kubectl und das GKE gcloud CLI-Plug-in:

    sudo apt-get install kubectl
    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  4. Rufen Sie die Anmeldedaten für Ihren GKE-Cluster ab:

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --zone=${ZONE} \
      --project=${PROJECT_ID}
    
  5. Wenn Helm noch nicht installiert ist, installieren Sie es:

    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
    

Topologiesensitiven Planer zum Bereitstellen von Pods verwenden

Mit dem topologiesensitiven Planer können Sie Ihre GKE-Pods auf Knoten mit einer bestimmten GPU-Topologie bereitstellen.

In den folgenden kubectl-Befehlen verwenden Sie die Dateien direkt aus einem Repository. Alternativ können Sie das Repository lokal klonen. Die kubectl-Befehle können dann auf die lokalen Dateien verweisen.

Weitere Informationen finden Sie unter Topologie-Scheduler.

  1. Dienstkonto einrichten

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
    
  2. Installieren Sie die Topologie-Scheduler-Skripts in einer 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. Installieren Sie das DaemonSet für das Topologielabel und den Pod für den Topologieplaner:

    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. Beobachten Sie die Aktionen des Topologieplaners:

    kubectl -n kube-system logs topology-scheduler-pod
    

Arbeitslast ausführen

Dockerfile erstellen und in der Google Cloud Artifact Registry per Push übertragen

  1. Erstellen Sie einen Cloud Storage-Bucket und ein Docker-Repository. Ersetzen Sie in scripts/setup-and-configure-resources.sh script die Bucket- und Repository-Namen durch die von Ihnen erstellten Namen und führen Sie das Skript aus:

    bash scripts/setup-and-configure-resources.sh
    
  2. Erstellen Sie das pytorch-megatron:23.11-py3-Image und übertragen Sie es per Push in Ihr Repository. Achten Sie darauf, dass der Name des Docker-Repositorys in der Datei scripts/build-and-push-docker-image.sh mit dem Namen des Repositorys übereinstimmt, den Sie im Skript scripts/setup-and-configure-resources.sh verwendet haben. Sie können den Docker-Image-Tag-Namen auch vor dem Push bearbeiten.

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

Megatron-LM Llama2-Benchmark starten

  1. Bearbeiten Sie die Datei helm/values.yaml, um den Cloud Storage-Bucket und das Docker-Image anzugeben, die Sie in den vorherigen Abschnitten erstellt haben. Einige Beispielkonfigurationen finden Sie unter sample-configurations.

  2. Optional: Sie können die Datei selected-configuration.sh auch bearbeiten, um alle Änderungen anzugeben, die Sie an der Standard-Helm-Konfiguration vorgenommen haben.

    helm install HELM_EXPERIMENT_NAME helm/ --values helm/values.yaml
    

    Ersetzen Sie HELM_EXPERIMENT_NAME durch einen beliebigen Namen für den Test.

Das Experiment schreibt Messwerte aus dem Nsight Systems-Profilierungstool in den Cloud Storage-Bucket, der im Verzeichnis megatron-experiments angegeben ist.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:

Löschen Sie den GKE-Cluster:

Rufen Sie die Seite Cluster auf:

Zu den Clustern

  1. Aktivieren Sie das Kästchen für CLUSTER_NAME.
  2. Klicken Sie auf Löschen.
  3. Geben Sie CLUSTER_NAME ein und klicken Sie auf Löschen, um den Löschvorgang zu bestätigen.

Cloud Storage-Bucket löschen

Rufen Sie die Seite Buckets auf.

Buckets aufrufen

  1. Klicken Sie das Kästchen für den Cloud Storage-Bucket an, den Sie für diese Kurzanleitung erstellt haben.

  2. Klicken Sie auf Löschen.

  3. Geben Sie DELETE ein und klicken Sie auf Löschen, um den Löschvorgang zu bestätigen.

Nächste Schritte