Optimizar y escalar el tiempo 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. Se abarcan los siguientes casos prácticos:

En los casos prácticos se muestra cómo usar los parámetros de implementación para resolver los cuellos de botella de rendimiento habituales, sobre todo en el caso de patrones de tráfico impredecibles y con picos en aplicaciones reales.

Problema de arranque en frío

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

Por ejemplo, si se envían 300 solicitudes simultáneas a un agente con el valor predeterminado de min_instances=1, se pueden obtener los siguientes resultados:

  • Arranque en frío (primera ejecución): latencia media de aproximadamente 4,7 segundos.

  • Arranque en templado (segunda ejecución inmediata): latencia media de aproximadamente 0,4 segundos.

El tiempo de latencia de más de cuatro segundos se debe casi por completo a que se inician nuevas instancias para gestionar la carga.

Prueba los siguientes métodos para mitigar el problema del arranque en frío:

  • Define un valor de min_instances que sea lo suficientemente alto como para gestionar tu tráfico base. Por ejemplo, si se asigna min_instances=10 al agente de ejemplo, se puede reducir la latencia media de un arranque en frío a aproximadamente 1,4 segundos. En el caso de las aplicaciones con picos de tráfico o con un tráfico elevado, asigna a min_instances un valor que pueda gestionar tu carga habitual sin tener que escalar desde 1. El valor máximo es 10.

  • Envía una carga estable, continua y predecible a Vertex AI Agent Engine Runtime mediante una cola. Por ejemplo, si ejecutas una prueba de carga sostenida de 1500 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 el valor predeterminado de concurrency (9), puedes obtener el siguiente resultado:

    • La latencia media es siempre baja, de aproximadamente 1,6 segundos.

Una carga estable y continua mantiene el servicio activo y da como resultado un rendimiento óptimo.

Trabajadores asíncronos infrautilizados

De forma predeterminada, container_concurrency está configurado para el código síncrono, donde cada instancia de Agent Engine gestiona solo una solicitud a la vez. Los agentes asíncronos, como los basados en el kit de desarrollo de agentes (ADK), pueden gestionar varias solicitudes vinculadas a operaciones de entrada/salida (como llamadas a LLMs o herramientas) simultáneamente.

Por ejemplo, si se envían 300 solicitudes simultáneas a un agente basado en ADK con min_instances=10 y el valor predeterminado de container_concurrency=9, se puede obtener el siguiente resultado:

  • Aunque la latencia media es de aproximadamente 4 segundos, la latencia máxima alcanza los 60 segundos. Esto indica que las solicitudes se ponen en cola en gran medida mientras el servicio se escala lentamente.

Para mitigar el problema de los trabajadores asíncronos infrautilizados, aumenta container_concurrency para permitir que cada instancia de Agent Engine gestione varias solicitudes. El número de solicitudes simultáneas que puede gestionar cada proceso de agente es container_concurrency / 9. El valor 9 representa el número de procesos de agente que se ejecutan en paralelo en cada contenedor.

Por ejemplo, si se envían 300 solicitudes simultáneas al mismo agente basado en ADK con min_instances=10 y container_concurrency=36, se puede obtener el siguiente resultado:

  • La latencia máxima se reduce de 60 segundos a unos 7 segundos. Esto demuestra que las instancias actuales pueden absorber el pico de tráfico de forma más eficaz.

En el caso de los agentes asíncronos (como los basados en ADK), asigna a container_concurrency un múltiplo de 9 (por ejemplo, 36) como punto de partida. De esta forma, se mejora la capacidad de respuesta ante picos de tráfico y se reduce la latencia de la ampliación.

Ten en cuenta que, si el valor de container_concurrency es demasiado alto, se pueden producir errores de falta de memoria.

Siguientes pasos