In dieser Anleitung 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-VMs, Spot-VMs und ComputeClasses für kostengünstige Inferenz verwendet.
In dieser Anleitung wird Mixtral 8x7b als Beispiel-LLM verwendet, das Sie bereitstellen können.
Diese Anleitung richtet sich an ML-Entwickler, Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die Funktionen zur Kubernetes-Containerorchestrierung für die Bereitstellung von LLMs nutzen möchten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-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 komplexe Kontingentverwaltung und mit kostengünstigem Zugriff erforderlich sind. Flex-Start wird von Dynamic Workload Scheduler unterstützt und nach den Preisen von Dynamic Workload Scheduler abgerechnet:
- Rabattiert (bis zu 53%) für vCPUs, GPUs und TPUs.
- Sie zahlen nach Nutzung.
Hintergrund
In diesem Abschnitt werden die verfügbaren Techniken beschrieben, mit denen Sie Computing-Ressourcen, einschließlich GPU-Beschleunigern, basierend auf den Anforderungen Ihrer KI/ML-Arbeitslasten erhalten können. Diese Techniken werden in GKE als Strategien zur 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.
Flex-Start
Flex-Start, unterstützt von Dynamic Workload Scheduler, ist eine Option für den GPU-Verbrauch, bei der GKE Ihre GPU-Anfrage beibielhält und automatisch Flex-Start-VMs bereitstellt, wenn Kapazität verfügbar wird. Verwenden Sie Flex-Start für Arbeitslasten, die für eine begrenzte Zeit (bis zu sieben Tage) GPU-Kapazität benötigen und kein festes Startdatum haben. Weitere Informationen finden Sie unter Flex-Start.
Spot-VMs
Sie können GPUs auch 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 keine Spot-VM-Kapazität verfügbar ist.
Weitere Informationen finden Sie unter Spot-VMs mit GPU-Knotenpools verwenden.
ComputeClasses
Sie können GPUs mit ComputeClasses anfordern. Mit ComputeClasses 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 ComputeClasses.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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.
-
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.
- Achten Sie darauf, dass Sie einen GKE-Autopilot- oder -Standard-Cluster mit Version 1.32.2-gke.1652000 oder höher haben. 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 VMs auf Abruf für NVIDIA L4-GPUs hat. Weitere Informationen finden Sie unter Kontingente für VMs auf Abruf.
Zugriff auf das Modell erhalten
Generieren Sie ein neues Hugging Face-Token, falls Sie noch keines haben:
- Klicken Sie auf Profil > Einstellungen > Zugriffstokens.
- Wählen Sie Neues Token aus.
- Geben Sie einen Namen Ihrer Wahl ein und teilen Sie mindestens eine „
Read“-Rolle zu. - Wählen Sie Token generieren aus.
ComputeClass erstellen
In diesem Abschnitt erstellen Sie eine benutzerdefinierte ComputeClass. ComputeClasses definieren die Typen und Beziehungen zwischen mehreren Compute-Ressourcen, 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 Console wird eine Sitzung geöffnet.
Erstellen Sie eine Manifestdatei
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: trueWenden Sie das Manifest
dws-flex-start.yamlan:kubectl apply -f dws-flex-start.yaml
GKE stellt g2-standard-24-Maschinen mit L4-Beschleunigern bereit.
GKE verwendet
ComputeClasses, um Spot-VMs zuerst und Flex-Start-VMs
an zweiter Stelle zu priorisieren.
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_TOKENdurch 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: 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: 100GiIn diesem Manifest ist das Feld
mountPathauf/tmpfestgelegt, da dies der Pfad ist, auf den die UmgebungsvariableHF_HOMEim Deep Learning Container (DLC) für Text Generation Inference (TGI) festgelegt ist, anstelle des Standardpfads/data, der im Standard-Image von TGI festgelegt ist. Das heruntergeladene Modell wird in diesem Verzeichnis gespeichert.Modell bereitstellen:
kubectl apply -f mixtral-deployment.yamlGKE plant einen neuen Pod für die Bereitstellung. Dadurch wird der Autoscaler für Knotenpools ausgelöst, einen zweiten Knoten hinzuzufügen, bevor die zweite Replikat des Modells bereitgestellt wird.
Prüfen Sie den Status des Modells:
watch kubectl get deploy inference-mixtral-cccWenn das Modell erfolgreich bereitgestellt wurde, sieht die Ausgabe etwa so aus:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10mDrücken Sie
CTRL + C, um die Überwachung zu beenden.Warten Sie, bis der Container das Modell heruntergeladen und bereitgestellt hat:
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"Drücken Sie
CTRL + C, um die Überwachung zu beenden.Rufen Sie die von GKE bereitgestellten Knotenpools auf:
kubectl get nodes -L cloud.google.com/gke-nodepoolDie 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-poolDer Name des erstellten Knotenpools gibt den Maschinentyp an. In diesem Fall hat GKE Spot-VMs bereitgestellt.
Modell verfügbar machen:
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
Mithilfe von curl mit dem Modell interagieren
In diesem Abschnitt wird gezeigt, wie Sie einen einfachen Inferenztest durchführen können, um das bereitgestellte Modell zu prüfen.
Richten Sie die Portweiterleitung zum Modell ein:
kubectl port-forward service/llm-service 8080:8080Die Ausgabe sieht etwa so aus:
Forwarding from 127.0.0.1:8080 -> 8080Chatten Sie in einer neuen Terminalsitzung mit
curlmit Ihrem Modell: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
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.
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-secretLöschen Sie den Cluster:
gcloud container clusters delete CLUSTER_NAME
Nächste Schritte
- Informationen zum Trainieren einer kleinen Arbeitslast mit Flex-Start
- Learn more about GPUs in GKE.