Ce tutoriel explique comment affiner un grand modèle de langage (LLM) à l'aide de Tensor Processing Units (TPU) sur Google Kubernetes Engine (GKE) avec JAX. L'affinage vous permet d'adapter un modèle de fondation tel que Gemma 3 à un domaine ou une tâche spécifique. Ce processus améliore la précision et la justesse du modèle en mettant à jour ses paramètres avec votre propre ensemble de données spécialisé.
Ce guide est un bon point de départ si vous avez besoin du contrôle précis, de la personnalisation, de l'évolutivité, de la résilience, de la portabilité et de la rentabilité des services Kubernetes gérés lors de l'affinage de vos charges de travail d'IA/de ML.
Arrière-plan
En utilisant des TPU sur GKE avec Jax pour affiner un LLM, vous pouvez créer une solution d'affinage robuste et prête pour la production avec tous les avantages de Kubernetes géré.
Gemma
Gemma est un ensemble de modèles multimodaux d'IA/ML générative, légers et disponibles publiquement, publiés sous licence ouverte. Ces modèles d'IA sont disponibles pour s'exécuter dans vos applications, votre matériel, vos appareils mobiles ou vos services hébergés. Gemma 3 introduit la multimodalité et accepte les entrées de langage visuel et les sorties de texte. Il gère les fenêtres de contexte jusqu'à 128 000 jetons et est compatible avec plus de 140 langues. Gemma 3 offre également des capacités améliorées en mathématiques, en raisonnement et en discussion, y compris des sorties structurées et l'appel de fonctions.
Vous pouvez utiliser les modèles Gemma pour la génération de texte, mais vous pouvez également les ajuster pour des tâches spécialisées.
Pour en savoir plus, consultez la documentation Gemma.
TPU
Les TPU sont des circuits intégrés propres aux applications (ASIC) développés spécifiquement par Google pour accélérer le machine learning et les modèles d'IA créés à l'aide de frameworks tels que TensorFlow, PyTorch et JAX.
Avant d'utiliser des TPU dans GKE, nous vous recommandons de suivre le parcours de formation suivant :
- Découvrez la disponibilité actuelle des versions de TPU avec l'architecture système de Cloud TPU.
- En savoir plus sur les TPU dans GKE
JAX
JAX est un framework de machine learning hautes performances conçu pour être utilisé avec des TPU et des GPU. JAX fournit une API pour créer et entraîner des modèles de machine learning.
Pour en savoir plus, consultez le dépôt JAX.
Objectifs
Ce tutoriel couvre les étapes suivantes :
- Créer un cluster GKE Autopilot ou standard avec la topologie TPU recommandée en fonction des caractéristiques du modèle. Dans ce tutoriel, vous allez affiner les pools de nœuds à hôte unique.
- Ajoutez des données à un bucket Cloud Storage et installez-les dans le conteneur via Cloud Storage FUSE.
- Déployez le job d'affinage du LLM sur GKE.
- Surveillez le job d'affinage et consultez les journaux.
Avant de commencer
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
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.-
Assurez-vous de disposer des rôles suivants sur le projet : roles/container.admin,roles/iam.serviceAccountAdmin,roles/storage.admin
Vérifier les rôles
-
Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
-
Dans la colonne Compte principal, recherchez toutes les lignes qui vous identifient ou identifient un groupe dont vous faites partie. Pour savoir à quels groupes vous appartenez, contactez votre administrateur.
- Pour toutes les lignes qui vous spécifient ou vous incluent, consultez la colonne Rôle pour vous assurer que la liste inclut les rôles requis.
Attribuer les rôles
-
Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.
- Cliquez sur Sélectionner un rôle, puis recherchez le rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
-
- Assurez-vous de disposer d'un quota suffisant pour 16 puces TPU Trillium (v6e). Dans ce tutoriel, vous utilisez une configuration de pool de nœuds qui nécessite 16 puces et des instances à la demande.
- Assurez-vous de disposer d'un dépôt Docker. Si vous n'en avez pas, créez un dépôt standard dans Artifact Registry.
Préparer l'environnement
Dans ce tutoriel, vous utilisez Cloud Shell pour gérer les ressources hébergées sur Google Cloud. Cloud Shell est préinstallé avec les logiciels dont vous avez besoin pour ce tutoriel, y compris kubectl et Google Cloud CLI.
Pour configurer votre environnement avec Cloud Shell, procédez comme suit :
Dans la console Google Cloud , lancez une session Cloud Shell et cliquez sur
Activer Cloud Shell. Une session s'ouvre dans le volet inférieur de la console Google Cloud .
Définissez les variables d'environnement par défaut :
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_NAMERemplacez les valeurs suivantes :
PROJECT_ID: ID de votre projet Google Cloud .CLUSTER_NAME: nom de votre cluster GKE.CONTROL_PLANE_LOCATION: région Compute Engine où se trouvent votre cluster GKE et vos nœuds TPU. La région doit contenir des zones dans lesquelles les types de machines TPU Trillium (v6e) sont disponibles.ZONE: zone de la régionCONTROL_PLANE_LOCATIONque vous avez sélectionnée, où les types de machines TPU Trillium (v6e) sont disponibles. Pour lister les zones dans lesquelles les TPU Trillium (v6e) sont disponibles, exécutez la commande suivante :gcloud compute accelerator-types list --filter="name~ct6e" --format="value(zone)"BUCKET_NAME: nom du bucket Cloud Storage contenant vos données d'entraînement.
Clonez l'exemple de dépôt :
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git cd kubernetes-engine-samplesAccédez au répertoire de travail :
cd ai-ml/llm-training-jax-tpu-gemma3
Créer et configurer des ressources Google Cloud
Dans cette section, vous allez créer et configurer des ressources Google Cloud .
Créer un cluster GKE
Vous pouvez affiner un LLM sur des TPU dans un cluster GKE Autopilot ou GKE Standard. Nous vous recommandons d'utiliser un cluster GKE Autopilot pour une expérience Kubernetes entièrement gérée. Pour choisir le mode de fonctionnement GKE le mieux adapté à vos charges de travail, consultez Choisir un mode de fonctionnement GKE.
Autopilot
Créez un cluster GKE Autopilot qui utilise Workload Identity Federation for GKE et dans lequel Cloud Storage FUSE est activé.
gcloud container clusters create-auto ${CLUSTER_NAME} \
--location=${REGION}
La création du cluster peut prendre plusieurs minutes.
Standard
Créez un cluster GKE Standard régional qui utilise la fédération d'identité de charge de travail pour GKE et sur lequel Cloud Storage FUSE est activé.
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}La création du cluster peut prendre plusieurs minutes.
Créez un pool de nœuds à hôte unique :
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 crée un pool de nœuds TPU Trillium avec une topologie 1x1 et un nœud. L'option --workload-metadata=GKE_METADATA configure le pool de nœuds de sorte qu'il utilise le serveur de métadonnées GKE.
Installer JobSet
Configurez
kubectlde manière à communiquer avec votre cluster :gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}Installez la dernière version de JobSet :
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlRemplacez
JOBSET_VERSIONpar la dernière version publiée de JobSet. Par exemple,v0.11.0.Vérifiez l'installation de JobSet :
kubectl get pods -n jobset-systemLe résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE jobset-controller-manager-6c56668494-l4dhc 1/1 Running 0 4m45sVous devrez peut-être ajouter des nœuds si JobSet attend des ressources.
Configurer Cloud Storage FUSE
Pour affiner le LLM, vous devez fournir des données d'entraînement. Dans ce tutoriel, vous allez utiliser l'ensemble de données TinyStories de Hugging Face. Cet ensemble de données contient des nouvelles générées de manière synthétique par GPT-3.5 et GPT-4, qui utilisent un vocabulaire limité.
Cette section explique comment configurer Cloud Storage FUSE pour lire les données d'un bucket Cloud Storage.
Téléchargez l'ensemble de données :
wget https://huggingface.co/datasets/roneneldan/TinyStories/resolve/main/TinyStories-train.txt?download=true -O TinyStories-train.txtImportez les données dans un nouveau bucket Cloud Storage :
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}Pour permettre à votre charge de travail de lire des données via Cloud Storage FUSE, créez un compte de service Kubernetes (KSA) et ajoutez les autorisations requises. Exécutez le script
permissionsetup.sh:Une fois ce script exécuté, les ressources suivantes sont configurées dans votre projetGoogle Cloud et votre cluster GKE :
- Un compte de service IAM nommé
gcs-fuse-saest créé dans votre projet. - Le compte de service Google Cloud (GSA) créé (
gcs-fuse-sa) reçoit le rôleroles/storage.objectViewersur le bucket Cloud Storage spécifié par${GCS_BUCKET_NAME}. Google Cloud Cette autorisation permet à l'AGS de lire les objets du bucket. - Un nouveau compte de service Kubernetes nommé
jaxserviceaccountest créé dans l'espace de nomsdefaultde votre cluster GKE. - La stratégie IAM du compte de service Google est mise à jour pour accorder le rôle
roles/iam.workloadIdentityUserau compte de service Kubernetes. Cette autorisation permet au KSA d'emprunter l'identité du GSA. Le KSA est annoté pour être associé au GSA. Cette annotation indique à GKE quel GSA le KSA doit emprunter en utilisant Workload Identity.
Tout pod s'exécutant dans l'espace de noms
defaultde votre cluster GKE et utilisant le compte de servicejaxserviceaccountpourra désormais s'authentifier en tant que compte de service Googlegcs-fuse-sa. Ces pods auront un accès en lecture aux objets stockés dans le bucketgs://${GCS_BUCKET_NAME}, ce qui est essentiel pour que le job d'affinage puisse accéder au jeu de données à l'aide de Cloud Storage FUSE.
- Un compte de service IAM nommé
Créer le script d'affinage
Dans cette section, vous allez explorer le script d'entraînement qui effectue une opération de réglage fin sur un modèle Gemma 3. Ce script utilise Gemma3Tokenizer.
Examinez le script de réglage fin Gemma3LLMTrain.py suivant :
Dans ce script, les éléments suivants s'appliquent :
- Un
Gemma3Tokenizerconvertit les données textuelles en jetons que le modèle peut traiter. - La fonction
load_and_preprocess_datalit les données d'entraînement à partir d'un fichier, les divise en histoires individuelles et utilise le tokenizer pour convertir le texte en séquences de jetons complétées. - La fonction
generate_textutilise le modèle, ses paramètres et une invite pour générer du texte. - La fonction
train_stepdéfinit une seule itération d'entraînement qui inclut la passe avant, le calcul de la perte (à l'aide de l'entropie croisée), le calcul du gradient et les mises à jour des paramètres. - La fonction
train_modelparcourt l'ensemble de données pour un nombre d'époques spécifié, ce qui appelle la fonctiontrain_steppour chaque lot. - La fonction
run_trainingorchestre l'ensemble du processus de chargement des données, d'initialisation du modèle Gemma 3 (Gemma3_270M) et de l'optimiseur, de chargement des paramètres pré-entraînés, de configuration du partitionnement des données pour le traitement parallèle, d'exécution d'une génération de test, d'exécution de la boucle d'entraînement et d'exécution d'une génération de texte finale pour démontrer l'effet du réglage fin. - Le script utilise la bibliothèque
argparsepour accepter les arguments de ligne de commande pour les paramètresmaxlen,batch_sizeetdatacount.
Maintenant que vous avez exploré le script d'affinage, conteneurisez-le pour l'exécuter sur GKE.
Conteneuriser le script d'affinage
Avant d'exécuter le script d'affinage dans un cluster GKE, vous devez le conteneuriser. Ce tutoriel utilise une image JAX AI comme image de base.
Ouvrez le fichier
Dockerfiledans le même répertoire que le fichierGemma3LLMTrain.py:Ce fichier Dockerfile installe les dépendances nécessaires et copie le fichier
Gemma3LLMTrain.pydans le conteneur.Créez l'image Docker et transférez-la vers un dépôt d'images :
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}"Remplacez
REPOSITORY_NAMEpar le nom de votre dépôt Artifact Registry.Ajoutez des liaisons de rôle au compte de service :
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"
Une fois l'image dans le dépôt, vous pouvez déployer le job d'affinage dans un cluster GKE.
Déployer le job d'affinage du LLM
Cette section vous explique comment déployer le job de réglage fin du LLM sur votre cluster GKE.
Ouvrez le fichier manifeste
training_singlehost.yaml:Appliquez le fichier manifeste :
envsubst < training_singlehost.yaml | kubectl apply -f -
GKE crée un Job qui lance un pod sur un nœud TPU Trillium (v6e). Ce pod exécute le script Python d'affinage, qui accède aux données d'affinage à partir du bucket Cloud Storage spécifié, monté au chemin d'accès /data à l'aide de Cloud Storage FUSE. Le script affine ensuite le modèle Gemma.
Surveiller le job d'entraînement
Dans cette section, vous allez surveiller la progression du job d'affinage et ses performances.
Afficher la progression de l'affinage
Répertoriez les pods :
# Find the Pods kubectl get podsSuivez la sortie du journal :
kubectl logs -f pods/POD_NAMERemplacez
POD_NAMEpar le nom de votre pod.Le résultat ressemble à ce qui suit :
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 toAnalysez le résultat :
- La ligne
Global device count: 1indique les cœurs de TPU utilisés. - Le modèle génère un texte raisonnable avant cette exécution de l'affinage, car il se charge à partir d'un point de contrôle pré-entraîné.
- La sortie générée après l'affinage ressemble davantage au début d'une nouvelle, ce qui indique que le modèle apprend à partir du nouvel ensemble de données.
- L'affinage sur l'ensemble de données complet devrait produire des résultats encore plus précis.
- La ligne
Observer les métriques
Consultez les performances du job d'affinage en vérifiant les métriques TPU et CPU. Pour afficher les métriques d'observabilité de votre cluster, suivez les étapes décrites dans Afficher les métriques d'observabilité des clusters et des charges de travail.
Autres configurations d'affinage
Cette section décrit d'autres configurations pour votre charge de travail d'affinage.
Sélection du modèle
Ce tutoriel utilisait le modèle Gemma3_270M, qui est un petit modèle qui s'intègre dans un pool de nœuds TPU Trillium (v6e) à hôte unique. Pour les modèles plus volumineux qui nécessitent plus de mémoire et de calcul pour l'affinage, vous pouvez utiliser des configurations de pool de nœuds multihôtes ou multislices.
Pour obtenir la liste complète des modèles disponibles, consultez la documentation Gemma.
Configurations de pool de nœuds
Ce tutoriel utilisait un pool de nœuds à hôte unique. Vous pouvez également créer des pools de nœuds de tranche TPU multi-hôtes ou des pools de nœuds multislices, selon vos besoins.
Les onglets suivants montrent comment créer des pools de nœuds multi-hôtes et multislices :
Multi-hôtes
Dans Cloud Shell, exécutez la commande suivante :
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 crée un pool de nœuds TPU Trillium avec une topologie
2x4et deux nœuds.Ouvrez la définition du job
training_multihost_jobset.yaml:Déployez le job d'affinage :
envsubst < training_multihost_jobset.yaml | kubectl apply -f -
Multitranches
Dans Cloud Shell, exécutez la commande suivante :
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 crée deux pools de nœuds TPU Trillium. Chaque pool de nœuds possède une topologie
2x4et deux nœuds.Ouvrez la définition du job
training_multislice_jobset.yaml:Déployez le job d'affinage :
envsubst < training_multislice_jobset.yaml | kubectl apply -f -
Analyse et optimisation des performances
Pour analyser et optimiser les performances de votre affinement du machine learning, vous pouvez utiliser XProf. XProf est une suite d'outils qui profile et inspecte les charges de travail de ML créées avec JAX, TensorFlow ou PyTorch/XLA. En affichant les traces d'exécution, l'utilisation de la mémoire et d'autres données, XProf vous permet d'affiner vos modèles et votre configuration d'entraînement pour une meilleure efficacité et un entraînement plus rapide.
Pour analyser les performances de votre charge de travail d'affinage à l'aide de XProf, suivez les étapes décrites dans cette section :
- Installez le package
xprof. Modifiez votre script d'entraînement pour démarrer le serveur XProf. - Modifiez le fichier manifeste de votre job Kubernetes pour inclure un montage de volume pour les journaux XProf.
- Accordez au compte de service les autorisations nécessaires pour écrire les journaux XProf dans un bucket Cloud Storage.
- Exécutez XProf dans votre pod et configurez le transfert de port pour accéder au tableau de bord XProf.
Installer le package XProf
Accédez au répertoire qui contient les exemples XProf :
cd ai-ml/llm-training-jax-tpu-gemma3/xprof-enabledCréez l'image Docker et transférez-la vers un dépôt d'images :
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}"Remplacez
REPOSITORY_NAMEpar le nom de votre dépôt Artifact Registry.Exécutez le script
Dockerfile:Ce fichier Dockerfile installe les dépendances XProf.
Copiez votre script d'affinage dans le conteneur.
Dans cette section, créez et appliquez un fichier manifeste de job Kubernetes qui inclut les montages de volume nécessaires pour les journaux XProf.
Ouvrez la définition du job
training_singlehost.yaml:Appliquez le fichier manifeste :
envsubst < training_singlehost.yaml | kubectl apply -f -
Accorder au compte de service les autorisations nécessaires pour écrire les journaux XProf
Pour permettre au compte de service d'écrire et de lire, ajoutez le rôle
"roles/storage.objectUser":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}"Remplacez les éléments suivants :
GSA_NAME: nom du compte de service Google auquel attribuer le rôle.XPROF_GCS_BUCKET_NAME: nom du bucket auquel attribuer le rôle.
Exécutez XProf dans votre pod :
kubectl exec POD_NAME -c training-container -it -- bash # exec into the container xprof --port 9001 --logdir /xprof # start xprofRemplacez
POD_NAMEpar le nom de votre pod.
Accéder au tableau de bord XProf
Configurez un transfert de port vers le serveur XProf dans le pod :
kubectl port-forward POD_NAME 9001:9001Dans la barre d'adresse de votre navigateur, saisissez les informations suivantes :
http://localhost:9001/La visionneuse de trace XProf s'ouvre.
Dans la fenêtre TensorBoard, cliquez sur Capturer le profil.
Dans le champ URL de service du profil ou nom du TPU, saisissez
localhost:9002.Pour capturer plus de détails, dans Niveau de trace de l'hôte (TraceMe), sélectionnez verbose et activez la journalisation des traces Python.
Pour afficher le tableau de bord, cliquez sur Capture.
TensorBoard capture le profil et vous permet d'analyser les performances du script d'entraînement. Le graphique affiche la chronologie d'exécution pour les profils de performances TPU et CPU :
Pour découvrir d'autres options de profilage permettant d'analyser les performances de votre charge de travail d'entraînement, consultez la documentation JAX sur le profilage du calcul.
Finetuning dans les environnements de production
Ce tutoriel vous a montré comment tester l'entraînement basé sur JAX dans un environnement distribué. Pour un affinement optimisé des LLM en production, utilisez la bibliothèque MaxText. Si vous êtes intéressé par les modèles de diffusion, utilisez les implémentations Maxdiffusion.
Pour les charges de travail d'entraînement ou de réglage fin de longue durée en production, configurez la gestion des points de contrôle des charges de travail afin de minimiser la perte de progression en cas d'échec. Pour en savoir plus sur la configuration du checkpointing à plusieurs niveaux, consultez Entraîner des modèles de machine learning à grande échelle sur GKE avec le checkpointing à plusieurs niveaux.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer les ressources individuelles
Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées sur votre compte Google Cloud , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles en exécutant les commandes suivantes :
Supprimez les ressources que vous avez créées dans ce tutoriel :
gcloud container clusters delete ${CLUSTER_NAME} --location=${REGION} gcloud storage rm --recursive gs://${GCS_BUCKET_NAME} gcloud artifacts docker images delete ${IMAGE_URI} --delete-tagsSi vous n'avez pas besoin des données générées par XProf, supprimez le bucket Cloud Storage utilisé par XProf :
gcloud storage rm --recursive gs://${XPROF_GCS_BUCKET_NAME}
Étapes suivantes
- Apprenez-en plus sur les TPU dans GKE.
- Explorez le dépôt JAX.