In diesem Leitfaden erfahren Sie, wie Sie die Kosten für Arbeitslasten zum Bereitstellen von LLMs in GKE optimieren. In dieser Anleitung wird eine Kombination aus Flex-Start, Spot-VMs und benutzerdefinierten Profilen für Compute-Klassen für kostengünstige Inferenz verwendet.
In dieser Anleitung wird Mixtral 8x7b als Beispiel-LLM verwendet, das Sie bereitstellen können.
Dieser Leitfaden richtet sich an ML-Entwickler (Machine Learning), Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die daran interessiert sind, Kubernetes-Container-Orchestrierungsfunktionen zum Bereitstellen von LLMs zu nutzen. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.
Flex-Start-Preise
Flex-Start wird empfohlen, wenn für Ihre Arbeitslast dynamisch bereitgestellte Ressourcen nach Bedarf für bis zu sieben Tage mit kurzfristigen Reservierungen, ohne komplexes Kontingentmanagement und kostengünstigen Zugriff erforderlich sind. Flex-Start basiert auf dem Dynamic Workload Scheduler und wird gemäß der Preisgestaltung für den Dynamic Workload Scheduler abgerechnet:
- Rabattiert (bis zu 53%) für vCPUs, GPUs und TPUs.
- Sie zahlen nur für die tatsächliche Nutzung.
Hintergrund
In diesem Abschnitt werden die verfügbaren Techniken beschrieben, mit denen Sie basierend auf den Anforderungen Ihrer KI-/ML-Arbeitslasten Rechenressourcen, einschließlich GPU-Beschleunigern, erhalten können. Diese Verfahren werden in GKE als Strategien für die Beschaffung von Beschleunigern bezeichnet.
GPUs
Mit Grafikprozessoren (GPUs) können Sie bestimmte Arbeitslasten wie maschinelles Lernen und Datenverarbeitung beschleunigen. GKE bietet Knoten, die mit diesen leistungsstarken GPUs ausgestattet sind, um die Leistung von Aufgaben für maschinelles Lernen und Datenverarbeitung zu optimieren. GKE bietet eine Reihe von Maschinentypoptionen für die Knotenkonfiguration, einschließlich Maschinentypen mit NVIDIA H100-, A100- und L4-GPUs.
Weitere Informationen finden Sie unter GPUs in GKE.
Bereitstellungsmodus „Flex-Start“
Der Bereitstellungsmodus „Flex-Start“ basiert auf dem Dynamic Workload Scheduler. Bei diesem GPU-Nutzungstyp wird Ihre GPU-Anfrage in GKE beibehalten und Ressourcen werden automatisch bereitgestellt, wenn Kapazität verfügbar wird. Erwägen Sie die Verwendung von Flex-Start für Arbeitslasten, die für einen begrenzten Zeitraum von bis zu sieben Tagen GPU-Kapazität benötigen und kein festes Startdatum haben. Weitere Informationen finden Sie unter flex-start.
Spot-VMs
Sie können GPUs mit Spot-VMs verwenden, wenn Ihre Arbeitslasten häufige Knotenunterbrechungen tolerieren können. Bei Verwendung von Spot-VMs oder Flex-Start reduziert sich der Preis für die Ausführung von GPUs. Die Verwendung von Spot-VMs in Kombination mit Flex-Start bietet eine Fallback-Option, wenn die Spot-VM-Kapazität nicht verfügbar ist.
Weitere Informationen finden Sie unter Spot-VMs mit GPU-Knotenpools verwenden.
Benutzerdefinierte Compute-Klassen
Sie können GPUs mit benutzerdefinierten Compute-Klassen anfordern. Mit benutzerdefinierten Compute-Klassen können Sie eine Hierarchie von Knotenkonfigurationen für GKE definieren, die bei Entscheidungen zur Knotenskalierung priorisiert werden sollen, damit Arbeitslasten auf der von Ihnen ausgewählten Hardware ausgeführt werden. Weitere Informationen finden Sie unter Benutzerdefinierte Compute-Klassen.
Hinweise
- 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.
Zu IAM - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriff erlauben.
-
Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse eines Google-Kontos.
- Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
- Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
- Klicken Sie auf Speichern.
-
- Sie benötigen einen GKE Autopilot- oder Standardcluster mit Version 1.32.2-gke.1652000 oder höher. In Ihrem Cluster muss die automatische Knotenbereitstellung aktiviert und GPU-Limits konfiguriert sein.
- Erstellen Sie ein Hugging Face-Konto, falls Sie noch keines haben.
- Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für NVIDIA L4-GPUs hat. Weitere Informationen finden Sie unter GPUs und Zuteilungskontingente.
Zugriff auf das Modell erhalten
Falls noch nicht geschehen, generieren Sie ein neues Hugging Face-Token:
- Klicken Sie auf Profil > Einstellungen > Zugriffstokens.
- Wählen Sie Neues Token aus.
- Geben Sie einen Namen Ihrer Wahl und eine Rolle von mindestens
Read
an. - Wählen Sie Token generieren aus.
Benutzerdefiniertes Compute-Klassenprofil erstellen
In diesem Abschnitt erstellen Sie ein benutzerdefiniertes Profil für die Compute-Klasse. In benutzerdefinierten Profilen für Rechenklassen werden die Typen und Beziehungen zwischen mehreren Rechenressourcen definiert, die von Ihrer Arbeitslast verwendet werden.
- Starten Sie in der Google Cloud Console eine Cloud Shell-Sitzung. Klicken Sie dazu in der Google Cloud Console auf
Cloud Shell aktivieren. Im unteren Bereich der Google Cloud -Konsole wird eine Sitzung geöffnet.
Erstellen Sie eine
dws-flex-start.yaml
-Manifestdatei: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
Wenden Sie das
dws-flex-start.yaml
-Manifest an:kubectl apply -f dws-flex-start.yaml
GKE stellt g2-standard-24
-Maschinen mit L4-Beschleunigern bereit.
GKE verwendet Compute-Klassen, um Spot-VMs zu priorisieren und Flex-Start an zweiter Stelle zu platzieren.
LLM-Arbeitslast bereitstellen
Erstellen Sie mit dem folgenden Befehl ein Kubernetes-Secret, das das Hugging Face-Token enthält:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -
Ersetzen Sie
HUGGING_FACE_TOKEN
durch Ihr Hugging Face-Zugriffstoken.Erstellen Sie eine Datei mit dem Namen
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
In diesem Manifest ist das Feld
mountPath
auf/tmp
festgelegt, da dies der Pfad ist, auf den die UmgebungsvariableHF_HOME
im Deep Learning Container (DLC) für Text Generation Inference (TGI) festgelegt ist, anstelle des Standardpfads/data
, der im TGI-Standard-Image festgelegt ist. Das heruntergeladene Modell wird in diesem Verzeichnis gespeichert.Modell bereitstellen:
kubectl apply -f mixtral-deployment.yaml
GKE plant einen neuen Pod für die Bereitstellung, wodurch der Autoscaler für Knotenpools einen zweiten Knoten hinzufügt, bevor das zweite Replikat des Modells bereitgestellt wird.
Prüfen Sie den Status des Modells:
watch kubectl get deploy inference-mixtral-ccc
Wenn das Modell erfolgreich bereitgestellt wurde, sieht die Ausgabe in etwa so aus:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10m
Drücken Sie
CTRL + C
, um die Smartwatch zu beenden.So rufen Sie die von GKE bereitgestellten Knotenpools auf:
kubectl get nodes -L cloud.google.com/gke-nodepool
Die Ausgabe sieht etwa so aus:
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
Der Name des erstellten Knotenpools gibt den Maschinentyp an. In diesem Fall hat GKE Spot-VMs bereitgestellt.
Mit dem Modell über curl
interagieren
In diesem Abschnitt wird gezeigt, wie Sie einen einfachen Inferenztest durchführen können, um Ihr bereitgestelltes Modell zu prüfen.
Richten Sie die Portweiterleitung zum Modell ein:
kubectl port-forward service/llm-service 8080:8080
Die Ausgabe sieht etwa so aus:
Forwarding from 127.0.0.1:8080 -> 8080
Chatten Sie in einer neuen Terminalsitzung mit Ihrem Modell, indem Sie
curl
verwenden: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}'
Die Ausgabe sieht dann ungefähr so aus:
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
Bereinigen
Damit Ihrem Google Cloud -Konto die auf dieser Seite 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 löschen.
Projekt löschen
- 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.
Einzelne Ressource löschen
Löschen Sie die Kubernetes-Ressourcen, die Sie anhand dieser Anleitung erstellt haben:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secret
Löschen Sie den Cluster:
gcloud container clusters delete CLUSTER_NAME