Nesta página, descrevemos como personalizar a implantação do GKE Inference Gateway.
Esta página é destinada a especialistas Rede responsáveis por gerenciar a infraestrutura do GKE e a administradores de plataforma que gerenciam cargas de trabalho de IA.
Para gerenciar e otimizar cargas de trabalho de inferência, configure recursos avançados do gateway de inferência do GKE.
Entenda e configure os seguintes recursos avançados:
- Para usar a integração do Model Armor, configure as verificações de segurança da IA.
- Para melhorar o GKE Inference Gateway com recursos como segurança de API, limitação de taxa e análise, configure o Apigee para autenticação e gerenciamento de API.
- Para encaminhar solicitações com base no nome do modelo no corpo da solicitação, configure o roteamento com base no corpo.
- Para conferir métricas e painéis do GKE Inference Gateway e dos servidores de modelos e ativar o registro de acesso HTTP, configure a capacidade de observação.
- Para escalonar automaticamente as implantações do GKE Inference Gateway, configure o escalonamento automático.
Configurar verificações de segurança e proteção de IA
O gateway de inferência do GKE se integra ao Model Armor para realizar verificações de segurança em comandos e respostas de aplicativos que usam modelos de linguagem grandes (LLMs). Essa integração oferece uma camada extra de aplicação de segurança no nível da infraestrutura que complementa as medidas de segurança no nível do aplicativo. Isso permite a aplicação centralizada de políticas em todo o tráfego de LLM.
O diagrama a seguir ilustra a integração do Model Armor com o gateway de inferência do GKE em um cluster do GKE:

