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.

    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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    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.

      IAM aufrufen
    2. Wählen Sie das Projekt aus.
    3. Klicken Sie auf Zugriffsrechte erteilen.
    4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Das 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. Klicken Sie auf Weitere Rolle hinzufügen, wenn Sie weitere Rollen zuweisen möchten.
    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 CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION
        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.
        • CONTROL_PLANE_LOCATION: Der Compute Engine-Standort der Steuerungsebene des Clusters. Geben Sie für regionale Cluster eine Region und für zonale Cluster eine Zone an.
        • PROJECT_ID: Projekt-ID in Google Cloud .
      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} \
          --location=${CONTROL_PLANE_LOCATION} \
          --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 dann 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 auch die Datei selected-configuration.sh 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-Profilerstellungstool 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