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. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  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 role (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 role (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. Prüfen Sie, ob Sie die folgenden Rollen für das Projekt haben: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser

    Rollen prüfen

    1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

      IAM aufrufen
    2. Wählen Sie das Projekt aus.
    3. Suchen Sie in der Spalte Hauptkonto nach allen Zeilen, in denen Sie oder eine Gruppe, zu der Sie gehören, angegeben sind. Fragen Sie Ihren Administrator, zu welchen Gruppen Sie gehören.

    4. Prüfen Sie in allen Zeilen, in denen Sie angegeben oder enthalten sind, die Spalte Rolle, um zu sehen, ob die Liste der Rollen die erforderlichen Rollen enthält.

    Rollen zuweisen

    1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

      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. Klicken Sie auf Rolle auswählen und suchen Sie nach der Rolle.
    6. Klicken Sie auf Weitere Rolle hinzufügen, wenn Sie weitere Rollen zuweisen möchten.
    7. Klicken Sie auf Speichern.

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