Questa pagina mostra come configurare l'infrastruttura di scalabilità automatica utilizzando il Horizontal Pod Autoscaler (HPA) di GKE per il deployment di Gemma modello linguistico di grandi dimensioni (LLM) con il framework di gestione Text Generation Interface (TGI) di Hugging Face.
Per scoprire di più sulla selezione delle metriche per la scalabilità automatica, consulta le best practice per la scalabilità automatica dei carichi di lavoro LLM con 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
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
- Acquisisci familiarità con il flusso di lavoro in Pubblicare modelli aperti di Gemma utilizzando GPU su GKE con TGI di Hugging Face.
Scalabilità automatica mediante le metriche del server
Puoi utilizzare le metriche delle prestazioni specifiche dei carichi di lavoro emesse dal TGI di inferenza per indirizzare la scalabilità automatica dei pod. Per scoprire di più in merito consulta Metriche server.
Per configurare la scalabilità automatica basata su metriche personalizzate con le metriche del server:
Esporta le metriche dal server TGI in Cloud Monitoring. Utilizzi Google Cloud Managed Service per Prometheus, che semplifica il deployment e la configurazione del tuo raccoltore Prometheus. Google Cloud Managed Service per Prometheus è abilitato per impostazione predefinita cluster GKE; puoi anche abilitarlo manualmente.
Il manifest di esempio seguente mostra come configurare la definizione della risorsa PodMonitoring per indirizzare Google Cloud Managed Service per Prometheus per eseguire lo scraping delle metriche dai pod in 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: 15s
Installa l'adattatore Stackdriver delle metriche personalizzate. Questo adattatore metrica personalizzata che hai esportato in Monitoring visibile all'HPA un controller di deployment. Per ulteriori dettagli, vedi Scalabilità automatica orizzontale dei pod 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.yaml
Configura la risorsa HPA basata su metrica personalizzata personalizzate. Esegui il deployment di una risorsa HPA basata su sulla tua metrica personalizzata preferita. Per maggiori dettagli, consulta Scalabilità automatica dei pod orizzontali 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:
Dimensioni coda
Questo esempio utilizza le metriche del server TGI
tgi_queue_size
, che rappresenta il numero di richieste in coda.Per determinare la soglia corretta per le dimensioni della coda per l'HPA, consulta le best practice per 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_queue_size|gauge target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGET
Dimensione del batch
In questo esempio viene utilizzata la metrica del server TGI
tgi_batch_size
, che rappresenta il numero di richieste nel batch corrente.Per determinare la soglia corretta della dimensione del batch per l'HPA, consulta le best practice per 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
Calcolo automatico con metriche GPU
Puoi utilizzare le metriche di utilizzo e prestazioni emesse dalla GPU per dirigere il ridimensionamento automatico per i tuoi pod. Per scoprire di più in merito consulta le metriche GPU.
Per configurare la scalabilità automatica delle metriche personalizzate con le metriche GPU, segui questi passaggi:
Esporta le metriche GPU in Cloud Monitoring. Se i tuoi cluster GKE un cluster ha metriche di sistema abilitata, invia automaticamente la metrica di utilizzo della GPU a Cloud Monitoring tramite la metrica di sistema
container/accelerator/duty_cycle
, ogni 60 secondi.- Per scoprire come abilitare le metriche di sistema di GKE, consulta Configura la raccolta delle metriche.
- Per configurare la raccolta gestita, consulta la guida introduttiva alla raccolta gestita in Google Cloud Managed Service per Prometheus documentazione.
- Per ulteriori tecniche per monitorare le prestazioni dei carichi di lavoro GPU in GKE, consulta Eseguire 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: gmp-public labels: app.kubernetes.io/name: nvidia-dcgm-exporter app.kubernetes.io/part-of: google-cloud-managed-prometheus spec: selector: matchLabels: app.kubernetes.io/name: nvidia-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_util
Nel codice, assicurati di modificare il nome della metrica DCGM da utilizzare in HPA in minuscolo. Il motivo è che esiste un problema noto. in cui l'HPA non funziona con i nomi delle metriche esterne in maiuscolo.
Installa l'adattatore Stackdriver per metriche personalizzate. Questo adattatore metrica personalizzata che hai esportato in Monitoring visibile all'HPA un controller di deployment. Per ulteriori dettagli, vedi Scalabilità automatica orizzontale dei pod 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.yaml
Configura 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 Scalabilità automatica dei pod orizzontali nella documentazione di Google Cloud Managed Service per Prometheus.
- Identifica un valore target medio per l'HPA in modo da attivare la scalabilità automatica. Puoi eseguire questo test in modo sperimentale, ad esempio generando un carico crescente sul server e osservando dove si verificano i picchi di utilizzo della GPU. Tieni presente la tolleranza HPA, che per impostazione predefinita ha un intervallo di assenza di azioni pari a 0,1 intorno al valore target per smorzare l'oscillazione.
- Ti consigliamo di utilizzare strumento di inferenza del carico della locusta per i test. Puoi anche creare un la dashboard personalizzata di Cloud Monitoring per visualizzare il comportamento della metrica.
Seleziona una di queste schede per vedere un esempio di come configurare la risorsa HorizontalPodAutoscaler nel manifest:
Ciclo di lavoro (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_TARGET
Ciclo 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 ottimizzare la scalabilità automatica dei pod in base alle metriche Cloud Monitoring.
- Scopri di più sulla scalabilità automatica orizzontale dei pod nella documentazione di Kubernetes open source.