Ce guide vous explique comment optimiser les coûts des charges de travail de diffusion de LLM sur GKE. Ce tutoriel utilise une combinaison de VM à démarrage flexible, de VM Spot et de classes de calcul pour une inférence économique.
Ce guide utilise Mixtral 8x7b comme exemple de LLM que vous pouvez déployer.
Ce guide est destiné 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 Cloud de Confiance by S3NS , consultez Rôles utilisateur et tâches courantes de GKE.
Tarification avec démarrage flexible
Le démarrage flexible est recommandé si votre charge de travail nécessite des ressources provisionnées de manière dynamique selon les besoins, pendant sept jours maximum avec des réservations à court terme, sans gestion complexe des quotas et avec un accès économique. Le démarrage flexible est optimisé par le programmeur de charge de travail dynamique et facturé selon la tarification du programmeur de charge de travail dynamique :
- Vous pouvez bénéficier d'une remise (jusqu'à 53%) sur les vCPU, les GPU, les TPU et les disques SSD locaux associés.
- Vous payez à l'usage.
Arrière-plan
Cette section décrit les fonctionnalités disponibles que vous pouvez utiliser pour obtenir des ressources de calcul, y compris des GPU ou des TPU, en fonction des exigences de vos charges de travail d'IA/de ML. Ces fonctionnalités vous aident à mettre en œuvre des stratégies pour maximiser la flexibilité, l'efficacité et la disponibilité de votre capacité de calcul.
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 puissants GPU 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 À propos des GPU dans GKE.
Démarrage flexible
Le démarrage flexible, optimisé par le planificateur de charges de travail dynamiques, est une option de consommation de GPU dans laquelle GKE conserve votre demande de GPU et provisionne automatiquement des VM à démarrage flexible lorsque la capacité devient disponible. Envisagez d'utiliser le démarrage flexible pour les charges de travail qui ont besoin de capacité de GPU pendant une durée limitée (sept jours maximum) et qui n'ont pas de date de début fixe. Pour en savoir plus, consultez 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 à démarrage flexible réduit le coût d'exécution des GPU. L'utilisation de VM Spot combinée au démarrage flexible offre une option de secours 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.
ComputeClasses
Vous pouvez demander des GPU à l'aide de ComputeClasses. Les ComputeClasses vous permettent de définir une hiérarchie de configurations de nœuds que GKE doit privilégier lors des décisions de scaling des nœuds, afin que les charges de travail s'exécutent sur le matériel de votre choix. Pour en savoir plus, consultez À propos des ComputeClasses personnalisées.
Avant de commencer
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 Cloud de Confiance project.
- 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 de GPU NVIDIA L4 préemptifs. Pour en savoir plus, consultez Quotas préemptifs.
Accéder au modèle
Si vous n'en avez 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).
- Donnez-lui le nom de votre choix et un rôle disposant au moins de l'autorisation
Read. - Sélectionnez Générer un jeton.
Créer une ComputeClass
Dans cette section, vous allez créer une ComputeClass personnalisée. Les ComputeClasses définissent les types et les relations entre les différentes ressources de calcul utilisées par votre charge de travail.
- Dans la console Cloud de Confiance , lancez une session Cloud Shell en cliquant sur
Activer Cloud Shell dans la consoleCloud de Confiance . Une session s'ouvre dans le volet inférieur de la console Cloud de Confiance .
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: trueAppliquez 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 ComputeClasses pour donner la priorité aux VM Spot, puis aux VM à démarrage flexible.
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_TOKENpar 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: replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class 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: 100GiDans ce fichier manifeste, le champ
mountPathest défini sur/tmp, car il s'agit du chemin d'accès à la variable d'environnementHF_HOMEdans le conteneur de deep learning (DLC) pour l'inférence de génération de texte (TGI), au lieu du chemin d'accès par défaut/datadéfini dans l'image TGI par défaut. Le modèle téléchargé sera stocké dans ce répertoire.Déployez le modèle :
kubectl apply -f mixtral-deployment.yamlGKE 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 la deuxième réplique du modèle.
Vérifiez l'état du modèle :
watch kubectl get deploy inference-mixtral-cccSi le modèle a été déployé correctement, le résultat est semblable à ce qui suit :
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10mPour quitter la lecture, appuyez sur
CTRL + C.Attendez que le conteneur soit téléchargé et commence à diffuser le modèle :
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"Pour quitter la lecture, appuyez sur
CTRL + C.Affichez les pools de nœuds provisionnés par GKE :
kubectl get nodes -L cloud.google.com/gke-nodepoolLe 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-poolLe nom du pool de nœuds créé indique le type de machine. Dans ce cas, GKE a provisionné des Spot VM.
Exposer le modèle :
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
Interagir avec le modèle à l'aide de curl
Cette section explique comment effectuer un test d'inférence de base pour vérifier le modèle déployé.
Configurez le transfert de port vers le modèle :
kubectl port-forward service/llm-service 8080:8080Le résultat ressemble à ce qui suit :
Forwarding from 127.0.0.1:8080 -> 8080Dans 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 Cloud de Confiance by S3NS , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- Dans la console Cloud de Confiance , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer la ressource individuelle
Supprimez les ressources Kubernetes que vous avez créées à partir de 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-secretSupprimez 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 un démarrage flexible.
- Apprenez-en plus sur les GPU dans GKE.