Questa guida mostra come ottimizzare i costi per i carichi di lavoro di pubblicazione di LLM su GKE. Questo tutorial utilizza una combinazione di VM con inizio flessibile, VM spot e ComputeClass per l'inferenza a costi contenuti.
Questa guida utilizza Mixtral 8x7b come LLM di esempio che puoi eseguire il deployment.
Questa guida è destinata 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 ulteriori informazioni sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività utente GKE comuni.
Prezzi con inizio flessibile
L'inizio flessibile è consigliato se il tuo carico di lavoro richiede risorse di cui è stato eseguito il provisioning dinamico in base alle esigenze, per un massimo di sette giorni con prenotazioni a breve termine, senza una gestione complessa delle quote e con un accesso conveniente. L'inizio flessibile è basato su Dynamic Workload Scheduler e viene fatturato utilizzando i prezzi di Dynamic Workload Scheduler:
- Sconto (fino al 53%) per vCPU, GPU e TPU.
- Pagamento a consumo.
Sfondo
In questa sezione vengono descritte le tecniche disponibili che puoi utilizzare per ottenere risorse di computing, inclusi gli acceleratori GPU, in base ai requisiti dei tuoi carichi di lavoro AI/ML. Queste tecniche sono chiamate strategie di ottenibilità degli acceleratori in GKE.
GPU
Le GPU (Graphics Processing Unit) consentono di accelerare carichi di lavoro specifici come il machine learning e l'elaborazione dei dati. GKE offre nodi dotati di queste potenti GPU per ottimizzare le prestazioni delle attività di machine learning ed elaborazione dei 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.
Avvio flessibile
L'avvio flessibile, basato su Dynamic Workload Scheduler, è un'opzione di consumo di GPU in cui GKE mantiene la richiesta di GPU ed esegue automaticamente il provisioning delle VM con inizio flessibile 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 saperne di più, consulta Avvio flessibile.
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 VM spot o dell'avvio flessibile riduce il prezzo di esecuzione delle GPU. L'utilizzo di VM spot in combinazione con l'avvio flessibile fornisce un'opzione di fallback quando la capacità delle VM spot non è disponibile.
Per saperne di più, consulta Utilizzare le VM spot con i pool di nodi GPU.
ComputeClasses
Puoi richiedere le GPU utilizzando ComputeClass. ComputeClass ti consente 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 carichi di lavoro vengano eseguiti sull'hardware selezionato. Per saperne di più, consulta Informazioni su ComputeClass personalizzate.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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.
- 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 abbia una quota prerilasciabile sufficiente per le GPU NVIDIA L4. Per saperne di più, consulta Quote prerilasciabili.
Accedi 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.
Crea un ComputeClass
In questa sezione creerai un ComputeClass personalizzato. ComputeClass definisce i tipi e le relazioni tra più risorse di computing utilizzate dal carico di lavoro.
- Nella Google Cloud console, avvia una sessione di Cloud Shell facendo clic su
Attiva Cloud Shell nella Google Cloud console. Una sessione si apre nel riquadro inferiore della Google Cloud console.
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: trueApplica il manifest
dws-flex-start.yaml:kubectl apply -f dws-flex-start.yaml
GKE esegue il deployment di macchine g2-standard-24 con acceleratori L4.
GKE utilizza
ComputeClasses per
dare la priorità prima alle VM spot e poi alle VM con inizio flessibile
secondo.
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_TOKENcon il token di accesso Hugging Face.Crea un file denominato
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 questo manifest, il campo
mountPathè impostato su/tmp, perché è il percorso in cui è impostata la variabile di ambienteHF_HOMEnel container Deep Learning (DLC) per Text Generation Inference (TGI), anziché il percorso/datapredefinito impostato nell'immagine predefinita TGI. Il modello scaricato verrà archiviato in questa directory.Esegui il deployment del modello:
kubectl apply -f mixtral-deployment.yamlGKE pianifica un nuovo pod per il deployment, che attiva il gestore della scalabilità automatica del pool di nodi 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-cccSe il modello è stato eseguito correttamente, l'output è simile al seguente:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10mPer uscire dalla visualizzazione, premi
CTRL + C.Attendi il download e l'avvio del modello da parte del container:
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"Per uscire dalla visualizzazione, premi
CTRL + C.Visualizza i pool di nodi di cui GKE ha eseguito il provisioning:
kubectl get nodes -L cloud.google.com/gke-nodepoolL'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-poolIl nome del pool di nodi creato indica il tipo di macchina. In questo caso, GKE ha eseguito il provisioning delle VM spot.
Esporre il modello:
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
Interagisci con il modello utilizzando curl
Questa sezione mostra come eseguire un test di inferenza di base per verificare il modello di cui hai eseguito il deployment.
Configura il port forwarding al modello:
kubectl port-forward service/llm-service 8080:8080L'output è simile al seguente:
Forwarding from 127.0.0.1:8080 -> 8080In 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.
Libera spazio
Per evitare che al tuo Google Cloud account 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
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina la singola risorsa
Elimina le risorse Kubernetes che hai creato da 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-secretElimina 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.