Ce guide vous explique comment optimiser les coûts de charge de travail lorsque vous déployez un grand modèle de langage (LLM). L'infrastructure GKE utilise une combinaison de démarrage flexible, de VM Spot et de profils de classe de calcul personnalisés pour optimiser les coûts des charges de travail.
Ce guide utilise Mixtral 8x7b comme exemple de LLM que vous pouvez déployer.
Ce guide s'adresse aux ingénieurs en machine learning (ML), aux administrateurs et opérateurs de plate-forme, ainsi qu'aux spécialistes des données et de l'IA qui souhaitent utiliser les fonctionnalités d'orchestration de conteneurs Kubernetes pour diffuser des LLM. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud , consultez la section Rôles utilisateur et tâches courantes de GKE Enterprise.
Arrière-plan
Cette section décrit les techniques disponibles que vous pouvez utiliser pour obtenir des ressources de calcul, y compris des accélérateurs GPU, en fonction des exigences de vos charges de travail d'IA/ML. Dans GKE, ces techniques sont appelées stratégies d'accessibilité des accélérateurs.
GPU
Les processeurs graphiques (GPU) vous permettent d'accélérer des charges de travail spécifiques telles que le machine learning et le traitement de données. GKE propose des nœuds équipés de ces GPU puissants pour optimiser les performances des tâches de machine learning et de traitement des données. GKE fournit toute une gamme d'options de types de machines pour la configuration des nœuds, y compris les types de machines avec des GPU NVIDIA H100, A100 et L4.
Pour en savoir plus, consultez la section À propos des GPU dans GKE.
Mode de provisionnement de démarrage Flex
Le mode de provisionnement de démarrage Flex est un type de réservation de GPU dans lequel GKE conserve votre requête de GPU et provisionne automatiquement des ressources lorsque la capacité devient disponible. Envisagez d'utiliser le démarrage flexible pour les charges de travail qui ont besoin de la capacité de GPU pendant une durée limitée (jusqu'à sept jours) et qui n'ont pas de date de début fixe. Pour en savoir plus, consultez la section flex-start.
VM Spot
Vous pouvez utiliser des GPU avec des VM Spot si vos charges de travail peuvent tolérer les perturbations fréquentes des nœuds. L'utilisation de VM Spot ou de flex-start réduit le coût de l'exécution des GPU. L'utilisation de VM Spot combinée à flex-start fournit une option de remplacement lorsque la capacité des VM Spot n'est pas disponible.
Pour en savoir plus, consultez Utiliser des VM Spot avec des pools de nœuds GPU.
Classes de calcul personnalisées
Vous pouvez demander des GPU à l'aide de classes de calcul personnalisées. Les classes de calcul personnalisées vous permettent de définir une hiérarchie de configurations de nœuds que GKE peut hiérarchiser lors des décisions d'ajustement de la taille des nœuds, afin que les charges de travail s'exécutent sur le matériel que vous avez sélectionné. Pour en savoir plus, consultez la section À propos des classes de calcul personnalisées.
Avant de commencer
- 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.
-
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.
-
Make sure that you have the following role or roles on the project:
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 column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
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.
- Dans la liste Sélectionner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
- Cliquez sur Enregistrer.
-
- Assurez-vous de disposer d'un cluster GKE Autopilot ou standard exécutant la version 1.32.2-gke.1652000 ou ultérieure. Votre cluster doit activer le provisionnement automatique des nœuds et configurer les limites de GPU.
- Créez un compte Hugging Face si vous n'en possédez pas.
- Assurez-vous que votre projet dispose d'un quota suffisant pour les GPU NVIDIA L4. Pour en savoir plus, consultez les pages À propos des GPU et Quotas d'allocation.
Accéder au modèle
Si vous n'en possédez pas déjà un, générez un nouveau jeton Hugging Face:
- 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.
Créer un profil de classe de calcul personnalisé
Dans cette section, vous allez créer un profil de classe de calcul personnalisé. Les profils de classe de calcul personnalisés définissent les types et les relations entre les différentes ressources de calcul utilisées par votre charge de travail.
- Dans la console Google Cloud , lancez une session Cloud Shell en cliquant sur
Activer Cloud Shell dans la console Google Cloud . Une session s'ouvre dans le volet inférieur de la console Google Cloud .
Créez un fichier manifeste
dws-flex-start.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: dws-model-inference-class spec: priorities: - machineType: g2-standard-24 spot: true - machineType: g2-standard-24 flexStart: enabled: true nodeRecycling: leadTimeSeconds: 3600 nodePoolAutoCreation: enabled: true
Appliquez le fichier manifeste
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
GKE déploie des machines g2-standard-24
avec des accélérateurs L4.
GKE utilise des classes de calcul pour donner la priorité aux VM Spot, puis aux VM flex-start.
Déployer la charge de travail LLM
Créez un secret Kubernetes contenant le jeton Hugging Face à l'aide de la commande suivante:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -
Remplacez
HUGGING_FACE_TOKEN
par votre jeton d'accès Hugging Face.Créez un fichier nommé
mixtral-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: inference-mixtral-ccc spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: containers: - name: llm image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu124.2-3.ubuntu2204.py311 resources: requests: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" limits: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" env: - name: MODEL_ID value: mistralai/Mixtral-8x7B-Instruct-v0.1 - name: NUM_SHARD value: "2" - name: PORT value: "8080" - name: QUANTIZE value: bitsandbytes-nf4 - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: name: model-inference-secret key: HUGGING_FACE_TOKEN volumeMounts: - mountPath: /dev/shm name: dshm - mountPath: /tmp name: ephemeral-volume volumes: - name: dshm emptyDir: medium: Memory - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "premium-rwo" resources: requests: storage: 100Gi
Dans ce fichier manifeste, le champ
mountPath
est défini sur/tmp
, car il s'agit du chemin d'accès où la variable d'environnementHF_HOME
du conteneur de deep learning (DLC) pour l'inférence de génération de texte (TGI) est définie, au lieu du chemin d'accès/data
par défaut défini dans l'image par défaut de la TGI. Le modèle téléchargé sera stocké dans ce répertoire.Déployez le modèle :
kubectl apply -f mixtral-deployment.yaml
GKE planifie le déploiement d'un nouveau pod, ce qui déclenche l'autoscaler du pool de nœuds pour ajouter un deuxième nœud avant de déployer le deuxième réplica du modèle.
Vérifiez l'état du modèle :
watch kubectl get deploy inference-mixtral-ccc
Si le modèle a été déployé avec succès, le résultat ressemble à ceci:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10m
Pour quitter la lecture, appuyez sur
CTRL + C
.Affichez les pools de nœuds que GKE a provisionnés:
kubectl get nodes -L cloud.google.com/gke-nodepool
Le résultat ressemble à ce qui suit :
NAME STATUS ROLES AGE VERSION GKE-NODEPOOL gke-flex-na-nap-g2-standard--0723b782-fg7v Ready <none> 10m v1.32.3-gke.1152000 nap-g2-standard-24-spot-gpu2-1gbdlbxz gke-flex-nap-zo-default-pool-09f6fe53-fzm8 Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-lv2v Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-pq6m Ready <none> 32m v1.32.3-gke.1152000 default-pool
Le nom du pool de nœuds créé indique le type de machine. Dans ce cas, GKE a provisionné des VM Spot.
Interagir avec le modèle à l'aide de curl
Cette section explique comment effectuer un test d'inférence de base pour vérifier votre modèle déployé.
Configurez le transfert de port vers le modèle:
kubectl port-forward service/llm-service 8080:8080
Le résultat ressemble à ce qui suit :
Forwarding from 127.0.0.1:8080 -> 8080
Dans une nouvelle session de terminal, discutez avec votre modèle à l'aide de
curl
:curl http://localhost:8080/v1/completions \ -X POST \ -H "Content-Type: application/json" \ -d '{ "model": "mixtral-8x7b-instruct-gptq", "prompt": "<s>[INST]Who was the first president of the United States?[/INST]", "max_tokens": 40}'
La sortie ressemble à ceci :
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
Effectuer un nettoyage
Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer la ressource individuelle
Supprimez les ressources Kubernetes que vous avez créées dans ce guide:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secret
Supprimez le cluster à l'aide de la commande suivante :
gcloud container clusters delete CLUSTER_NAME
Étapes suivantes
- Découvrez comment entraîner une petite charge de travail avec flex-start.
- Apprenez-en plus sur les GPU dans GKE.