Questa pagina descrive come personalizzare il deployment di GKE Inference Gateway.
Questa pagina è rivolta agli specialisti di networking responsabili della gestione dell'infrastruttura GKE e agli amministratori della piattaforma che gestiscono i carichi di lavoro AI.
Per gestire e ottimizzare i carichi di lavoro di inferenza, configura le funzionalità avanzate di GKE Inference Gateway.
Comprendi e configura le seguenti funzionalità avanzate:
- Per utilizzare l'integrazione di Model Armor, configura i controlli di sicurezza e protezione dell'AI.
- Per visualizzare le metriche e i dashboard di GKE Inference Gateway e del server di modelli e per attivare il logging degli accessi HTTP per informazioni dettagliate su richieste e risposte, configura l'osservabilità.
- Per scalare automaticamente i deployment di GKE Inference Gateway, configura la scalabilità automatica.
Configurare i controlli di sicurezza e protezione dell'AI
GKE Inference Gateway si integra con Model Armor per eseguire controlli di sicurezza su prompt e risposte per le applicazioni che utilizzano modelli linguistici di grandi dimensioni (LLM). Questa integrazione fornisce un ulteriore livello di applicazione della sicurezza a livello di infrastruttura che integra le misure di sicurezza a livello di applicazione. Ciò consente l'applicazione centralizzata dei criteri a tutto il traffico LLM.
Il seguente diagramma illustra l'integrazione di Model Armor con GKE Inference Gateway su un cluster GKE:

