Questa guida mostra come ottimizzare i costi per i workload di servizio LLM su GKE. Questo tutorial utilizza una combinazione di avvio flessibile, VM spot e profili di classi di calcolo personalizzate per un'inferenza conveniente.
Questa guida utilizza Mixtral 8x7b come esempio di LLM che puoi eseguire il deployment.
Questa guida è rivolta a ingegneri di machine learning (ML), amministratori e operatori di piattaforme e specialisti di dati e AI interessati a utilizzare le funzionalità di orchestrazione dei container Kubernetes per la pubblicazione di LLM. Per maggiori informazioni sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Trusted Cloud by S3NS , consulta Ruoli utente e attività comuni di GKE Enterprise.
Prezzi per l'avvio flessibile
L'avvio flessibile è consigliato se il tuo carico di lavoro richiede risorse di cui viene eseguito il provisioning in modo dinamico in base alle necessità, per un massimo di sette giorni con prenotazioni a breve termine, senza una gestione complessa delle quote e con un accesso conveniente. L'avvio flessibile è basato su Dynamic Workload Scheduler e viene fatturato utilizzando i prezzi di Dynamic Workload Scheduler:
- Scontati (fino al 53%) per vCPU, GPU e TPU.
- Paghi in base al consumo.
Sfondo
Questa sezione descrive le tecniche disponibili che puoi utilizzare per ottenere risorse di computing, inclusi gli acceleratori GPU, in base ai requisiti dei tuoi carichi di lavoro di AI/ML. Queste tecniche sono chiamate strategie di ottenibilità dell'acceleratore in GKE.
GPU
Le GPU (Graphics Processing Unit) consentono di accelerare carichi di lavoro specifici come machine learning ed elaborazione di dati. GKE offre nodi dotati di queste potenti GPU per ottimizzare le prestazioni delle attività di machine learning e trattamento dati. GKE offre una gamma di opzioni di tipo di macchina per la configurazione dei nodi, inclusi i tipi di macchina con GPU NVIDIA H100, A100 e L4.
Per saperne di più, consulta Informazioni sulle GPU in GKE.
Modalità di provisioning con avvio flessibile
La modalità di provisioning con avvio flessibile, basata su Dynamic Workload Scheduler, è un tipo di consumo di GPU in cui GKE mantiene la tua richiesta di GPU e esegue automaticamente il provisioning delle risorse quando la capacità diventa disponibile. Valuta la possibilità di utilizzare l'avvio flessibile per i carichi di lavoro che richiedono capacità GPU per un periodo di tempo limitato, fino a sette giorni, e non hanno una data di inizio fissa. Per ulteriori informazioni, consulta flex-start.
VM spot
Puoi utilizzare le GPU con le VM spot se i tuoi carichi di lavoro possono tollerare interruzioni frequenti dei nodi. L'utilizzo di Spot VM o flex-start riduce il prezzo di esecuzione delle GPU. L'utilizzo delle VM spot in combinazione con l'avvio flessibile fornisce un'opzione di fallback quando la capacità delle VM spot non è disponibile.
Per ulteriori informazioni, consulta Utilizzare le VM spot con i pool di nodi GPU.
Classi di computing personalizzate
Puoi richiedere GPU utilizzando classi di calcolo personalizzate. Le classi di calcolo personalizzate ti consentono di definire una gerarchia di configurazioni dei nodi che GKE deve dare la priorità durante le decisioni di scalabilità dei nodi, in modo che i workload vengano eseguiti sull'hardware selezionato. Per ulteriori informazioni, consulta Informazioni sulle classi di calcolo personalizzate.
Prima di iniziare
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
-
Make sure that you have the following role or roles on the project:
Check for the roles
-
In the Trusted 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 Trusted Cloud console, go to the IAM page.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'identificatore di un utente in un pool di identità della forza lavoro. Per maggiori dettagli, vedi Rappresentare gli utenti del pool di forza lavoro nelle norme IAM o contatta l'amministratore.
- Nell'elenco Seleziona un ruolo, seleziona un ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
- Fai clic su Salva.
-
- Assicurati di avere un cluster GKE Autopilot o Standard che esegue la versione 1.32.2-gke.1652000 o successive. Il cluster deve abilitare il provisioning automatico dei nodi e configurare i limiti delle GPU .
- Crea un account Hugging Face, se non ne hai già uno.
- Assicurati che il tuo progetto disponga di una quota sufficiente per le GPU NVIDIA L4. Per ulteriori informazioni, consulta Informazioni sulle GPU e Quote di allocazione.
Ottenere l'accesso al modello
Se non ne hai già uno, genera un nuovo token Hugging Face:
- Fai clic su Il tuo profilo > Impostazioni > Token di accesso.
- Seleziona Nuovo token.
- Specifica un nome a tua scelta e un ruolo di almeno
Read
. - Seleziona Genera un token.
Creare un profilo di classe di calcolo personalizzato
In questa sezione, crei un profilo di classe di calcolo personalizzato. I profili di classe di calcolo personalizzati definiscono i tipi e le relazioni tra più risorse di calcolo utilizzate dal tuo carico di lavoro.
- Nella console Trusted Cloud , avvia una sessione di Cloud Shell facendo clic su
Attiva Cloud Shell nella consoleTrusted Cloud . Si apre una sessione nel riquadro inferiore della console Trusted Cloud .
Crea un file manifest
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
Applica il manifest
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
GKE esegue il deployment di g2-standard-24
macchine con acceleratori L4.
GKE utilizza le
classi di calcolo per
dare la priorità prima alle VM spot e poi
all'avvio flessibile.
Esegui il deployment del carico di lavoro LLM
Crea un secret Kubernetes che contenga il token Hugging Face utilizzando il seguente comando:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -
Sostituisci
HUGGING_FACE_TOKEN
con il tuo token di accesso Hugging Face.Crea un file denominato
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 questo manifest, il campo
mountPath
è impostato su/tmp
perché è il percorso in cui è impostata la variabile di ambienteHF_HOME
nel Deep Learning Container (DLC) per Text Generation Inference (TGI), anziché il percorso/data
predefinito impostato nell'immagine predefinita di TGI. Il modello scaricato verrà archiviato in questa directory.Esegui il deployment del modello:
kubectl apply -f mixtral-deployment.yaml
GKE pianifica il deployment di un nuovo pod, il che attiva il gestore della scalabilità automaticapool di nodil per aggiungere un secondo nodo prima di eseguire il deployment della seconda replica del modello.
Verifica lo stato del modello:
watch kubectl get deploy inference-mixtral-ccc
Se il deployment del modello è stato eseguito correttamente, l'output è simile al seguente:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10m
Per uscire dall'app, premi
CTRL + C
.Visualizza i node pool di cui è stato eseguito il provisioning da GKE:
kubectl get nodes -L cloud.google.com/gke-nodepool
L'output è simile al seguente:
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
Il nome del pool di nodi creato indica il tipo di macchina. In questo caso, GKE ha eseguito il provisioning delle VM spot.
Interagisci con il modello utilizzando curl
Questa sezione mostra come eseguire un test di inferenza di base per verificare il modello di cui è stato eseguito il deployment.
Configura il port forwarding sul modello:
kubectl port-forward service/llm-service 8080:8080
L'output è simile al seguente:
Forwarding from 127.0.0.1:8080 -> 8080
In una nuova sessione del terminale, chatta con il tuo modello utilizzando
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}'
L'output è simile al seguente:
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
Esegui la pulizia
Per evitare che al tuo account Trusted Cloud by S3NS vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- In the Trusted 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.
Elimina la singola risorsa
Elimina le risorse Kubernetes che hai creato in questa guida:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secret
Elimina il cluster:
gcloud container clusters delete CLUSTER_NAME
Passaggi successivi
- Scopri di più su come addestrare un piccolo carico di lavoro con l'avvio flessibile.
- Scopri di più sulle GPU in GKE.