Optimiza y escala el entorno de ejecución de Vertex AI Agent Engine

En esta página, se describen las prácticas recomendadas para optimizar y escalar el rendimiento de Vertex AI Agent Engine Runtime, que abarcan las siguientes situaciones:

Las situaciones muestran cómo usar los parámetros de implementación para resolver cuellos de botella comunes en el rendimiento , en especial para patrones de tráfico impredecibles y con picos en aplicaciones del mundo real.

Problema de inicio en frío

Un inicio en frío ocurre cuando llega una solicitud y no hay instancias o contenedores inactivos para atenderla, lo que obliga a Vertex AI Agent Engine a iniciar uno nuevo. Esto agrega una latencia significativa a la solicitud.

Por ejemplo, enviar 300 solicitudes simultáneas a un agente con el valor predeterminado min_instances=1 puede mostrar los siguientes resultados:

  • Inicio en frío (primera ejecución): Latencia promedio de aproximadamente 4.7 segundos.

  • Inicio semicaliente (segunda ejecución inmediata): Latencia promedio de aproximadamente 0.4 segundos.

La sobrecarga de más de cuatro segundos se debe casi por completo a que las instancias nuevas se inician para controlar la carga.

Prueba los siguientes métodos para mitigar el problema de inicio en frío:

  • Establece un valor min_instances que sea lo suficientemente alto para controlar tu tráfico de referencia. Por ejemplo, establecer min_instances=10 en el agente de ejemplo puede reducir la latencia promedio de un inicio en frío a aproximadamente 1.4 segundos. Para las aplicaciones con tráfico alto o con picos, establece min_instances en un valor que pueda controlar tu carga típica sin necesidad de escalar desde 1. El valor máximo es 75.

  • Envía una carga estable, continua y predecible a Vertex AI Agent Engine Runtime con una cola. Por ejemplo, ejecutar una prueba de carga sostenida de 1,500 consultas por minuto (25 consultas por segundo) durante 60 segundos en un agente basado en el Kit de desarrollo de agentes (ADK) con min_instances=10 y la concurrency predeterminada (9) puede producir el siguiente resultado:

    • La latencia promedio es constantemente baja, de aproximadamente 1.6 segundos.

Una carga estable y continua mantiene el servicio semicaliente y genera un rendimiento óptimo.

Trabajadores asíncronos subutilizados

De forma predeterminada, container_concurrency se configura para el código síncrono, en el que cada instancia de Agent Engine controla solo una solicitud a la vez. Los agentes asíncronos, como los basados en el Kit de desarrollo de agentes (ADK), pueden controlar varias solicitudes vinculadas a E/S (como llamadas a LLM o herramientas) de forma simultánea.

Por ejemplo, enviar 300 solicitudes simultáneas a un agente basado en ADK con min_instances=10 y el valor predeterminado container_concurrency=9 puede producir el siguiente resultado:

  • Si bien la latencia mediana es de aproximadamente 4 segundos, la latencia máxima aumenta a 60 segundos. Esto indica que las solicitudes se ponen en cola en gran medida mientras el servicio se escala lentamente.

Para mitigar los trabajadores asíncronos subutilizados, aumenta container_concurrency para permitir que cada instancia de Agent Engine controle varias solicitudes. La cantidad de solicitudes simultáneas que puede controlar cada proceso del agente es container_concurrency / 9. El valor 9 representa la cantidad de procesos del agente que se ejecutan en paralelo dentro de cada contenedor.

Por ejemplo, enviar 300 solicitudes simultáneas al mismo agente basado en ADK con min_instances=10 y container_concurrency=36 puede producir el siguiente resultado:

  • La latencia máxima disminuye de 60 segundos a aproximadamente 7 segundos. Esto demuestra que las instancias existentes pueden absorber el aumento en el tráfico de manera más eficaz.

Para los agentes asíncronos (como los agentes basados en ADK), establece container_concurrency en un múltiplo de 9 (por ejemplo, 36) como punto de partida. Esto mejora la capacidad de respuesta a los picos de tráfico y reduce la latencia de la escalabilidad.

Ten en cuenta que establecer un valor demasiado alto para container_concurrency puede generar errores de falta de memoria (OOM).

¿Qué sigue?