Per configurare i controlli di sicurezza dell'AI:
Assicurati che siano soddisfatti i seguenti prerequisiti:
- Abilita il servizio Model Armor nel tuo progetto Trusted Cloud by S3NS .
- Crea i template Model Armor utilizzando la console Model Armor, Google Cloud CLI o l'API.
Assicurati di aver già creato un modello Model Armor denominato
my-model-armor-template-name-id
.Per configurare
GCPTrafficExtension
, segui questi passaggi:Salva il seguente manifest di esempio come
gcp-traffic-extension.yaml
:kind: GCPTrafficExtension apiVersion: networking.gke.io/v1 metadata: name: my-model-armor-extension spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: GATEWAY_NAME extensionChains: - name: my-model-armor-chain1 matchCondition: celExpressions: - celMatcher: request.path.startsWith("/") extensions: - name: my-model-armor-service supportedEvents: - RequestHeaders timeout: 1s googleAPIServiceName: "modelarmor.us-central1.rep.googleapis.com" metadata: 'extensionPolicy': MODEL_ARMOR_TEMPLATE_NAME 'sanitizeUserPrompt': 'true' 'sanitizeUserResponse': 'true'
Sostituisci quanto segue:
GATEWAY_NAME
: il nome del gateway.MODEL_ARMOR_TEMPLATE_NAME
: il nome del tuo template Model Armor.
Il file
gcp-traffic-extension.yaml
include le seguenti impostazioni:targetRefs
: specifica il gateway a cui si applica questa estensione.extensionChains
: definisce una catena di estensioni da applicare al traffico.matchCondition
: definisce le condizioni in cui vengono applicate le estensioni.extensions
: definisce le estensioni da applicare.supportedEvents
: specifica gli eventi durante i quali viene richiamata l'estensione.timeout
: specifica il timeout per l'estensione.googleAPIServiceName
: specifica il nome del servizio per l'estensione.metadata
: specifica i metadati dell'estensione, incluse le impostazioni di sanificazione diextensionPolicy
e prompt o risposte.
Applica il manifest di esempio al cluster:
kubectl apply -f `gcp-traffic-extension.yaml`
Dopo aver configurato i controlli di sicurezza dell'AI e averli integrati con il gateway, Model Armor filtra automaticamente i prompt e le risposte in base alle regole definite.
Configura l'osservabilità
GKE Inference Gateway fornisce informazioni dettagliate su integrità, prestazioni e comportamento dei tuoi carichi di lavoro di inferenza. In questo modo puoi identificare e risolvere i problemi, ottimizzare l'utilizzo delle risorse e garantire l'affidabilità delle tue applicazioni.
Trusted Cloud by S3NS fornisce le seguenti dashboard di Cloud Monitoring che offrono l'osservabilità dell'inferenza per GKE Inference Gateway:
- Dashboard di GKE Inference Gateway: fornisce metriche fondamentali per la pubblicazione di LLM, come throughput di richieste e token, latenza, errori e utilizzo della cache per
InferencePool
. Per visualizzare l'elenco completo delle metriche di GKE Inference Gateway disponibili, consulta Metriche esposte. - Dashboard del server modello: fornisce una
dashboard per gli indicatori aurei del server modello. In questo modo puoi monitorare il carico e le prestazioni dei server dei modelli, ad esempio
KVCache Utilization
eQueue length
. In questo modo puoi monitorare il carico e il rendimento dei server dei modelli. - Dashboard del bilanciatore del carico: riporta le metriche del bilanciatore del carico, ad esempio le richieste al secondo, la latenza di gestione delle richieste end-to-end e i codici di stato richiesta-risposta. Queste metriche ti aiutano a comprendere le prestazioni del servizio di gestione delle richieste end-to-end e a identificare gli errori.
- Metriche Data Center GPU Manager (DCGM): fornisce metriche dalle GPU NVIDIA, ad esempio le prestazioni e l'utilizzo delle GPU NVIDIA. Puoi configurare le metriche NVIDIA Data Center GPU Manager (DCGM) in Cloud Monitoring. Per ulteriori informazioni, vedi Raccogliere e visualizzare le metriche DCGM.
Visualizza la dashboard di GKE Inference Gateway
Per visualizzare la dashboard di GKE Inference Gateway, segui questi passaggi:
Nella console Trusted Cloud , vai alla pagina Monitoring.
Nel riquadro di navigazione, seleziona Dashboard.
Nella sezione Integrazioni, seleziona GMP.
Nella pagina Modelli di dashboard di Cloud Monitoring, cerca "Gateway".
Visualizza la dashboard di GKE Inference Gateway.
In alternativa, puoi seguire le istruzioni riportate in Dashboard di monitoraggio.
Configurare la dashboard di osservabilità del server di modelli
Per raccogliere indicatori chiave da ogni server di modelli e capire cosa contribuisce al rendimento di GKE Inference Gateway, puoi configurare il monitoraggio automatico per i tuoi server di modelli. Sono inclusi server di modelli come i seguenti:
Per visualizzare le dashboard di integrazione, segui questi passaggi:
- Raccogli le metriche dal server del modello.
Nella console Trusted Cloud , vai alla pagina Monitoring.
Nel riquadro di navigazione, seleziona Dashboard.
In Integrazioni, seleziona GMP. Vengono visualizzate le dashboard di integrazione corrispondenti.
Figura: dashboard di integrazione
Per ulteriori informazioni, vedi Personalizzare il monitoraggio per le applicazioni.
Configurare gli avvisi di Cloud Monitoring
Per configurare gli avvisi di Cloud Monitoring per GKE Inference Gateway, segui questi passaggi:
Modifica la soglia negli avvisi. Salva il seguente manifest di esempio come
alerts.yaml
:groups: - name: gateway-api-inference-extension rules: - alert: HighInferenceRequestLatencyP99 annotations: title: 'High latency (P99) for model {{ $labels.model_name }}' description: 'The 99th percentile request duration for model {{ $labels.model_name }} and target model {{ $labels.target_model_name }} has been consistently above 10.0 seconds for 5 minutes.' expr: histogram_quantile(0.99, rate(inference_model_request_duration_seconds_bucket[5m])) > 10.0 for: 5m labels: severity: 'warning' - alert: HighInferenceErrorRate annotations: title: 'High error rate for model {{ $labels.model_name }}' description: 'The error rate for model {{ $labels.model_name }} and target model {{ $labels.target_model_name }} has been consistently above 5% for 5 minutes.' expr: sum by (model_name) (rate(inference_model_request_error_total[5m])) / sum by (model_name) (rate(inference_model_request_total[5m])) > 0.05 for: 5m labels: severity: 'critical' impact: 'availability' - alert: HighInferencePoolAvgQueueSize annotations: title: 'High average queue size for inference pool {{ $labels.name }}' description: 'The average number of requests pending in the queue for inference pool {{ $labels.name }} has been consistently above 50 for 5 minutes.' expr: inference_pool_average_queue_size > 50 for: 5m labels: severity: 'critical' impact: 'performance' - alert: HighInferencePoolAvgKVCacheUtilization annotations: title: 'High KV cache utilization for inference pool {{ $labels.name }}' description: 'The average KV cache utilization for inference pool {{ $labels.name }} has been consistently above 90% for 5 minutes, indicating potential resource exhaustion.' expr: inference_pool_average_kv_cache_utilization > 0.9 for: 5m labels: severity: 'critical' impact: 'resource_exhaustion'
Per creare criteri di avviso, esegui questo comando:
gcloud alpha monitoring policies migrate --policies-from-prometheus-alert-rules-yaml=alerts.yaml
Nella pagina Avvisi vengono visualizzate nuove policy di avviso.
Modificare gli avvisi
Puoi trovare l'elenco completo delle metriche più recenti disponibili nel repository GitHub kubernetes-sigs/gateway-api-inference-extension e puoi aggiungere nuovi avvisi al manifest utilizzando altre metriche.
Per apportare modifiche agli avvisi di esempio, prendi in considerazione il seguente avviso:
- alert: HighInferenceRequestLatencyP99
annotations:
title: 'High latency (P99) for model {{ $labels.model_name }}'
description: 'The 99th percentile request duration for model {{ $labels.model_name }} and target model {{ $labels.target_model_name }} has been consistently above 10.0 seconds for 5 minutes.'
expr: histogram_quantile(0.99, rate(inference_model_request_duration_seconds_bucket[5m])) > 10.0
for: 5m
labels:
severity: 'warning'
L'avviso viene attivato se il 99° percentile della durata della richiesta in 5 minuti è
superiore a 10 secondi. Puoi modificare la sezione expr
dell'avviso per regolare la
soglia in base ai tuoi requisiti.
Configura la registrazione per GKE Inference Gateway
La configurazione della registrazione per GKE Inference Gateway fornisce informazioni dettagliate su richieste e risposte, utili per la risoluzione dei problemi, il controllo e l'analisi delle prestazioni. I log di accesso HTTP registrano ogni richiesta e risposta, incluse intestazioni, codici di stato e timestamp. Questo livello di dettaglio può aiutarti a identificare i problemi, trovare gli errori e comprendere il comportamento dei tuoi carichi di lavoro di inferenza.
Per configurare la registrazione per GKE Inference Gateway, abilita la registrazione degli accessi HTTP per ciascuno dei tuoi oggetti InferencePool
.
Salva il seguente manifest di esempio come
logging-backend-policy.yaml
:apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: logging-backend-policy namespace: NAMESPACE_NAME spec: default: logging: enabled: true sampleRate: 500000 targetRef: group: inference.networking.x-k8s.io kind: InferencePool name: INFERENCE_POOL_NAME
Sostituisci quanto segue:
NAMESPACE_NAME
: il nome dello spazio dei nomi in cui è stato eseguito il deployment diInferencePool
.INFERENCE_POOL_NAME
: il nome diInferencePool
.
Applica il manifest di esempio al cluster:
kubectl apply -f logging-backend-policy.yaml
Dopo aver applicato questo manifest, GKE Inference Gateway abilita i log di accesso HTTP per il InferencePool
specificato. Puoi visualizzare questi log in
Cloud Logging. I log includono informazioni dettagliate su ogni richiesta e risposta, come l'URL della richiesta, le intestazioni, il codice di stato della risposta e la latenza.
Configura scalabilità automatica
La scalabilità automatica regola l'allocazione delle risorse in risposta alle variazioni di carico,
mantenendo le prestazioni e l'efficienza delle risorse aggiungendo o
rimuovendo dinamicamente i pod in base alla domanda. Per GKE Inference Gateway, ciò comporta la scalabilità automatica orizzontale dei pod in ogni InferencePool
. Horizontal Pod Autoscaler (HPA) di GKE esegue la scalabilità automatica dei pod in base alle metriche del server di modelli
come KVCache Utilization
. Ciò garantisce che il servizio di inferenza gestisca
diversi carichi di lavoro e volumi di query gestendo in modo efficiente l'utilizzo delle risorse.
Per configurare le istanze InferencePool
in modo che vengano scalate automaticamente in base alle metriche prodotte da GKE Inference Gateway, segui questi passaggi:
Esegui il deployment di un oggetto
PodMonitoring
nel cluster per raccogliere le metriche prodotte da GKE Inference Gateway. Per saperne di più, consulta Configurare l'osservabilità.Esegui il deployment dell'adattatore Stackdriver delle metriche personalizzate per consentire ad HPA di accedere alle metriche:
Salva il seguente manifest di esempio come
adapter_new_resource_model.yaml
:apiVersion: v1 kind: Namespace metadata: name: custom-metrics --- apiVersion: v1 kind: ServiceAccount metadata: name: custom-metrics-stackdriver-adapter namespace: custom-metrics --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-metrics:system:auth-delegator roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: custom-metrics-stackdriver-adapter namespace: custom-metrics --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: custom-metrics-auth-reader namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-reader subjects: - kind: ServiceAccount name: custom-metrics-stackdriver-adapter namespace: custom-metrics --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: custom-metrics-resource-reader namespace: custom-metrics rules: - apiGroups: - "" resources: - pods - nodes - nodes/stats verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-metrics-resource-reader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: custom-metrics-resource-reader subjects: - kind: ServiceAccount name: custom-metrics-stackdriver-adapter namespace: custom-metrics --- apiVersion: apps/v1 kind: Deployment metadata: run: custom-metrics-stackdriver-adapter k8s-app: custom-metrics-stackdriver-adapter spec: replicas: 1 selector: matchLabels: run: custom-metrics-stackdriver-adapter k8s-app: custom-metrics-stackdriver-adapter template: metadata: labels: run: custom-metrics-stackdriver-adapter k8s-app: custom-metrics-stackdriver-adapter kubernetes.io/cluster-service: "true" spec: serviceAccountName: custom-metrics-stackdriver-adapter containers: - image: gcr.io/gke-release/custom-metrics-stackdriver-adapter:v0.15.2-gke.1 imagePullPolicy: Always name: pod-custom-metrics-stackdriver-adapter command: - /adapter - --use-new-resource-model=true - --fallback-for-container-metrics=true resources: limits: cpu: 250m memory: 200Mi requests: cpu: 250m memory: 200Mi --- apiVersion: v1 kind: Service metadata: labels: run: custom-metrics-stackdriver-adapter k8s-app: custom-metrics-stackdriver-adapter kubernetes.io/cluster-service: 'true' kubernetes.io/name: Adapter name: custom-metrics-stackdriver-adapter namespace: custom-metrics spec: ports: - port: 443 protocol: TCP targetPort: 443 selector: run: custom-metrics-stackdriver-adapter k8s-app: custom-metrics-stackdriver-adapter type: ClusterIP --- apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta1.custom.metrics.k8s.io spec: insecureSkipTLSVerify: true group: custom.metrics.k8s.io groupPriorityMinimum: 100 versionPriority: 100 service: name: custom-metrics-stackdriver-adapter namespace: custom-metrics version: v1beta1 --- apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta2.custom.metrics.k8s.io spec: insecureSkipTLSVerify: true group: custom.metrics.k8s.io groupPriorityMinimum: 100 versionPriority: 200 service: name: custom-metrics-stackdriver-adapter namespace: custom-metrics version: v1beta2 --- apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta1.external.metrics.k8s.io spec: insecureSkipTLSVerify: true group: external.metrics.k8s.io groupPriorityMinimum: 100 versionPriority: 100 service: name: custom-metrics-stackdriver-adapter namespace: custom-metrics version: v1beta1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-metrics-reader rules: - apiGroups: - "external.metrics.k8s.io" resources: - "*" verbs: - list - get - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-metrics-reader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-metrics-reader subjects: - kind: ServiceAccount name: horizontal-pod-autoscaler namespace: kube-system
Applica il manifest di esempio al cluster:
kubectl apply -f adapter_new_resource_model.yaml
Per concedere all'adattatore le autorizzazioni per leggere le metriche dal progetto, esegui questo comando:
$ PROJECT_ID=PROJECT_ID $ PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") $ gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role roles/monitoring.viewer \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Sostituisci
PROJECT_ID
con l'ID del tuo progetto Trusted Cloud .Per ogni
InferencePool
, esegui il deployment di un HPA simile al seguente:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: INFERENCE_POOL_NAME namespace: INFERENCE_POOL_NAMESPACE spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: INFERENCE_POOL_NAME minReplicas: MIN_REPLICAS maxReplicas: MAX_REPLICAS metrics: - type: External external: metric: name: prometheus.googleapis.com|inference_pool_average_kv_cache_utilization|gauge selector: matchLabels: metric.labels.name: INFERENCE_POOL_NAME resource.labels.cluster: CLUSTER_NAME resource.labels.namespace: INFERENCE_POOL_NAMESPACE target: type: AverageValue averageValue: TARGET_VALUE
Sostituisci quanto segue:
INFERENCE_POOL_NAME
: il nome diInferencePool
.INFERENCE_POOL_NAMESPACE
: lo spazio dei nomi diInferencePool
.CLUSTER_NAME
: il nome del cluster.MIN_REPLICAS
: la disponibilità minima diInferencePool
(capacità di base). HPA mantiene questo numero di repliche quando l'utilizzo è inferiore alla soglia target di HPA. I carichi di lavoro ad alta disponibilità devono impostare questo valore su un valore superiore a1
per garantire la disponibilità continua durante le interruzioni dei pod.MAX_REPLICAS
: il valore che vincola il numero di acceleratori che devono essere assegnati ai carichi di lavoro ospitati inInferencePool
. HPA non aumenterà il numero di repliche oltre questo valore. Durante i periodi di picco del traffico, monitora il numero di repliche per assicurarti che il valore del campoMAX_REPLICAS
fornisca un margine sufficiente in modo che il workload possa scalare per mantenere le caratteristiche di rendimento del workload scelte.TARGET_VALUE
: il valore che rappresenta ilKV-Cache Utilization
target scelto per il server del modello. Si tratta di un numero compreso tra 0 e 100 e dipende molto dal server del modello, dal modello, dall'acceleratore e dalle caratteristiche del traffico in entrata. Puoi determinare questo valore target in modo sperimentale tramite test di carico e tracciando un grafico del throughput rispetto alla latenza. Seleziona una combinazione di velocità effettiva e latenza dal grafico e utilizza il valoreKV-Cache Utilization
corrispondente come target HPA. Devi modificare e monitorare attentamente questo valore per ottenere i risultati di prezzo/rendimento che hai scelto. Puoi utilizzare i suggerimenti per l'inferenza di GKE per determinare automaticamente questo valore.
Passaggi successivi
- Scopri di più su GKE Inference Gateway.
- Scopri di più sul deployment di GKE Inference Gateway.
- Scopri di più sulle operazioni di implementazione di GKE Inference Gateway.
- Scopri di più sull'hosting con GKE Inference Gateway.