In dieser Anleitung wird beschrieben, wie Sie ein Large Language Model (LLM) mit Tensor Processing Units (TPUs) in Google Kubernetes Engine (GKE) mit JAX abstimmen. Mit der Feinabstimmung können Sie ein Foundation Model wie Gemma 3 an eine bestimmte Domain oder Aufgabe anpassen. Durch diesen Prozess werden die Präzision und Genauigkeit des Modells verbessert, indem seine Parameter mit Ihrem eigenen spezialisierten Dataset aktualisiert werden.
Dieser Leitfaden ist ein guter Ausgangspunkt, wenn Sie bei der Feinabstimmung Ihrer KI/ML-Arbeitslasten die detaillierte Kontrolle, Anpassung, Skalierbarkeit, Robustheit, Übertragbarkeit und Kosteneffizienz von verwaltetem Kubernetes benötigen.
Hintergrund
Wenn Sie TPUs in GKE mit Jax zum Feinabstimmen eines LLM verwenden, können Sie eine robuste, produktionsreife Lösung zum Feinabstimmen mit allen Vorteilen von verwaltetem Kubernetes erstellen.
Gemma
Gemma ist eine Reihe offen verfügbarer, einfacher und auf generativer KI/ML basierender multimodaler Modelle, die unter einer offenen Lizenz veröffentlicht wurden. Diese KI-Modelle können in Ihren Anwendungen, Geräten, Mobilgeräten oder gehosteten Diensten ausgeführt werden. Gemma 3 führt Multimodalität ein und unterstützt Vision-Language-Eingaben und Textausgaben. Das Modell kann Kontextfenster mit bis zu 128.000 Tokens verarbeiten und unterstützt über 140 Sprachen. Gemma 3 bietet auch verbesserte Mathematik-, Schlussfolgerungs- und Chatfunktionen, einschließlich strukturierter Ausgaben und Funktionsaufrufen.
Sie können die Gemma-Modelle zur Textgenerierung verwenden. Sie können diese Modelle jedoch auch für spezielle Aufgaben optimieren.
Weitere Informationen finden Sie in der Gemma-Dokumentation.
TPUs
TPUs sind anwendungsspezifische integrierte Schaltkreise (Application-Specific Integrated Circuits, ASICs), die von Google speziell entwickelt wurden, um das maschinelle Lernen und die KI-Modelle zu beschleunigen, die mit Frameworks wie TensorFlow, PyTorch und JAX erstellt wurden.
Bevor Sie TPUs in GKE verwenden, sollten Sie den folgenden Lernpfad durcharbeiten:
- Informationen zur aktuellen Verfügbarkeit von TPU-Versionen finden Sie unter Cloud TPU-Systemarchitektur.
- TPUs in GKE
JAX
JAX ist ein leistungsstarkes Framework für maschinelles Lernen, das für die Verwendung mit TPUs und GPUs entwickelt wurde. JAX bietet eine API zum Erstellen und Trainieren von Machine-Learning-Modellen.
Weitere Informationen finden Sie im JAX-Repository.
Ziele
Diese Anleitung umfasst die folgenden Schritte:
- Erstellen Sie einen GKE Autopilot- oder Standardcluster mit der empfohlenen TPU-Topologie anhand der Modelleigenschaften. In dieser Anleitung führen Sie das Fine-Tuning für Knotenpools mit einem einzelnen Host durch.
- Fügen Sie einem Cloud Storage-Bucket Daten hinzu und stellen Sie eine Verbindung zum Container über Cloud Storage FUSE her.
- Stellen Sie den Job zur Feinabstimmung des LLM in GKE bereit.
- Job zum Feinabstimmen überwachen und Logs ansehen
Hinweis
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Prüfen Sie, ob Sie die folgenden Rollen für das Projekt haben: roles/container.admin,roles/iam.serviceAccountAdmin,roles/storage.admin
Rollen prüfen
-
Rufen Sie in der Google Cloud Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
-
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.
- 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
-
Rufen Sie in der Google Cloud Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriffsrechte erteilen.
-
Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Das ist in der Regel die E‑Mail-Adresse eines Google-Kontos.
- Klicken Sie auf Rolle auswählen und suchen Sie nach der Rolle.
- Klicken Sie auf Weitere Rolle hinzufügen, wenn Sie weitere Rollen zuweisen möchten.
- Klicken Sie auf Speichern.
-
- Prüfen Sie, ob Sie ein ausreichendes Kontingent für 16 TPU Trillium (v6e)-Chips haben. In dieser Anleitung verwenden Sie eine Knotenpoolkonfiguration, für die 16 Chips und On-Demand-Instanzen erforderlich sind.
- Prüfen Sie, ob Sie ein Docker-Repository haben. Wenn Sie keines haben, erstellen Sie ein Standard-Repository in Artifact Registry.
Umgebung vorbereiten
In dieser Anleitung verwenden Sie Cloud Shell zum Verwalten von Ressourcen, die auf Google Cloudgehostet werden. Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl und Google Cloud CLI.
So richten Sie Ihre Umgebung mit Cloud Shell ein:
Starten Sie in der Google Cloud Console eine Cloud Shell-Sitzung und klicken Sie auf Cloud Shell aktivieren (
). Dadurch wird im unteren Bereich der Google Cloud Console eine Sitzung gestartet.
Legen Sie die Standardumgebungsvariablen fest:
gcloud config set project PROJECT_ID gcloud config set billing/quota_project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export REGION=CONTROL_PLANE_LOCATION export ZONE=ZONE export GCS_BUCKET_NAME=BUCKET_NAMEErsetzen Sie die folgenden Werte:
PROJECT_ID: Ihre Google Cloud Projekt-ID.CLUSTER_NAME: der Name Ihres GKE-Cluster.CONTROL_PLANE_LOCATION: die Compute Engine-Region, in der sich Ihr GKE-Cluster und Ihre TPU-Knoten befinden. Die Region muss Zonen enthalten, in denen TPU Trillium-Maschinentypen (v6e) verfügbar sind.ZONE: eine Zone in der ausgewählten RegionCONTROL_PLANE_LOCATION, in der TPU Trillium (v6e)-Maschinentypen verfügbar sind. Führen Sie den folgenden Befehl aus, um Zonen aufzulisten, in denen TPU Trillium (v6e) verfügbar ist:gcloud compute accelerator-types list --filter="name~ct6e" --format="value(zone)"BUCKET_NAME: Der Name des Cloud Storage-Bucket, der Ihre Trainingsdaten enthält.
Klonen Sie das Beispiel-Repository:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git cd kubernetes-engine-samplesWechseln Sie zum Arbeitsverzeichnis:
cd ai-ml/llm-training-jax-tpu-gemma3
Google Cloud -Ressourcen erstellen und konfigurieren
In diesem Abschnitt erstellen und konfigurieren Sie Google Cloud -Ressourcen.
GKE-Cluster erstellen
Sie können ein LLM auf TPUs in einem GKE-Cluster im Autopilot- oder Standardmodus abstimmen. Für eine vollständig verwaltete Kubernetes-Umgebung empfehlen wir die Verwendung eines Autopilot-Clusters. Informationen zum Auswählen des GKE-Betriebsmodus, der für Ihre Arbeitslasten am besten geeignet ist, finden Sie unter GKE-Betriebsmodus auswählen.
Autopilot
Einen GKE Autopilot-Cluster erstellen, der die Workload Identity-Föderation für GKE verwendet und für den Cloud Storage FUSE aktiviert ist.
gcloud container clusters create-auto ${CLUSTER_NAME} \
--location=${REGION}
Die Erstellung eines Clusters kann einige Minuten dauern.
Standard
Erstellen Sie einen regionalen GKE Standard-Cluster, der die Workload Identity-Föderation für GKE verwendet und für den Cloud Storage FUSE aktiviert ist.
gcloud container clusters create ${CLUSTER_NAME} \ --enable-ip-alias \ --addons GcsFuseCsiDriver \ --machine-type=n2-standard-4 \ --num-nodes=2 \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --location=${REGION}Die Erstellung eines Clusters kann einige Minuten dauern.
So erstellen Sie einen Knotenpool mit einem Host:
gcloud container node-pools create jax-tpu-nodepool \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-1t \ --num-nodes=1 \ --location=${REGION} \ --node-locations=${ZONE} \ --workload-metadata=GKE_METADATA
GKE erstellt einen TPU Trillium-Knotenpool mit einer 1x1-Topologie und einem Knoten. Das Flag --workload-metadata=GKE_METADATA konfiguriert den Knotenpool für die Verwendung des GKE-Metadatenservers.
JobSet installieren
Konfigurieren Sie
kubectlfür die Kommunikation mit Ihrem Cluster:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}Installieren Sie die neueste veröffentlichte Version von JobSet:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlErsetzen Sie
JOBSET_VERSIONdurch die neueste veröffentlichte Version von JobSet. Beispiel:v0.11.0JobSet-Installation prüfen:
kubectl get pods -n jobset-systemDie Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE jobset-controller-manager-6c56668494-l4dhc 1/1 Running 0 4m45sMöglicherweise müssen Sie weitere Knoten hinzufügen, wenn JobSet auf Ressourcen wartet.
Cloud Storage FUSE konfigurieren
Zum Feinabstimmen des LLM müssen Sie Trainingsdaten bereitstellen. In dieser Anleitung verwenden Sie das TinyStories-Dataset von Hugging Face. Dieses Dataset enthält von GPT-3.5 und GPT-4 synthetisch generierte Kurzgeschichten mit einem begrenzten Wortschatz.
In diesem Abschnitt wird beschrieben, wie Sie Cloud Storage FUSE so konfigurieren, dass Daten aus einem Cloud Storage-Bucket gelesen werden.
Dataset herunterladen:
wget https://huggingface.co/datasets/roneneldan/TinyStories/resolve/main/TinyStories-train.txt?download=true -O TinyStories-train.txtLaden Sie die Daten in einen neuen Cloud Storage-Bucket hoch:
gcloud storage buckets create gs://${GCS_BUCKET_NAME} \ --location=${REGION} \ --enable-hierarchical-namespace \ --uniform-bucket-level-access gcloud storage cp TinyStories-train.txt gs://${GCS_BUCKET_NAME}Damit Ihre Arbeitslast Daten über Cloud Storage FUSE lesen kann, erstellen Sie ein Kubernetes-Dienstkonto (KSA) und fügen Sie die erforderlichen Berechtigungen hinzu. Führen Sie das Skript
permissionsetup.shaus:Nachdem Sie dieses Skript ausgeführt haben, werden die folgenden Ressourcen in IhremGoogle Cloud -Projekt und GKE-Cluster konfiguriert:
- Ein neues IAM-Dienstkonto mit dem Namen
gcs-fuse-sawird in Ihrem Projekt erstellt. - Dem erstellten Google Cloud Dienstkonto (GSA) (
gcs-fuse-sa) wird die Rolleroles/storage.objectViewerfür den Cloud Storage-Bucket zugewiesen, der durch${GCS_BUCKET_NAME}angegeben wird. Mit dieser Berechtigung kann die GSA Objekte aus dem Bucket lesen. - Ein neues KSA mit dem Namen
jaxserviceaccountwird im Namespacedefaultin Ihrem GKE-Cluster erstellt. - Die IAM-Richtlinie des GSA wird aktualisiert, um dem KSA die Rolle
roles/iam.workloadIdentityUserzuzuweisen. Mit dieser Berechtigung kann das KSA die Identität des GSA übernehmen. Das KSA wird annotiert, um es mit dem GSA zu verknüpfen. Diese Annotation teilt GKE mit, welches GSA das KSA mithilfe von Workload Identity annehmen soll.
Alle Pods, die im Namespace
defaultIhres GKE-Clusters ausgeführt werden und das Dienstkontojaxserviceaccountverwenden, können sich jetzt alsgcs-fuse-sa-GSA authentifizieren. Diese Pods haben Lesezugriff auf die im Bucketgs://${GCS_BUCKET_NAME}gespeicherten Objekte. Das ist wichtig, damit der Job zum Feinabstimmen über Cloud Storage FUSE auf das Dataset zugreifen kann.
- Ein neues IAM-Dienstkonto mit dem Namen
Feinabstimmungsskript erstellen
In diesem Abschnitt sehen Sie sich das Trainingsskript an, mit dem ein Gemma 3-Modell feinabgestimmt wird. In diesem Script wird Gemma3Tokenizer verwendet.
Sehen Sie sich das folgende Gemma3LLMTrain.py-Feinabstimmungsskript an:
In diesem Skript gilt Folgendes:
- Ein
Gemma3Tokenizerwandelt Textdaten in Tokens um, die das Modell verarbeiten kann. - Die Funktion
load_and_preprocess_dataliest die Trainingsdaten aus einer Datei, teilt sie in einzelne Geschichten auf und verwendet den Tokenizer, um den Text in gepaddete Sequenzen von Tokens zu konvertieren. - Die Funktion
generate_textverwendet das Modell, seine Parameter und einen Prompt, um Text zu generieren. - Die Funktion
train_stepdefiniert eine einzelne Trainingsiteration, die den Forward-Pass, die Verlustberechnung (mit Kreuzentropie), die Gradientenberechnung und die Parameteraktualisierungen umfasst. - Die Funktion
train_modeldurchläuft das Dataset für eine bestimmte Anzahl von Epochen und ruft die Funktiontrain_stepfür jeden Batch auf. - Die Funktion
run_trainingorchestriert den gesamten Prozess zum Laden von Daten, Initialisieren des Gemma 3-Modells (Gemma3_270M) und des Optimierers, Laden vortrainierter Parameter, Einrichten von Data Sharding für die parallele Verarbeitung, Ausführen einer Testgenerierung, Ausführen der Trainingsschleife und Ausführen einer finalen Textgenerierung, um die Auswirkungen des Feinabstimmens zu demonstrieren. - Das Skript verwendet die
argparse-Bibliothek, um Befehlszeilenargumente für die Parametermaxlen,batch_sizeunddatacountzu akzeptieren.
Nachdem Sie das Feinabstimmungsskript untersucht haben, können Sie es in einen Container packen, um es in GKE auszuführen.
Feinabstimmungsskript containerisieren
Bevor Sie das Feinabstimmungsskript in einem GKE-Cluster ausführen, müssen Sie es in einen Container packen. In dieser Anleitung wird ein JAX AI-Image als Basis-Image verwendet.
Öffnen Sie die Datei
Dockerfileim selben Verzeichnis wie die DateiGemma3LLMTrain.py:Mit diesem Dockerfile werden die erforderlichen Abhängigkeiten installiert und die Datei
Gemma3LLMTrain.pyin den Container kopiert.Erstellen Sie das Docker-Image und übertragen Sie es per Push in ein Image-Repository:
export REPOSITORY=REPOSITORY_NAME export IMAGE_NAME="jax-gemma3-training" export IMAGE_TAG="latest" export DOCKERFILE_PATH="./Dockerfile" export IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE_NAME}:${IMAGE_TAG}" docker build -t "${IMAGE_URI}" -f "${DOCKERFILE_PATH}" . gcloud auth configure-docker "${REGION}-docker.pkg.dev" -q docker push "${IMAGE_URI}"Ersetzen Sie
REPOSITORY_NAMEdurch den Namen Ihres Artifact Registry-Repositorys.Fügen Sie dem Dienstkonto Rollenbindungen hinzu:
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'get(projectNumber)') gcloud artifacts repositories add-iam-policy-binding ${REPOSITORY} \ --project=${PROJECT_ID} \ --location=${REGION} \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
Nachdem sich das Image im Repository befindet, können Sie den Job zum Feinabstimmen in einem GKE-Cluster bereitstellen.
LLM-Job für die Feinabstimmung bereitstellen
In diesem Abschnitt erfahren Sie, wie Sie den LLM-Abstimmungsjob in Ihrem GKE-Cluster bereitstellen.
Öffnen Sie das Manifest
training_singlehost.yaml:Wenden Sie das Manifest an:
envsubst < training_singlehost.yaml | kubectl apply -f -
GKE erstellt einen Job, der einen Pod auf einem TPU Trillium-Knoten (v6e) startet. In diesem Pod wird das Python-Script zum Feinabstimmen ausgeführt, das über Cloud Storage FUSE auf die Feinabstimmungsdaten aus dem angegebenen Cloud Storage-Bucket zugreift, der unter dem Pfad /data eingebunden ist. Anschließend wird das Gemma-Modell optimiert.
Trainingsjob überwachen
In diesem Abschnitt überwachen Sie den Fortschritt des Fine-Tuning-Jobs und seine Leistung.
Fortschritt der Feinabstimmung ansehen
Listen Sie die Pods auf:
# Find the Pods kubectl get podsFolgen Sie der Logausgabe:
kubectl logs -f pods/POD_NAMEErsetzen Sie
POD_NAMEdurch den Namen Ihres Clusters.Die Ausgabe sieht etwa so aus:
Global device count: 1 Batch size: 128, Max length: 256, Data count: 96000 I1028 00:12:55.925999 1387 google_auth_provider.cc:181] Running on GCE, using service account ... Generating response for: Once upon a time, there was a girl named Amy. Response: Amy lived in a small house. The house was in a big field. Amy liked to play in the big field. She Start training model Loss after batch 0: 10.25 Loss after batch 10: 4.3125 . . . Loss after batch 740: 1.41406 Completed training model. Total time for training 294.6791355609894 seconds Generating response for: Once upon a time, there was a girl named Amy. Response: She loved to play with her toys. One day, Amy's mom told her that she had to go to the store toAusgabe analysieren:
- Die
Global device count: 1-Linie gibt die verwendeten TPU-Kerne an. - Das Modell generiert vor diesem Feinabstimmungslauf sinnvollen Text, da es aus einem vortrainierten Prüfpunkt geladen wird.
- Die nach dem Fine-Tuning generierte Ausgabe ähnelt eher dem Beginn einer Kurzgeschichte, was darauf hindeutet, dass das Modell aus dem neuen Dataset lernt.
- Durch das Feinabstimmen des vollständigen Datasets sollten noch bessere Ergebnisse erzielt werden.
- Die
Messwerte beobachten
Sehen Sie sich die Leistung des Feinabstimmungsjobs an, indem Sie die TPU- und CPU-Messwerte prüfen. Wenn Sie Beobachtbarkeitsmesswerte für Ihren Cluster aufrufen möchten, führen Sie die Schritte unter Messwerte für Cluster- und Arbeitslast-Beobachtbarkeit aufrufen aus.
Alternative Konfigurationen für die Feinabstimmung
In diesem Abschnitt werden alternative Konfigurationen für Ihre Feinabstimmungsarbeitslast beschrieben.
Modellauswahl
In diesem Tutorial wurde das Gemma3_270M-Modell verwendet, ein kleines Modell, das in einen TPU-Trillium-Knotenpool (v6e) mit einem einzelnen Host passt. Für größere Modelle, die mehr Arbeitsspeicher und Rechenressourcen für die Feinabstimmung erfordern, können Sie Knotenpoolkonfigurationen mit mehreren Hosts oder mehreren Slices verwenden.
Eine vollständige Liste der verfügbaren Modelle finden Sie in der Gemma-Dokumentation.
Knotenpoolkonfigurationen
In dieser Anleitung wurde ein Knotenpool mit einem einzelnen Host verwendet. Je nach Bedarf können Sie auch TPU-Slice-Knotenpools mit mehreren Hosts oder Multislice-Knotenpools erstellen.
Auf den folgenden Tabs wird gezeigt, wie Sie Knotenpools mit mehreren Hosts und mehreren Slices erstellen:
Mehrere Hosts
Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud container node-pools create jax-tpu-multihost1 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE}GKE erstellt einen TPU Trillium-Knotenpool mit einer
2x4-Topologie und zwei Knoten.Öffnen Sie die Jobdefinition
training_multihost_jobset.yaml:Stellen Sie den Job für die Feinabstimmung bereit:
envsubst < training_multihost_jobset.yaml | kubectl apply -f -
Multislice
Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud container node-pools create jax-tpu-multihost1 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE} gcloud container node-pools create jax-tpu-multihost2 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE}GKE erstellt zwei TPU Trillium-Knotenpools. Jeder Knotenpool hat eine
2x4-Topologie und zwei Knoten.Öffnen Sie die Jobdefinition
training_multislice_jobset.yaml:Stellen Sie den Job für die Feinabstimmung bereit:
envsubst < training_multislice_jobset.yaml | kubectl apply -f -
Leistungsanalyse und ‑optimierung
Mit XProf können Sie die Leistung Ihres Machine Learning-Feinabstimmungsprozesses analysieren und optimieren. XProf ist eine Reihe von Tools, mit denen ML-Arbeitslasten, die mit JAX, TensorFlow oder PyTorch/XLA erstellt wurden, profiliert und untersucht werden können. Mit XProf können Sie Ihre Modelle und die Einrichtung des Trainings optimieren, um die Effizienz zu steigern und das Training zu beschleunigen. Dazu werden Ausführungstraces, die Speichernutzung und andere Daten angezeigt.
In diesem Abschnitt führen Sie die folgenden Schritte aus, um die Leistung Ihrer Arbeitslast für das Feinabstimmen mit XProf zu analysieren:
- Installieren Sie das Paket
xprof: Ändern Sie Ihr Trainingsskript, um den XProf-Server zu starten. - Ändern Sie Ihr Kubernetes-Jobmanifest, um eine Volume-Bereitstellung für XProf-Logs einzufügen.
- Gewähren Sie dem Dienstkonto Berechtigungen zum Schreiben von XProf-Logs in einen Cloud Storage-Bucket.
- Führen Sie XProf in Ihrem Pod aus und richten Sie die Portweiterleitung ein, um auf das XProf-Dashboard zuzugreifen.
XProf-Paket installieren
Wechseln Sie in das Verzeichnis mit den XProf-Beispielen:
cd ai-ml/llm-training-jax-tpu-gemma3/xprof-enabledErstellen Sie das Docker-Image und übertragen Sie es per Push in ein Image-Repository:
export REPOSITORY=REPOSITORY_NAME export IMAGE_NAME="jax-gemma3-training-xp" export IMAGE_TAG="latest" export DOCKERFILE_PATH="./Dockerfile" export IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE_NAME}:${IMAGE_TAG}" docker build -t "${IMAGE_URI}" -f "${DOCKERFILE_PATH}" . gcloud auth configure-docker "${REGION}-docker.pkg.dev" -q docker push "${IMAGE_URI}"Ersetzen Sie
REPOSITORY_NAMEdurch den Namen Ihres Artifact Registry-Repositorys.Führen Sie das Skript
Dockerfileaus:Mit diesem Dockerfile werden XProf-Abhängigkeiten installiert.
Kopieren Sie Ihr Fine-Tuning-Skript in den Container.
In diesem Abschnitt erstellen und wenden Sie ein Kubernetes-Jobmanifest an, das die erforderlichen Volume-Bereitstellungen für XProf-Logs enthält.
Öffnen Sie die Jobdefinition
training_singlehost.yaml:Wenden Sie das Manifest an:
envsubst < training_singlehost.yaml | kubectl apply -f -
Dem Dienstkonto Berechtigungen zum Schreiben von XProf-Logs gewähren
Fügen Sie die Rolle
"roles/storage.objectUser"hinzu, damit das Dienstkonto schreiben und lesen kann:export GSA_NAME="GSA_NAME" # Same as used in initial setup # Automatically get the current project ID export PROJECT_ID=$(gcloud config get-value project) # Cloud Storage Bucket details export XPROF_GCS_BUCKET_NAME="XPROF_GCS_BUCKET_NAME" # Derived Variables export GSA_EMAIL="${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" gcloud storage buckets add-iam-policy-binding "gs://${XPROF_GCS_BUCKET_NAME}" \ --member="serviceAccount:${GSA_EMAIL}" \ --role="roles/storage.objectUser" \ --project="${PROJECT_ID}"Ersetzen Sie Folgendes:
GSA_NAME: Der Name des Google-Dienstkontos, dem die Rolle zugewiesen werden soll.XPROF_GCS_BUCKET_NAME: Der Name des Buckets, dem die Rolle zugewiesen werden soll.
Führen Sie XProf in Ihrem Pod aus:
kubectl exec POD_NAME -c training-container -it -- bash # exec into the container xprof --port 9001 --logdir /xprof # start xprofErsetzen Sie
POD_NAMEdurch den Namen Ihres Clusters.
Auf das XProf-Dashboard zugreifen
Richten Sie die Portweiterleitung zum XProf-Server im Pod ein:
kubectl port-forward POD_NAME 9001:9001Geben Sie Folgendes in die Adressleiste Ihres Browsers ein:
http://localhost:9001/Der XProf Trace Viewer wird geöffnet.
Klicken Sie im TensorBoard-Fenster auf Profil erfassen.
Geben Sie im Feld Profildienst-URL(s) oder TPU-Name
localhost:9002ein.Wenn Sie weitere Details erfassen möchten, wählen Sie unter Host Trace (TraceMe) Level die Option verbose aus und aktivieren Sie das Python-Trace-Logging.
Klicken Sie auf Aufnehmen, um das Dashboard aufzurufen.
TensorBoard erfasst das Profil und ermöglicht es Ihnen, die Leistung des Trainingsskripts zu analysieren. Das Diagramm zeigt die Ausführungszeitachse für TPU- und CPU-Leistungsprofile:
Weitere Profilerstellungsoptionen zur Analyse der Leistung Ihres Trainings-Workloads finden Sie in der JAX-Dokumentation unter Profiling computation.
Abstimmung in Produktionsumgebungen
In dieser Anleitung haben Sie gelernt, wie Sie das JAX-basierte Training in einer verteilten Umgebung testen. Für die optimierte LLM-Feinabstimmung in der Produktion verwenden Sie die Maxtext-Bibliothek. Wenn Sie sich für Diffusionsmodelle interessieren, verwenden Sie Maxdiffusion-Implementierungen.
Für Produktionsarbeitslasten mit langer Trainings- oder Feinabstimmungsdauer sollten Sie die Prüfpunktausführung von Arbeitslasten einrichten, um den Fortschrittsverlust bei einem Fehler zu minimieren. Weitere Informationen zum Einrichten von mehrstufigen Prüfpunkten finden Sie unter Große Modelle für maschinelles Lernen in GKE mit mehrstufigen Prüfpunkten trainieren.
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.
Einzelne Ressourcen löschen
Damit Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen mit den folgenden Befehlen löschen:
Löschen Sie die in dieser Anleitung erstellten Ressourcen:
gcloud container clusters delete ${CLUSTER_NAME} --location=${REGION} gcloud storage rm --recursive gs://${GCS_BUCKET_NAME} gcloud artifacts docker images delete ${IMAGE_URI} --delete-tagsWenn Sie die von XProf generierten Daten nicht benötigen, entfernen Sie den von XProf verwendeten Cloud Storage-Bucket:
gcloud storage rm --recursive gs://${XPROF_GCS_BUCKET_NAME}
Nächste Schritte
- Mehr über TPUs in GKE erfahren
- JAX-Repository ansehen