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

      IAM aufrufen
    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.

    A3-Mega-Cluster erstellen

    Erstellen Sie einen A3-Mega-GKE-Cluster mit GPUDirect-TCPXO und Multi-Netzwerken. Weitere Informationen finden Sie unter GPU-Netzwerkbandbreite mit GPUDirect und Multi-Netzwerken 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-Clusters, für den GPUDirect-TCPXO und Multi-Netzwerke aktiviert sind.
    • REGION: Die Region, in der Sie den Cluster erstellt haben.
    • ZONE: Die Zone, in der Sie den Cluster erstellt haben.
    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
  2. Konfigurieren Sie das 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 gcloud CLI-Plug-in von GKE:

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

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --zone=${ZONE} \
      --project=${PROJECT_ID}
    
  5. Installieren Sie Helm, falls noch nicht geschehen:

    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

Sie können den topologiesensitiven Planer verwenden, um Ihre GKE-Pods auf Knoten mit einer bestimmten GPU-Topologie bereitzustellen.

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

Weitere Informationen finden Sie unter Topologie-Planer.

  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 Topologieplanerskripts 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 den Topologielabel-Daemonset und den Topologie-Planer-Pod:

    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 Google Cloud Artifact Registry per Push übertragen

  1. Erstellen Sie einen Cloud Storage-Bucket und ein Docker-Repository. Ersetzen Sie in der scripts/setup-and-configure-resources.sh script die Namen des Buckets und des Repositorys durch die Namen, die Sie erstellt haben, und führen Sie dann das Skript aus:

    bash scripts/setup-and-configure-resources.sh
    
  2. Erstellen Sie das Image pytorch-megatron:23.11-py3 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 Repository-Namen übereinstimmt, den Sie im Skript scripts/setup-and-configure-resources.sh verwendet haben. Sie können den Namen des Docker-Image-Tags vor dem Hochladen 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 in den vorherigen Abschnitten erstellt wurden. Einige Beispielkonfigurationen finden Sie unter sample-configurations.

  2. Optional: Sie können auch die Datei selected-configuration.sh bearbeiten, um Ä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.

Der Test schreibt Messwerte aus dem Nsight-System-Profiling-Tool 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 in dieser Anleitung 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 auf das Kästchen für den Cloud Storage-Bucket, 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