Ce tutoriel vous explique comment diffuser des modèles Open Source de grands modèles de langage (LLM) modèles à l'aide des TPU (Tensor Processing Units) sur Google Kubernetes Engine (GKE) avec le framework de diffusion Optimum TPU de Hugging Face. Dans ce tutoriel, vous allez télécharger des modèles Open Source depuis Hugging Face et les déployer sur un cluster GKE Standard à l'aide d'un conteneur qui exécute Optimum TPU.
Ce guide est un bon point de départ si vous avez besoin du contrôle précis, de l'évolutivité, de la résilience, de la portabilité et de la rentabilité des services Kubernetes gérés lors du déploiement et de la diffusion de vos charges de travail d'IA/de ML.
Ce tutoriel est destiné aux clients d'IA générative de l'écosystème Hugging Face, aux utilisateurs nouveaux ou existants de GKE, aux ingénieurs en ML, aux ingénieurs MLOps (DevOps) ou aux administrateurs de plate-forme qui souhaitent utiliser les fonctionnalités d'orchestration de conteneurs Kubernetes pour diffuser des LLM.
Google Cloud Les produits comme GKE, Vertex AI et Compute Engine sont compatibles avec différentes bibliothèques de diffusion, telles que JetStream, vLLM et d'autres offres partenaires. Par exemple, vous pouvez utiliser JetStream pour obtenir les dernières optimisations du projet. Si vous préférez les options Hugging Face, vous pouvez utiliser Optimum TPU.
Optimum TPU est compatible avec les fonctionnalités suivantes :
- Traitement par lot continu
- Distribution de jetons
- Recherche gloutonne et échantillonnage multinomial à l'aide de transformateurs.
Objectifs
- Préparez un cluster GKE standard avec la topologie TPU recommandée en fonction des caractéristiques du modèle.
- Déployez Optimum TPU sur GKE.
- Utilisez Optimum TPU pour diffuser les modèles compatibles via curl.
Avant de commencer
- Connectez-vous à votre Google Cloud compte. 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.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
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.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
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.
- Créez un compte Hugging Face si vous n'en possédez pas.
- Assurez-vous que votre projet dispose d'un quota suffisant pour Cloud TPU dans GKE.
Rôles requis
Pour obtenir les autorisations nécessaires pour configurer des clusters et des charges de travail, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :
-
Administrateur de compte de service (
roles/iam.serviceAccountAdmin) -
Gérer les clusters GKE:
Administrateur Kubernetes Engine (
roles/container.admin) -
Créer et transférer des images vers Artifact Registry:
Administrateur Artifact Registry (
roles/artifactregistry.admin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
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
gcloud CLI.
Pour configurer votre environnement avec Cloud Shell, procédez comme suit :
Dans la Google Cloud console, activez Cloud Shell.
En bas de la fenêtre de la console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Google Cloud Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Définissez les variables d'environnement par défaut :
gcloud config set project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export REGION=REGION_NAME export ZONE=ZONE export HF_TOKEN=HF_TOKENRemplacez les valeurs suivantes :
- PROJECT_ID : ID de votre Google Cloud projet.
- CLUSTER_NAME : nom de votre cluster GKE.
- REGION_NAME: région où se trouvent le cluster GKE, le bucket Cloud Storage et les nœuds TPU. La région contient des zones où les types de machines TPU v5e sont disponibles (par exemple,
us-west1,us-west4,us-central1,us-east1,us-east5oueurope-west4). - (Cluster standard uniquement) ZONE : zone où les ressources TPU sont disponibles (par exemple,
us-west4-a). Pour les clusters Autopilot, il n'est pas nécessaire de spécifier la zone, mais uniquement la région. - HF_TOKEN : votre jeton HuggingFace.
Clonez le dépôt Optimum TPU :
git clone https://github.com/huggingface/optimum-tpu.git
Accéder au modèle
Vous pouvez utiliser les modèles Gemma 2B ou Llama 3 8B. Ce tutoriel se concentre sur ces deux modèles, mais Optimum TPU est compatible avec d'autres modèles.
Gemma 2B
Pour accéder aux modèles Gemma en vue du déploiement sur GKE, vous devez d'abord signer le contrat d'autorisation de licence, puis générer un jeton d'accès Hugging Face.
Signer le contrat de consentement de la licence
Vous devez signer le contrat de consentement pour utiliser Gemma. Procédez comme suit :
- Accédez à la page d'autorisation du modèle.
- Vérifiez l'autorisation à l'aide de votre compte Hugging Face.
- Acceptez les conditions du modèle.
Générer un jeton d'accès
Générez un nouveau jeton Hugging Face si vous n'en possédez pas déjà un :
- Cliquez sur Your Profile > Settings > Access Tokens (Votre profil > Paramètres > Jetons d'accès).
- Cliquez sur Nouveau jeton.
- Spécifiez le nom de votre choix et un rôle d'au moins
Read. - Cliquez sur Generate a token (Générer un jeton).
- Copiez le jeton dans votre presse-papiers.
Llama 3 8B
Vous devez signer le contrat de consentement pour utiliser Llama 3 8B dans le dépôt Hugging Face.
Générer un jeton d'accès
Générez un nouveau jeton Hugging Face si vous n'en possédez pas déjà un :
- Cliquez sur Your Profile > Settings > Access Tokens (Votre profil > Paramètres > Jetons d'accès).
- Sélectionnez New Token (Nouveau jeton).
- Spécifiez le nom de votre choix et un rôle d'au moins
Read. - Sélectionnez Générer un jeton.
- Copiez le jeton dans votre presse-papiers.
Créer un cluster GKE
Créez un cluster GKE Standard avec un nœud de processeur :
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--num-nodes=1 \
--location=REGION_NAME
Créer un pool de nœuds TPU
Créez un pool de nœuds TPU v5e avec un nœud et huit puces :
gcloud container node-pools create tpunodepool \
--location=REGION_NAME \
--num-nodes=1 \
--machine-type=ct5lp-hightpu-8t \
--node-locations=ZONE \
--cluster=CLUSTER_NAME
Si des ressources TPU sont disponibles, GKE provisionne le pool de nœuds. Si les ressources TPU sont temporairement indisponibles, la sortie affiche un message d'erreur GCE_STOCKOUT. Pour résoudre les erreurs de disponibilité des ressources, consultez
Ressources TPU insuffisantes pour répondre à la requête TPU.
Créer le conteneur
Exécutez la commande suivante pour créer l'image :
cd optimum-tpu && make tpu-tgi
Transfert de l'image vers Artifact Registry
gcloud artifacts repositories create optimum-tpu --repository-format=docker --location=REGION_NAME && \
gcloud auth configure-docker REGION_NAME-docker.pkg.dev && \
docker image tag huggingface/optimum-tpu REGION_NAME-docker.pkg.dev/PROJECT_ID/optimum-tpu/tgi-tpu:latest && \
docker push REGION_NAME-docker.pkg.dev/PROJECT_ID/optimum-tpu/tgi-tpu:latest
Créer un secret Kubernetes pour les identifiants Hugging Face
Créez un secret Kubernetes contenant le jeton Hugging Face:
kubectl create secret generic hf-secret \
--from-literal=hf_api_token=${HF_TOKEN} \
--dry-run=client -o yaml | kubectl apply -f -
Déployer Optimum TPU
Pour déployer Optimum TPU, ce tutoriel utilise un déploiement Kubernetes. Un déploiement est un objet d'API Kubernetes qui vous permet d'exécuter plusieurs instances dupliquées de pods répartis entre les nœuds d'un cluster.
Gemma 2B
Enregistrez le fichier manifeste de déploiement suivant sous le nom
optimum-tpu-gemma-2b-2x4.yaml:Ce fichier manifeste décrit un déploiement Optimum TPU avec un équilibreur de charge interne sur le port TCP 8080.
Appliquer le fichier manifeste
kubectl apply -f optimum-tpu-gemma-2b-2x4.yaml
Llama3 8B
Enregistrez le fichier manifeste suivant sous le nom
optimum-tpu-llama3-8b-2x4.yaml:Ce fichier manifeste décrit un déploiement Optimum TPU avec un équilibreur de charge interne sur le port TCP 8080.
Appliquer le fichier manifeste
kubectl apply -f optimum-tpu-llama3-8b-2x4.yaml
Affichez les journaux du déploiement en cours d'exécution :
kubectl logs -f -l app=tgi-tpu
La sortie devrait ressembler à ce qui suit :
2024-07-09T22:39:34.365472Z WARN text_generation_router: router/src/main.rs:295: no pipeline tag found for model google/gemma-2b
2024-07-09T22:40:47.851405Z INFO text_generation_router: router/src/main.rs:314: Warming up model
2024-07-09T22:40:54.559269Z INFO text_generation_router: router/src/main.rs:351: Setting max batch total tokens to 64
2024-07-09T22:40:54.559291Z INFO text_generation_router: router/src/main.rs:352: Connected
2024-07-09T22:40:54.559295Z WARN text_generation_router: router/src/main.rs:366: Invalid hostname, defaulting to 0.0.0.0
Assurez-vous que le modèle est entièrement téléchargé avant de passer à la section suivante.
Diffuser le modèle
Configurez le transfert de port vers le modèle :
kubectl port-forward svc/service 8080:8080
Interagir avec le serveur de modèles à l'aide de curl
Vérifiez vos modèles déployés :
Dans une nouvelle session de terminal, utilisez curl pour discuter avec le modèle :
curl 127.0.0.1:8080/generate -X POST -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":40}}' -H 'Content-Type: application/json'
La sortie devrait ressembler à ce qui suit :
{"generated_text":"\n\nDeep learning is a subset of machine learning that uses artificial neural networks to learn from data.\n\nArtificial neural networks are inspired by the way the human brain works. They are made up of multiple layers"}
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 déployées
Pour éviter que les ressources que vous avez créées dans ce guide soient facturées sur votre Google Cloud compte, exécutez la commande suivante :
gcloud container clusters delete CLUSTER_NAME \
--location=REGION_NAME
Étape suivante
- Consultez la documentation Optimum TPU documentation.
- Découvrez comment exécuter des modèles Gemma sur GKE et comment exécuter des charges de travail d'IA ou de ML optimisées grâce aux fonctionnalités d'orchestration de plates-formes GKE.
- Apprenez-en plus sur les TPU dans GKE.