In dieser Anleitung wird beschrieben, wie Sie ein Large Language Model (LLM) in einem Slurm-Cluster mit mehreren Knoten und mehreren GPUs in Google Cloudtrainieren. Das Modell, das Sie in dieser Anleitung verwenden, basiert auf einem Qwen2-Modell mit 1,5 Milliarden Parametern. Der Slurm-Cluster verwendet zwei virtuelle Maschinen (VMs) vom Typ „a4-highgpu-8g“ mit jeweils 8 NVIDIA B200-GPUs.
Die beiden Hauptprozesse, die in dieser Anleitung beschrieben werden, sind:
- Stellen Sie mit demGoogle Cloud Cluster Toolkit einen leistungsstarken Slurm-Cluster für die Produktion bereit. Im Rahmen dieser Bereitstellung erstellen Sie ein benutzerdefiniertes VM-Image mit der erforderlichen vorinstallierten Software. Außerdem richten Sie eine freigegebene Filestore-Instanz ein und konfigurieren ein RDMA-Netzwerk mit hoher Geschwindigkeit.
- Nachdem der Cluster bereitgestellt wurde, führen Sie einen verteilten Vortrainingsjob mit den Skripts aus, die zu dieser Anleitung gehören. Der Job nutzt die Hugging Face Accelerate-Bibliothek.
Diese Anleitung richtet sich an Entwickler für maschinelles Lernen (ML), Forscher, Plattformadministratoren und -operatoren sowie an Daten- und KI-Spezialisten, die daran interessiert sind, leistungsstarke Slurm-Cluster auf Google Cloud zum Trainieren von LLMs bereitzustellen.
Ziele
- Greifen Sie über Hugging Face auf das Qwen2-Modell zu.
- Bereiten Sie Ihre Umgebung vor.
- Produktionsreifen A4-Slurm-Cluster erstellen und bereitstellen
- Trainieren Sie das Qwen2-Modell mit der Accelerate-Bibliothek .
- den Job überwachen
- bereinigen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen oder wählen Sie ein Google Cloud -Projekt aus.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Projekt in Google Cloud , das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.
Aktivieren Sie die erforderliche API, falls sie noch nicht aktiviert ist:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID.USER_IDENTIFIER: Die Kennung für Ihr Nutzerkonto. -Konto. Beispiele finden Sie unter Workforce-Pool-Nutzer in IAM-Richtlinien darstellen.ROLE: Die IAM-Rolle, die Sie Ihrem Nutzerkonto zuweisen.
- Aktivieren Sie das Standarddienstkonto für Ihr Google Cloud -Projekt:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Ersetzen Sie PROJECT_NUMBER durch die Projekt-ID. Informationen zum Ermitteln Ihrer Projektnummer finden Sie unter Vorhandenes Projekt abrufen.
- Weisen Sie dem Standarddienstkonto die Rolle „Bearbeiter“ (
roles/editor) zu:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- Erstellen Sie lokale Authentifizierungsdaten für Ihr Nutzerkonto:
gcloud auth application-default login
- Aktivieren Sie OS Login für Ihr Projekt:
gcloud compute project-info add-metadata --metadata=enable-oslogin=TRUE
- Melden Sie sich in einem Hugging Face-Konto an oder erstellen Sie eines.
Über Hugging Face auf Qwen2 zugreifen
So greifen Sie mit Hugging Face auf Qwen2 zu:
Cluster Toolkit installieren
Cluster Toolkit ist ein Open-Source-Tool, mit dem sich die Bereitstellung von Arbeitslasten für Hochleistungs-Computing (HPC), künstliche Intelligenz (KI) und maschinelles Lernen (ML) in Google Cloudvereinfachen lässt. Weitere Informationen zur Verwendung der gcluster-Befehlszeile und zur Verwaltung von Clustern finden Sie in der Übersicht über das Cluster Toolkit.
Bereiten Sie die Cluster Toolkit-Version vor:
Laden Sie den Release herunter:
Definieren Sie den Pfad
gcluster:
Umgebung vorbereiten
So bereiten Sie die Umgebung vor:
Legen Sie die Standardumgebungsvariablen fest:
Ersetzen Sie Folgendes:
YOUR_PROJECT_ID: der Name des Google Cloud -Projekts, in dem Sie den GKE-Cluster erstellen möchten.YOUR_CLUSTER_NAME: der Name des Slurm-Clusters, den Sie erstellen möchten.YOUR_ZONE: die Zone, in der sich Ihre Reservierung befindet.YOUR_REGION,: die Region, in der sich Ihre Reservierung befindet.RESERVATION_NAME: die URL oder der Name der Reservierung, die Sie zum Erstellen des Slurm-Clusters verwenden möchten.YOUR_GCS_BUCKET: der Name des Buckets, in dem Sie die Ergebnisse des Trainingsprüfpunkts speichern. Machen Sie sich vor dem Erstellen mit den Anforderungen für Bucket-Namen vertraut.YOUR_HF_TOKEN: das Hugging Face-Token, das Sie in einem vorherigen Schritt erstellt haben.
Erstellen Sie einen Cloud Storage-Bucket:
A4-Slurm-Cluster erstellen
So erstellen Sie einen A4-Slurm-Cluster:
Erstellen Sie die Datei
a4high-slurm-deployment.yaml.Verwenden Sie den Befehl
gcluster create, um die Terraform-Manifeste zu erstellen:Patchen Sie die Manifeste:
Stellen Sie den Cluster bereit:
Der
gcluster deploy-Befehl ist ein zweiphasiger Prozess, der so aussieht:In der ersten Phase wird ein benutzerdefiniertes Image mit der gesamten vorinstallierten Software erstellt. Dies kann bis zu 50 Minuten dauern.
In der zweiten Phase wird der Cluster mit diesem benutzerdefinierten Image bereitgestellt. Dieser Vorgang dauert in der Regel weniger lange als die erste Phase.
Wenn die erste Phase erfolgreich ist, die zweite Phase jedoch fehlschlägt, können Sie versuchen, den Slurm-Cluster noch einmal bereitzustellen, indem Sie die erste Phase überspringen:
Arbeitslast vorbereiten
So bereiten Sie Ihre Arbeitslast vor:
Arbeitslastskripts erstellen
So erstellen Sie die Skripts, die von Ihrer Trainingsarbeitslast verwendet werden:
Erstellen Sie die Datei
install_environment.shmit folgendem Inhalt, um die virtuelle Python-Umgebung einzurichten:Erstellen Sie die Datei
accelerate_config.yamlmit folgendem Inhalt, um die Konfigurationen für Ihren Feinabstimmungsjob anzugeben:Erstellen Sie die Datei
submit.slurmmit folgendem Inhalt, um die Aufgaben für die Jobs anzugeben, die in Ihrem Slurm-Cluster ausgeführt werden sollen:Wenn Sie die Abhängigkeiten für Ihren Feinabstimmungsjob angeben möchten, erstellen Sie eine
requirements.txt-Datei mit folgendem Inhalt:
Hinweis: In dieser Anleitung werden nicht die aktuellen Versionen der NVIDIA- und PyTorch-Abhängigkeiten verwendet. Wenn Sie neuere Abhängigkeiten benötigen, lesen Sie die NVIDIA-Dokumentation und die PyTorch-Dokumentation.Wenn Sie das Dataset herunterladen, tokenisieren und in ein für das Training geeignetes Format vorverarbeiten möchten, erstellen Sie eine
preprocess_data.py-Datei mit folgendem Inhalt:Erstellen Sie eine
train.py-Datei mit folgendem Inhalt, um die Anweisungen für Ihren Job anzugeben:
Skripts in den Slurm-Cluster hochladen
So laden Sie die im vorherigen Abschnitt erstellten Skripts in den Slurm-Cluster hoch:
Legen Sie die Variable
LOGIN_NODEfest, indem Sie den Namen des Login-Knotens für Ihren Cluster abrufen:In der Variable
LOGIN_NODEwird ein Wert wie${CLUSTER_NAME}-login-001gespeichert.Firewallregel erstellen
Laden Sie Ihre Skripts in das Basisverzeichnis des Login-Knotens hoch:
Verbindung zum Slurm-Cluster herstellen
Stellen Sie eine Verbindung zum Slurm-Cluster her, indem Sie über SSH eine Verbindung zum Login-Knoten herstellen:
Frameworks und Tools installieren
Nachdem Sie eine Verbindung zum Login-Knoten hergestellt haben, installieren Sie Frameworks und Tools so:
Richten Sie eine virtuelle Python-Umgebung mit allen erforderlichen Abhängigkeiten ein:
Vortraining der Arbeitslast starten
So trainieren Sie Ihre Arbeitslast:
Senden Sie den Job an den Slurm-Planer:
Auf dem Login-Knoten in Ihrem Slurm-Cluster können Sie den Fortschritt des Jobs anhand der Ausgabedateien im Verzeichnis
homeverfolgen:Wenn der Job erfolgreich gestartet wird, wird in der Datei
.erreine Fortschrittsanzeige angezeigt, die sich im Verlauf des Jobs aktualisiert.
Arbeitslast überwachen
Sie können die Nutzung der GPUs in Ihrem Slurm-Cluster überwachen, um zu prüfen, ob Ihr Feinabstimmungsjob effizient ausgeführt wird. Öffnen Sie dazu den folgenden Link in Ihrem Browser:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
Alternativ können Sie den Befehl direkt im Terminal eingeben:
Wenn Sie Ihre Arbeitslast überwachen, können Sie Folgendes sehen:
GPU-Nutzung: Bei einem fehlerfreien Feinabstimmungsjob sollte die Nutzung aller 16 GPUs (acht GPUs für jede VM im Cluster) während des Trainings steigen und sich auf einem bestimmten Niveau stabilisieren. TEST
Jobdauer: Der Job sollte etwa eine Stunde dauern.
Modell herunterladen
Nachdem Sie den Job erfolgreich ausgeführt haben, wird Ihr trainiertes Modell im Verzeichnis ~/qwen2-from-scratch-on-smollm-fineweb/ auf dem Login-Knoten gespeichert. Da dieses nichtflüchtige freigegebene Verzeichnis auf allen Knoten im Cluster bereitgestellt wird, bleiben Ihre Modellprüfpunkte auch nach Abschluss des Jobs oder nach der Aufhebung der Zuweisung der Compute-Knoten verfügbar.
Sie können das gespeicherte Modell mit dem Befehl gcloud compute scp vom Login-Knoten auf Ihren lokalen Computer herunterladen, wie im folgenden Beispiel gezeigt:
Nachdem Sie Ihr Modell heruntergeladen haben, können Sie Folgendes tun:
- Modell für die Inferenz laden: Verwenden Sie das Hugging Face Transformers-Framework, um das Verzeichnis
qwen2-trained-model/zu laden und die Inferenz mit Ihrem neu trainierten Qwen2-Modell durchzuführen. - Zusätzliche Feinabstimmung: Verwenden Sie den gespeicherten Prüfpunkt als Ausgangspunkt für eine zusätzliche Feinabstimmung mit einem spezifischeren Dataset.
- Modell in den Hugging Face-Hub übertragen: Teilen Sie Ihr trainiertes Modell, indem Sie es in den Hugging Face-Hub übertragen.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Ressourcen löschen
Führen Sie den Befehl
gcluster destroyaus, um den Slurm-Cluster zu löschen:So löschen Sie Ihren Cloud Storage-Bucket:
Wenn Sie ein Packer-Image löschen möchten, öffnen Sie Ihren Webbrowser, rufen Sie die folgende Seite auf, suchen Sie nach dem gewünschten Image und klicken Sie auf „Löschen“.
So löschen Sie alle VPC-Netzwerke, Firewallregeln, Router, IP-Adressen und Subnetze, die mit dem Projekt verknüpft sind:
Projekt löschen
Google Cloud -Projekt löschen:
gcloud projects delete PROJECT_ID