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:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
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
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- 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
-
In the Google Cloud console, go to the IAM page.
Zu IAM - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriff erlauben.
-
Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse eines Google-Kontos.
- Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
- Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
- 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
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.
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.
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
Rufen Sie Anmeldedaten für Ihren GKE-Cluster ab:
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --zone=${ZONE} \ --project=${PROJECT_ID}
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.
Dienstkonto einrichten
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/topology-scheduler/service-account.yaml
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
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
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
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
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 Dateiscripts/build-and-push-docker-image.sh
mit dem Repository-Namen übereinstimmt, den Sie im Skriptscripts/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
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.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:
- Aktivieren Sie das Kästchen für CLUSTER_NAME.
- Klicken Sie auf Löschen.
- 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.
Klicken Sie auf das Kästchen für den Cloud Storage-Bucket, den Sie für diese Kurzanleitung erstellt haben.
Klicken Sie auf
Löschen.Geben Sie
DELETE
ein und klicken Sie auf Löschen, um den Löschvorgang zu bestätigen.