In diesem Leitfaden erfahren Sie, wie Sie die Arbeitslastkosten beim Bereitstellen eines Large Language Model (LLM) optimieren. Die GKE-Infrastruktur nutzt eine Kombination aus dem Bereitstellungsmodus „Flex-Start“, Spot-VMs und benutzerdefinierten Profilen für Compute-Klassen, um die Kosten für Arbeitslasten zu optimieren.
In dieser Anleitung wird Mixtral 8x7b als Beispiel für ein LLM verwendet, das Sie bereitstellen können.
Dieser Leitfaden richtet sich an Entwickler für maschinelles Lernen (ML), Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die Kubernetes-Container-Orchestrierungsfunktionen zum Bereitstellen 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 Enterprise-Nutzerrollen und -Aufgaben.
Hintergrund
In diesem Abschnitt werden die verfügbaren Methoden beschrieben, mit denen Sie je nach den Anforderungen Ihrer KI/ML-Arbeitslasten Computing-Ressourcen, einschließlich GPU-Beschleunigern, erhalten können. Diese Verfahren werden in GKE als Strategien zur Verfügbarkeit von Beschleunigern bezeichnet.
GPUs
Mit Grafikprozessoren (GPUs) können Sie bestimmte Arbeitslasten wie maschinelles Lernen und Datenverarbeitung beschleunigen. GKE bietet Knoten mit diesen leistungsstarken GPUs, 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“ ist eine Art der GPU-Reservierung, bei der GKE Ihre GPU-Anfrage beibehält und Ressourcen automatisch bereitstellt, wenn Kapazität verfügbar wird. Verwenden Sie den Bereitstellungsmodus „Flex-Start“ für Arbeitslasten, die eine GPU-Kapazität für einen begrenzten Zeitraum (bis zu sieben Tage) benötigen und kein festes Startdatum haben. Weitere Informationen finden Sie unter Bereitstellungsmodus „flex-start“.
Spot-VMs
Sie können GPUs mit Spot-VMs verwenden, wenn Ihre Arbeitslasten häufige Knotenunterbrechungen tolerieren können. Mit Spot-VMs oder dem Bereitstellungsmodus „Flex-Start“ können Sie die Kosten für die Ausführung von GPUs senken. Die Verwendung von Spot-VMs in Kombination mit dem Bereitstellungsmodus „Flex-Start“ bietet eine Fallback-Option, wenn die Kapazität von Spot-VMs 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 definieren, die von GKE bei Entscheidungen zur Knotenskalaierung priorisiert werden, damit Arbeitslasten auf der 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.
IAM aufrufen - 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
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 und eine Rolle von mindestens
Read
an. - Wählen Sie Token generieren aus.
Benutzerdefiniertes Compute-Klassenprofil erstellen
In diesem Abschnitt erstellen Sie ein benutzerdefiniertes Compute-Klassenprofil. Mit 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 -Konsole eine Cloud Shell-Sitzung. Klicken Sie dazu in der Google Cloud -Konsole auf
Cloud Shell aktivieren. Im unteren Bereich der Google Cloud Console 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
In GKE werden g2-standard-24
-Maschinen mit L4-Beschleunigern bereitgestellt.
In GKE werden Compute-Klassen verwendet, um Spot-VMs an erster Stelle und den Bereitstellungsmodus mit flexiblem Start 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_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 die Textgenerierungsinference (TGI) festgelegt ist, und nicht der Standardpfad/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 die Bereitstellung eines neuen Pods, wodurch die Knotenpool-Autoskalaierung 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.Knotenpools aufrufen, die von GKE bereitgestellt wurden:
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 wurden Spot-VMs von GKE bereitgestellt.
Mit curl
mit dem Modell interagieren
In diesem Abschnitt wird gezeigt, wie Sie einen einfachen Inferenztest durchführen, 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
Verwenden Sie in einer neuen Terminalsitzung
curl
, um mit Ihrem Modell zu chatten: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 in 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
Nächste Schritte
- Weitere Informationen zum Trainieren einer kleinen Arbeitslast mit dem Bereitstellungsmodus „Flex-Start“
- GPUs in GKE