Puoi configurare lo scalabilità automatica per i carichi di lavoro dei modelli linguistici di grandi dimensioni (LLM) in esecuzione su GPU in Google Kubernetes Engine (GKE). La scalabilità automatica regola automaticamente le risorse per gestire la domanda fluttuante, ottimizzare le prestazioni e ridurre i costi operativi. Questo processo prevede il deployment del modello LLM Gemma e l'utilizzo di Horizontal Pod Autoscaler (HPA) di GKE per scalare automaticamente i pod. Il deployment integra anche il framework di servizio Hugging Face Text Generation Interface (TGI) per un'inferenza efficiente.
Per saperne di più sulla selezione delle metriche per la scalabilità automatica, consulta Best practice per la scalabilità automatica dei workload LLM con le GPU su GKE.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Familiarizza con il flusso di lavoro in Erogare modelli aperti Gemma utilizzando le GPU su GKE con Hugging Face TGI.
Esegui la scalabilità automatica utilizzando le metriche del server
Puoi utilizzare le metriche di rendimento specifiche del workload emesse dal server di inferenza TGI per indirizzare la scalabilità automatica dei tuoi pod. Per scoprire di più su queste metriche, consulta Metriche del server.
Per configurare la scalabilità automatica delle metriche personalizzate con le metriche del server:
Esporta le metriche dal server TGI a Cloud Monitoring. Utilizzi Google Cloud Managed Service per Prometheus, che semplifica il deployment e la configurazione dell'agente di raccolta di Prometheus. Google Cloud Managed Service per Prometheus è abilitato per impostazione predefinita nel cluster GKE. Puoi anche abilitarlo manualmente.
Il seguente manifest di esempio mostra come configurare la definizione della risorsa PodMonitoring per indicare a Google Cloud Managed Service per Prometheus di eseguire lo scraping delle metriche dai tuoi pod a intervalli ricorrenti di 15 secondi:
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: gemma-pod-monitoring spec: selector: matchLabels: app: gemma-server endpoints: - port: 8000 interval: 15sInstalla l'adattatore Stackdriver delle metriche personalizzate. Questo adattatore rende la metrica personalizzata che hai esportato in Monitoring visibile al controller HPA. Per maggiori dettagli, consulta la sezione Scalabilità automatica orizzontale dei pod nella documentazione di Google Cloud Managed Service per Prometheus.
Il seguente comando di esempio mostra come installare l'adattatore:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yamlConfigura la risorsa HPA basata su metrica personalizzata personalizzate. Esegui il deployment di una risorsa HPA basata sulla metrica personalizzata che preferisci. Per maggiori dettagli, consulta la sezione Scalabilità automatica orizzontale dei pod nella documentazione di Google Cloud Managed Service per Prometheus.
Seleziona una di queste schede per visualizzare esempi di come configurare la risorsa HorizontalPodAutoscaler nel manifest:
Dimensione coda
Questo esempio utilizza le metriche del server
tgi_queue_sizeTGI, che rappresentano il numero di richieste nella coda.Per determinare la soglia di dimensione della coda corretta per HPA, consulta Best practice per la scalabilità automatica dei workload di inferenza LLM con GPU.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-server spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: prometheus.googleapis.com|tgi_queue_size|gauge target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGETDimensione del batch
Questo esempio utilizza la metrica del server
tgi_batch_sizeTGI, che rappresenta il numero di richieste nel batch corrente.Per determinare la soglia di dimensione del batch corretta per HPA, consulta Best practice per la scalabilità automatica dei carichi di lavoro di inferenza LLM con GPU.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-server spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: prometheus.googleapis.com|tgi_batch_current_size|gauge target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGET
Scalabilità automatica utilizzando le metriche GPU
Puoi utilizzare le metriche di utilizzo e rendimento emesse dalla GPU per indirizzare la scalabilità automatica dei tuoi pod. Per saperne di più su queste metriche, consulta Metriche GPU.
Per configurare la scalabilità automatica delle metriche personalizzate con le metriche della GPU:
Esporta le metriche della GPU in Cloud Monitoring. Se il cluster GKE ha attivato le metriche di sistema, invia automaticamente la metrica di utilizzo della GPU a Cloud Monitoring tramite la metrica di sistema
container/accelerator/duty_cycleogni 60 secondi.- Per scoprire come attivare le metriche di sistema di GKE, consulta Configurare la raccolta delle metriche.
- Per configurare la raccolta gestita, consulta la sezione Inizia a utilizzare la raccolta gestita nella documentazione di Google Cloud Managed Service per Prometheus.
- Per ulteriori tecniche per monitorare le prestazioni del workload GPU in GKE, consulta la sezione Esegui GPU nei pool di nodi GKE Standard.
Il seguente manifest di esempio mostra come configurare la definizione della risorsa PodMonitoring per importare le metriche dal carico di lavoro NVIDIA DCGM:
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: nvidia-dcgm-exporter-for-hpa namespace: gke-managed-system labels: app.kubernetes.io/name: nvidia-dcgm-exporter app.kubernetes.io/part-of: google-cloud-managed-prometheus spec: selector: matchLabels: app.kubernetes.io/name: gke-managed-dcgm-exporter endpoints: - port: metrics interval: 15s metricRelabeling: - action: keep sourceLabels: [__name__] - action: replace sourceLabels: [__name__] targetLabel: __name__ regex: DCGM_FI_DEV_GPU_UTIL replacement: dcgm_fi_dev_gpu_utilNel codice, assicurati di modificare il nome della metrica DCGM da utilizzare in HPA in minuscolo. Questo perché esiste un problema noto per cui HPA non funziona con i nomi delle metriche esterne in maiuscolo. Per i cluster che non utilizzano un esportatore DCGM gestito, assicurati che
metadata.namespaceespec.selector.matchLabelsdi HPA corrispondano esattamente alla configurazione dell'esportatore DCGM.Questo allineamento preciso è fondamentale per l'individuazione e l'interrogazione delle metrica personalizzata da parte di HPA.Installa l'adattatore Stackdriver delle metriche personalizzate. Questo adattatore rende la metrica personalizzata che hai esportato in Monitoring visibile al controller HPA. Per maggiori dettagli, consulta la sezione Scalabilità automatica orizzontale dei pod nella documentazione di Google Cloud Managed Service per Prometheus.
Il seguente comando di esempio mostra come eseguire questa installazione:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yamlConfigura la risorsa HPA basata su metrica personalizzata personalizzate. Esegui il deployment di una risorsa HPA in base alla metrica personalizzata che preferisci. Per maggiori dettagli, consulta la sezione Scalabilità automatica orizzontale dei pod nella documentazione di Google Cloud Managed Service per Prometheus.
- Identifica un target di valore medio per HPA per attivare la scalabilità automatica. Puoi farlo in modo sperimentale, ad esempio generando un carico crescente sul server e osservando dove raggiunge il picco di utilizzo della GPU. Tieni presente la tolleranza HPA, che per impostazione predefinita prevede un intervallo di nessuna azione di 0,1 intorno al valore target per smorzare l'oscillazione.
- Per i test, ti consigliamo di utilizzare lo strumento di inferenza del carico di locust. Puoi anche creare una dashboard personalizzata di Cloud Monitoring per visualizzare il comportamento della metrica.
Seleziona una di queste schede per visualizzare un esempio di come configurare la risorsa HorizontalPodAutoscaler nel manifest:
Ciclo di servizio (sistema GKE)
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: External external: metric: name: kubernetes.io|container|accelerator|duty_cycle selector: matchLabels: resource.labels.container_name: inference-server resource.labels.namespace_name: default target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGETCiclo di servizio (DCGM)
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: External external: metric: name: prometheus.googleapis.com|dcgm_fi_dev_gpu_util|unknown selector: matchLabels: metric.labels.exported_container: inference-server metric.labels.exported_namespace: default target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGET
Passaggi successivi
- Scopri come scalare automaticamente in base a metriche personalizzate o esterne.
- Scopri di più sulla scalabilità automatica orizzontale dei pod nella documentazione di Kubernetes open source.