Para configurar as verificações de segurança de IA, siga estas etapas:
Pré-requisitos
- Ative o serviço Model Armor no seu projeto do Google Cloud .
Crie os modelos do Model Armor usando o console do Model Armor, a CLI do Google Cloud ou a API. O comando a seguir cria um modelo chamado
llm
que registra operações e filtra conteúdo prejudicial.# Set environment variables PROJECT_ID=$(gcloud config get-value project) # Replace <var>CLUSTER_LOCATION<var> with the location of your GKE cluster. For example, `us-central1`. LOCATION="CLUSTER_LOCATION" MODEL_ARMOR_TEMPLATE_NAME=llm # Set the regional API endpoint gcloud config set api_endpoint_overrides/modelarmor \ "https://modelarmor.$LOCATION.rep.googleapis.com/" # Create the template gcloud model-armor templates create $MODEL_ARMOR_TEMPLATE_NAME \ --location $LOCATION \ --pi-and-jailbreak-filter-settings-enforcement=enabled \ --pi-and-jailbreak-filter-settings-confidence-level=MEDIUM_AND_ABOVE \ --rai-settings-filters='[{ "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },{ "filterType": "DANGEROUS", "confidenceLevel": "MEDIUM_AND_ABOVE" },{ "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },{ "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }]' \ --template-metadata-log-sanitize-operations \ --template-metadata-log-operations
Conceder permissões do IAM
A conta de serviço das extensões de serviço precisa de permissões para acessar os recursos necessários. Conceda os papéis necessários executando os seguintes comandos:
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'get(projectNumber)') gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/container.admin gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.user
Configurar o
GCPTrafficExtension
Para aplicar as políticas do Model Armor ao seu gateway, crie um recurso
GCPTrafficExtension
com o formato de metadados correto.Salve o seguinte manifesto de amostra como
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 - RequestBody - RequestTrailers - ResponseHeaders - ResponseBody - ResponseTrailers timeout: 1s failOpen: false googleAPIServiceName: "modelarmor.${LOCATION}.rep.googleapis.com" metadata: model_armor_settings: '[{"model": "${MODEL}","model_response_template_id": "projects/${PROJECT_ID}/locations/${LOCATION}/templates/${MODEL_ARMOR_TEMPLATE_NAME}","user_prompt_template_id": "projects/${PROJECT_ID}/locations/${LOCATION}/templates/${MODEL_ARMOR_TEMPLATE_NAME}"}]'
Substitua:
GATEWAY_NAME
: o nome do gateway.MODEL_ARMOR_TEMPLATE_NAME
: o nome do seu modelo do Model Armor.
O arquivo
gcp-traffic-extension.yaml
inclui as seguintes configurações:targetRefs
: especifica o gateway a que essa extensão se aplica.extensionChains
: define uma cadeia de extensões a serem aplicadas ao tráfego.matchCondition
: define as condições em que as extensões são aplicadas.extensions
: define as extensões a serem aplicadas.supportedEvents
: especifica os eventos durante os quais a extensão é invocada.timeout
: especifica o tempo limite da extensão.googleAPIServiceName
: especifica o nome do serviço para a extensão.metadata
: especifica os metadados da extensão, incluindo oextensionPolicy
e as configurações de limpeza de comandos ou respostas.
Aplique o manifesto de amostra ao cluster:
export GATEWAY_NAME="your-gateway-name" export MODEL="google/gemma-3-1b-it" # Or your specific model envsubst < gcp-traffic-extension.yaml | kubectl apply -f -
Depois de configurar as verificações de segurança de IA e integrá-las ao seu gateway, o Model Armor filtra automaticamente comandos e respostas com base nas regras definidas.
Configurar o Apigee para autenticação e gerenciamento de APIs
O gateway de inferência do GKE se integra ao Apigee para fornecer autenticação, autorização e gerenciamento de API para suas cargas de trabalho de inferência. Para saber mais sobre os benefícios de usar a Apigee, consulte Principais benefícios de usar a Apigee.
É possível integrar o gateway de inferência do GKE ao Apigee para melhorar o gateway de inferência do GKE com recursos como segurança de API, limitação de taxa, cotas, análises e monetização.
Pré-requisitos
Antes de começar, verifique se você tem o seguinte:
- Um cluster do GKE executando a versão 1.34.* ou mais recente.
- Um cluster do GKE com o GKE Inference Gateway implantado.
- Uma instância do Apigee criada na mesma região do cluster do GKE.
- O operador da API Management da Apigee e os CRDs instalados no cluster do GKE. Para instruções, consulte Instalar o operador do APIM do Apigee.
kubectl
configurado para se conectar ao cluster do GKE.Google Cloud CLI
instalado e autenticado.
Crie um ApigeeBackendService
Primeiro, crie um recurso ApigeeBackendService
. O gateway de inferência do GKE usa isso para criar um processador de extensão do Apigee.
Salve o seguinte manifesto como
my-apigee-backend-service.yaml
:apiVersion: apim.googleapis.com/v1 kind: ApigeeBackendService metadata: name: my-apigee-backend-service spec: apigeeEnv: "APIGEE_ENVIRONMENT_NAME" # optional field defaultSecurityEnabled: true # optional field locations: name: "LOCATION" network: "CLUSTER_NETWORK" subnetwork: "CLUSTER_SUBNETWORK"
Substitua:
APIGEE_ENVIRONMENT_NAME
: o nome do seu ambiente da Apigee. Observação: não é necessário definir esse campo se oapigee-apim-operator
for instalado com a sinalizaçãogenerateEnv=TRUE
. Caso contrário, crie um ambiente da Apigee seguindo as instruções em Criar um ambiente.LOCATION
: o local da sua instância da Apigee.CLUSTER_NETWORK
: a rede do cluster do GKE.CLUSTER_SUBNETWORK
: a sub-rede do cluster do GKE.
Aplique o manifesto ao cluster:
kubectl apply -f my-apigee-backend-service.yaml
Verifique se o status mudou para
CREATED
:kubectl wait --for=jsonpath='{.status.currentState}'="CREATED" -f my-apigee-backend-service.yaml --timeout=5m
Configurar o gateway de inferência do GKE
Configure o gateway de inferência do GKE para ativar o processador de extensão do Apigee como uma extensão de tráfego do balanceador de carga.
Salve o seguinte manifesto como
my-apigee-traffic-extension.yaml
:kind: GCPTrafficExtension apiVersion: networking.gke.io/v1 metadata: name: my-apigee-traffic-extension spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: GATEWAY_NAME extensionChains: - name: my-traffic-extension-chain matchCondition: celExpressions: - celMatcher: request.path.startsWith("/") extensions: - name: my-apigee-extension metadata: # The value for `apigee-extension-processor` must match the name of the `ApigeeBackendService` resource that was applied earlier. apigee-extension-processor: my-apigee-backend-service failOpen: false timeout: 1s supportedEvents: - RequestHeaders - ResponseHeaders - ResponseBody backendRef: group: apim.googleapis.com kind: ApigeeBackendService name: my-apigee-backend-service port: 443
Substitua
GATEWAY_NAME
pelo nome do seu gateway.Aplique o manifesto ao cluster:
kubectl apply -f my-apigee-traffic-extension.yaml
Aguarde até que o status
GCPTrafficExtension
se torneProgrammed
:kubectl wait --for=jsonpath='{.status.ancestors[0].conditions[?(@.type=="Programmed")].status}'=True -f my-apigee-traffic-extension.yaml --timeout=5m
Enviar solicitações autenticadas usando chaves de API
Para encontrar o endereço IP do gateway de inferência do GKE, inspecione o status do gateway:
GW_IP=$(kubectl get gateway/GATEWAY_NAME -o jsonpath='{.status.addresses[0].value}')
Substitua
GATEWAY_NAME
pelo nome do seu gateway.Teste uma solicitação sem autenticação. Esta solicitação deve ser rejeitada:
curl -i ${GW_IP}/v1/completions -H 'Content-Type: application/json' -d '{ "model": "food-review", "prompt": "Write as if you were a critic: San Francisco", "max_tokens": 100, "temperature": 0 }'
Você vai receber uma resposta semelhante a esta, indicando que a extensão do Apigee está funcionando:
{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
Acesse a interface da Apigee e crie uma chave de API. Para instruções, consulte Criar uma chave de API.
Envie a chave de API no cabeçalho da solicitação HTTP:
curl -i ${GW_IP}/v1/completions -H 'Content-Type: application/json' -H 'x-api-key: API_KEY' -d '{ "model": "food-review", "prompt": "Write as if you were a critic: San Francisco", "max_tokens": 100, "temperature": 0 }'
Substitua
API_KEY
pela sua chave de API.
Para mais informações sobre como configurar políticas da Apigee, consulte Usar políticas de gerenciamento de API com o operador APIM da Apigee para Kubernetes.
Configurar observabilidade
O gateway de inferência do GKE fornece insights sobre a integridade, o desempenho e o comportamento das suas cargas de trabalho de inferência. Isso ajuda a identificar e resolver problemas, otimizar a utilização de recursos e garantir a confiabilidade dos aplicativos.
Google Cloud fornece os seguintes painéis do Cloud Monitoring que oferecem observabilidade de inferência para o gateway de inferência do GKE:
- Painel do gateway de inferência do GKE: fornece métricas de ouro para veiculação de LLM, como capacidade de processamento de solicitações e tokens, latência, erros e utilização do cache para o
InferencePool
. Para conferir a lista completa de métricas disponíveis do GKE Inference Gateway, consulte Métricas expostas. - Painel do servidor de modelo: fornece um painel para os sinais dourados do servidor de modelo. Isso permite monitorar a carga e o desempenho dos servidores de modelos, como
KVCache Utilization
eQueue length
. - Painel do balanceador de carga: informa métricas do balanceador de carga, como solicitações por segundo, latência de atendimento de solicitações de ponta a ponta e códigos de status de solicitação-resposta. Essas métricas ajudam você a entender o desempenho do serviço de solicitações de ponta a ponta e identificar erros.
- Métricas do Data Center GPU Manager (DCGM): fornecem métricas de GPUs NVIDIA, como o desempenho e a utilização delas. É possível configurar métricas do NVIDIA Data Center GPU Manager (DCGM) no Cloud Monitoring. Para mais informações, consulte Coletar e conferir métricas do DCGM.
Acessar o painel do GKE Inference Gateway
Para acessar o painel do GKE Inference Gateway, siga estas etapas:
No console Google Cloud , acesse a página Recomendações.
No painel de navegação, selecione Painéis.
Na seção Integrações, selecione GMP.
Na página Modelos de painel do Cloud Monitoring, pesquise "Gateway".
Acesse o painel do GKE Inference Gateway.
Como alternativa, siga as instruções em Painel do Monitoring.
Configurar o painel de observabilidade do servidor de modelo
Para coletar indicadores de ouro de cada servidor de modelo e entender o que contribui para o desempenho do GKE Inference Gateway, configure o monitoramento automático dos servidores de modelo. Isso inclui servidores de modelo como os seguintes:
Para acessar os painéis de integração, primeiro verifique se você está coletando métricas do servidor de modelo. Em seguida, realize as seguintes etapas:
No console Google Cloud , acesse a página Recomendações.
No painel de navegação, selecione Painéis.
Em Integrações, selecione GMP. Os painéis de integração correspondentes são exibidos.
Figura: painéis de integração
Para mais informações, consulte Personalizar o monitoramento de aplicativos.
Configurar os alertas do Cloud Monitoring
Para configurar alertas do Cloud Monitoring para o GKE Inference Gateway, siga estas etapas:
Salve o seguinte manifesto de amostra como
alerts.yaml
e modifique os limites conforme necessário: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'
Para criar políticas de alertas, execute o seguinte comando:
gcloud alpha monitoring policies migrate --policies-from-prometheus-alert-rules-yaml=alerts.yaml
As novas políticas de alertas aparecem na página "Alertas".
Modificar alertas
A lista completa das métricas mais recentes está disponível no repositório do GitHub kubernetes-sigs/gateway-api-inference-extension, e é possível adicionar novos alertas ao manifesto usando outras métricas.
Para modificar os alertas de exemplo, considere o exemplo a seguir:
- 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'
Esse alerta é acionado se o 99º percentil da duração da solicitação em cinco minutos
ultrapassar 10 segundos. É possível modificar a seção expr
do alerta para ajustar o limite com base nos seus requisitos.
Configurar a geração de registros para o GKE Inference Gateway
A configuração do registro em log para o GKE Inference Gateway fornece informações detalhadas sobre solicitações e respostas, o que é útil para solução de problemas, auditoria e análise de desempenho. Os registros de acesso HTTP registram todas as solicitações e respostas, incluindo cabeçalhos, códigos de status e carimbos de data/hora. Esse nível de detalhes pode ajudar você a identificar problemas, encontrar erros e entender o comportamento das cargas de trabalho de inferência.
Para configurar o registro em registros do GKE Inference Gateway, ative o registro de acesso HTTP para cada um dos seus objetos InferencePool
.
Salve o seguinte manifesto de amostra como
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
Substitua:
NAMESPACE_NAME
: o nome do namespace em que seuInferencePool
está implantado.INFERENCE_POOL_NAME
: o nome doInferencePool
.
Aplique o manifesto de amostra ao cluster:
kubectl apply -f logging-backend-policy.yaml
Depois de aplicar esse manifesto, o GKE Inference Gateway vai ativar os registros de acesso HTTP para o InferencePool
especificado. É possível conferir esses registros no
Cloud Logging. Os registros incluem informações detalhadas sobre cada solicitação e resposta, como o URL da solicitação, cabeçalhos, código de status da resposta e latência.
Criar métricas com base em registros para ver detalhes do erro
É possível usar métricas com base em registros para analisar os registros de balanceamento de carga e extrair detalhes de erros. Cada classe de gateway do GKE, como as classes de gateway
gke-l7-global-external-managed
e gke-l7-regional-internal-managed
, é apoiada por um balanceador de carga diferente. Para mais
informações, consulte Recursos do
GatewayClass.
Cada balanceador de carga tem um recurso monitorado diferente que você precisa usar ao criar uma métrica baseada em registros. Para mais informações sobre o recurso monitorado de cada balanceador de carga, consulte:
- Para balanceadores de carga externos regionais: Métricas com base em registros para balanceadores de carga HTTP(S) externos
- Para balanceadores de carga internos: métricas com base em registros para balanceadores de carga HTTP(S) internos
Para criar uma métrica com base em registros e ver os detalhes do erro, faça o seguinte:
Crie um arquivo JSON chamado
error_detail_metric.json
com a seguinte definição deLogMetric
. Essa configuração cria uma métrica que extrai o campoproxyStatus
dos registros do balanceador de carga.{ "description": "Metric to extract error details from load balancer logs.", "filter": "resource.type=\"MONITORED_RESOURCE\"", "metricDescriptor": { "metricKind": "DELTA", "valueType": "INT64", "labels": [ { "key": "error_detail", "valueType": "STRING", "description": "The detailed error string from the load balancer." } ] }, "labelExtractors": { "error_detail": "EXTRACT(jsonPayload.proxyStatus)" } }
Substitua
MONITORED_RESOURCE
pelo recurso monitorado do balanceador de carga.Abra o Cloud Shell ou o terminal local em que a CLI gcloud está instalada.
Para criar a métrica, execute o comando
gcloud logging metrics create
com a flag--config-from-file
:gcloud logging metrics create error_detail_metric \ --config-from-file=error_detail_metric.json
Depois que a métrica for criada, use-a no Cloud Monitoring para conferir a distribuição de erros informados pelo balanceador de carga. Para mais informações, consulte Criar uma métrica com base em registros.
Para mais informações sobre como criar alertas com base em métricas baseadas em registros, consulte Criar uma política de alertas em uma métrica de contador.
Configure o escalonamento automático
O escalonamento automático ajusta a alocação de recursos em resposta às variações de carga, mantendo a performance e a eficiência de recursos ao adicionar ou remover pods dinamicamente com base na demanda. Para o GKE Inference Gateway, isso envolve o escalonamento automático horizontal de pods em cada InferencePool
. O escalonador automático horizontal de pods (HPA) do GKE escalona automaticamente os pods com base em métricas do servidor de modelos, como KVCache Utilization
. Isso garante que o serviço de inferência processe diferentes cargas de trabalho e volumes de consultas, gerenciando o uso de recursos de maneira eficiente.
Para configurar instâncias InferencePool
para que elas façam o escalonamento automático com base nas métricas produzidas pelo GKE Inference Gateway, siga estas etapas:
Implante um objeto
PodMonitoring
no cluster para coletar métricas produzidas pelo GKE Inference Gateway. Para mais informações, consulte Configurar a capacidade de observação.Implante o adaptador de métricas personalizadas do Stackdriver para dar ao HPA acesso às métricas:
Salve o seguinte manifesto de amostra como
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
Aplique o manifesto de amostra ao cluster:
kubectl apply -f adapter_new_resource_model.yaml
Para conceder ao adaptador permissões de leitura de métricas do projeto, execute o seguinte 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
Substitua
PROJECT_ID
pelo ID do projeto Google Cloud .Para cada
InferencePool
, implante um HPA semelhante ao seguinte: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
Substitua:
INFERENCE_POOL_NAME
: o nome doInferencePool
.INFERENCE_POOL_NAMESPACE
: o namespace doInferencePool
.CLUSTER_NAME
: o nome do cluster.MIN_REPLICAS
: a disponibilidade mínima doInferencePool
(capacidade de valor de referência). O HPA mantém esse número de réplicas quando o uso está abaixo do limite de destino do HPA. As cargas de trabalho de alta disponibilidade precisam definir esse valor como maior que1
para garantir a disponibilidade contínua durante interrupções de pods.MAX_REPLICAS
: o valor que restringe o número de aceleradores que precisam ser atribuídos às cargas de trabalho hospedadas noInferencePool
. O HPA não vai aumentar o número de réplicas além desse valor. Durante os horários de pico de tráfego, monitore o número de réplicas para garantir que o valor do campoMAX_REPLICAS
ofereça espaço suficiente para que a carga de trabalho possa ser escalonada e manter as características de desempenho escolhidas.TARGET_VALUE
: o valor que representa oKV-Cache Utilization
de destino escolhido por servidor de modelo. Esse é um número entre 0 e 100 e depende muito do servidor, do modelo, do acelerador e das características do tráfego de entrada. É possível determinar esse valor de destino experimentalmente com testes de carga e criando um gráfico de capacidade de processamento versus latência. Selecione uma combinação de capacidade de transmissão e latência no gráfico e use o valorKV-Cache Utilization
correspondente como a meta do HPA. É preciso ajustar e monitorar esse valor de perto para alcançar os resultados de preço-performance escolhidos. Use o guia de início rápido da inferência do GKE para determinar esse valor automaticamente.
A seguir
- Saiba mais sobre o gateway de inferência do GKE.
- Implante o GKE Inference Gateway.
- Gerenciar operações de implantação do gateway de inferência do GKE.
- Veicular com o gateway de inferência do GKE.