Autoescalado vertical

El autoescalado vertical es una función que permite a Dataflow Prime escalar verticalmente de forma dinámica la memoria disponible para los trabajadores con el fin de ajustarse a los requisitos del trabajo. Esta función se ha diseñado para que los trabajos sean resistentes a los errores de falta de memoria (OOM) y para maximizar la eficiencia de la canalización. Dataflow Prime monitoriza tu canalización, detecta situaciones en las que los trabajadores no tienen suficiente memoria o tienen demasiada y, a continuación, sustituye a esos trabajadores por otros nuevos con más o menos memoria.

Importante: Como el escalado automático vertical sustituye los workers actuales por otros nuevos, te recomendamos que uses contenedores personalizados para mejorar la latencia que puede surgir al cambiar el tamaño de los workers.

Streaming

El autoescalado vertical está habilitado de forma predeterminada en todos los trabajos de streaming nuevos que usen Dataflow Prime.

Si vas a iniciar un trabajo desde una plantilla a través de la interfaz de línea de comandos, puedes inhabilitar el escalado automático vertical pasando la marca --additional_experiments=disable_vertical_memory_autoscaling.

Todas las canalizaciones de Java y Python de streaming de Dataflow Prime admiten el autoescalado vertical. Puedes usar flujos de procesamiento de Java de Dataflow Prime sin Streaming Engine. Sin embargo, para disfrutar de la mejor experiencia con el ajuste de escala automático vertical, te recomendamos que habilites Streaming Engine.

Lotes

En el caso de los trabajos por lotes de Dataflow Prime, el autoescalado vertical solo aumenta la escala después de que se produzcan cuatro errores de falta de memoria.

  • El autoescalado vertical aumenta la escala para evitar que se produzcan errores en los trabajos, pero no la reduce.
  • Todo el grupo se amplía durante el resto del trabajo.
  • Si se usan sugerencias de recursos y se crean varios grupos, cada grupo se amplía por separado.

En el caso de los trabajos por lotes, el autoescalado vertical no está habilitado de forma predeterminada. Para habilitar el escalado vertical automático en los trabajos por lotes, define las siguientes opciones de la canalización:

  • --experiments=enable_batch_vmr
  • --experiments=enable_vertical_memory_autoscaling

Para inhabilitar el autoescalado vertical en los trabajos por lotes, haga lo siguiente:

  • No definas la opción de flujo de procesamiento --experiments=enable_batch_vmr.
  • Define la opción de canalización --experiments=disable_vertical_memory_autoscaling.

Limitaciones

  • Solo la memoria de los trabajadores se escala verticalmente.
  • De forma predeterminada, el escalado de memoria tiene un límite superior de 16 GiB y un límite inferior de 6 GiB. Cuando usas GPUs, el escalado de memoria tiene un límite superior de 26 GiB y un límite inferior de 12 GiB. Puedes cambiar los límites superior e inferior proporcionando una sugerencia de recurso.
  • El escalado automático vertical no se admite en los grupos que usan GPUs A100.
  • En el caso de las tareas por lotes, es posible que se vuelva a intentar realizar los paquetes que incluyan un elemento que falle más de cuatro veces antes de que la canalización falle por completo.
  • El ajuste de escala automático vertical no es compatible con Controles de Servicio de VPC. Si habilitas Dataflow Prime e inicias una tarea nueva dentro de un perímetro de Controles de Servicio de VPC, la tarea usará Dataflow Prime sin escalado automático vertical.
  • Cuando usas el ajuste a la derecha con el autoescalado vertical, solo se admiten las canalizaciones por lotes.

Monitorizar el autoescalado vertical

Las operaciones de escalado automático vertical se publican en los registros de tareas y de trabajadores. Para ver estos registros, consulta Métricas de tareas de Dataflow.

Efecto en el autoescalado horizontal

En Dataflow Prime, el autoescalado vertical funciona junto con el autoescalado horizontal. Esta combinación permite que Dataflow Prime aumente o reduzca el número de trabajadores de forma fluida para adaptarse mejor a las necesidades de tu canalización y maximizar la utilización de la capacidad de computación.

Por diseño, el autoescalado vertical (que ajusta la memoria de los trabajadores) se produce con una frecuencia menor que el autoescalado horizontal (que ajusta el número de trabajadores). El autoescalado horizontal se desactiva durante un máximo de 10 minutos después de que el autoescalado vertical active una actualización. Si hay una acumulación significativa de datos de entrada después de esos 10 minutos, es probable que se produzca un escalado automático horizontal para eliminar esa acumulación. Para obtener información sobre el escalado automático horizontal de flujos de procesamiento de streaming, consulta Escalado automático de streaming.

Solución de problemas

En esta sección se proporcionan instrucciones para solucionar problemas habituales relacionados con el ajuste de escala automático vertical.

El autoescalado vertical no parece funcionar

Si el autoescalado vertical no funciona, comprueba los siguientes detalles del trabajo.

  • Busca el siguiente mensaje de trabajo para verificar que el autoescalado vertical está activo: Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.

    Si no aparece este mensaje, significa que el autoescalado vertical no está en funcionamiento.

  • En las canalizaciones de streaming, comprueba que la marca enable_vertical_memory_autoscaling esté definida. En las canalizaciones por lotes, comprueba que estén definidos los indicadores enable_vertical_memory_autoscaling y enable_batch_vmr.

  • Comprueba que has habilitado la API Cloud Autoscaling en tu Google Cloud proyecto. Habilitar la API

  • Verifica que tu trabajo esté ejecutando Dataflow Prime. Para obtener más información, consulta el artículo sobre cómo habilitar Dataflow Prime.

El trabajo observa un backlog alto y una marca de agua alta

Estas instrucciones solo se aplican a las tareas de transmisión. Si el cambio de forma vertical de los trabajadores tarda más de unos minutos, es posible que tu trabajo muestre un gran retraso de los datos de entrada y una marca de agua alta. Para solucionar este problema en las canalizaciones de Python, te recomendamos que uses contenedores personalizados, ya que pueden mejorar la latencia que podría surgir al cambiar la forma de los trabajadores. Para solucionar este problema en las canalizaciones de Java, le recomendamos que habilite Streaming Engine y Runner v2. Si el problema persiste después de habilitar estas funciones, ponte en contacto con el equipo de Atención al Cliente.

El autoescalado vertical ha alcanzado la capacidad de memoria.

De forma predeterminada, si no se proporcionan sugerencias de recursos, el autoescalado vertical no escala la memoria más allá de 16 GiB por trabajador (26 GiB cuando se usan GPUs) ni menos de 6 GiB por trabajador (12 GiB cuando se usan GPUs). Cuando se alcanzan estos límites, se genera uno de los siguientes mensajes de registro en Cloud Logging.

Tareas de streaming:

Vertical Autoscaling has a desire to upscale memory, but we have hit the memory scaling limit of X GiB. This is only a problem if the pipeline continues to see memory throttling and/or OOMs.

Tareas por lotes:

Vertical Autoscaling has a desire to upscale memory, but we have hit the memory scaling limit of 16.0 GiB. Job will fail because we have upsized to maximum size, and the pipeline is still OOMing.

Si tu canal sigue mostrando errores de falta de memoria, puedes usar el ajuste adecuado (sugerencias de recursos) para definir los requisitos de memoria de tu transformación especificando min_ram="numberXB". Este ajuste permite que Dataflow seleccione una configuración inicial para tus trabajadores que pueda admitir una capacidad de memoria mayor. Sin embargo, cambiar esta configuración inicial puede aumentar el paralelismo latente disponible para tu canalización. Si tienes una transformación que requiere mucha memoria, es posible que tu pipeline use más memoria que antes debido al aumento del paralelismo disponible. En estos casos, puede que sea necesario optimizar la transformación para reducir su huella de memoria.

El límite de memoria de los trabajadores no se estabiliza y sube y baja con el tiempo a pesar de que el uso de memoria es constante

Estas instrucciones solo se aplican a las tareas de transmisión. En el caso de las canalizaciones de Java, habilita Streaming Engine y Runner v2. Si el problema persiste o si observas este comportamiento en las canalizaciones de Python, ponte en contacto con el servicio de atención al cliente.

Mensajes de registro habituales

En esta sección se describen los mensajes de registro habituales que se generan cuando habilitas el escalado automático vertical.

El autoescalado vertical está habilitado. Esta canalización recibe recomendaciones sobre los recursos asignados por trabajador.

Este mensaje indica que el autoescalado vertical está activo. Si no aparece este mensaje, significa que el autoescalado vertical no está funcionando en el grupo de trabajadores.

Si el autoescalado vertical no está activo, consulta El autoescalado vertical no parece funcionar. ¿Qué debo comprobar? para ver instrucciones sobre cómo solucionar problemas.

Se ha activado una actualización del autoescalado vertical para cambiar el límite de memoria por trabajador del grupo de X GiB a Y GiB.

Este mensaje indica que el autoescalado vertical ha activado un cambio de tamaño de la memoria del grupo de trabajadores.