El ajuste de escala automático vertical es una función que permite a Dataflow Prime escalar o reducir la escala verticalmente de forma dinámica de la memoria disponible para los trabajadores a fin de que se ajuste a los requisitos del trabajo. La función está diseñada para hacer que los trabajos sean resistentes a errores de memoria insuficiente (OOM) y maximizar la eficiencia de la canalización. Dataflow Prime supervisa tu canalización, detecta situaciones en las que los trabajadores carecen de memoria o la superan, y luego los reemplaza por trabajadores nuevos con más o menos memoria.
Importante: Debido a que el ajuste de escala automático vertical reemplaza a los trabajadores existentes por trabajadores nuevos, te recomendamos usar contenedores personalizados para mejorar la latencia que podría surgir por el cambio de tamaño de los trabajadores.
Transmisión
El ajuste de escala automático vertical está habilitado de forma predeterminada para todos los trabajos de transmisión nuevos que usan Dataflow Prime.
Si inicias un trabajo desde una plantilla a través de la interfaz de línea de comandos, puedes inhabilitar el ajuste de escala automático vertical si pasas la marca --additional_experiments=disable_vertical_memory_autoscaling
.
Todas las canalizaciones de transmisión de Java y Python de Dataflow admiten el ajuste de escala automático vertical. Puedes usar las canalizaciones de Java de Dataflow Prime sin Streaming Engine. Sin embargo, para obtener la mejor experiencia con el ajuste de escala automático vertical, se recomienda habilitar Streaming Engine.
Por lotes
En los trabajos por lotes de Dataflow Prime, el ajuste de escala automático vertical solo escala verticalmente después de que se producen cuatro errores de memoria insuficiente.
- El ajuste de escala automático vertical escala verticalmente para evitar fallas en el trabajo y no reduce la escala.
- Todo el grupo escala verticalmente para el resto del trabajo.
- Si se usan sugerencias de recursos y se crean varios grupos, cada grupo escala verticalmente por separado.
En los trabajos por lotes, el ajuste de escala automático vertical no está habilitado de forma predeterminada. A fin de habilitar el ajuste de escala automático vertical para trabajos por lotes, configura las siguientes opciones de canalización:
--experiments=enable_batch_vmr
--experiments=enable_vertical_memory_autoscaling
A fin de inhabilitar el ajuste de escala automático vertical para trabajos por lotes, realiza una de las siguientes acciones:
- No establezcas la opción de canalización
--experiments=enable_batch_vmr
. - Establece la opción de canalización
--experiments=disable_vertical_memory_autoscaling
.
Limitaciones
- Solo la memoria de los trabajadores escala verticalmente.
- De forma predeterminada, el escalamiento de memoria tiene un límite superior de 16 GiB (26 GiB cuando se usan GPU) y un límite inferior de 6 GiB (12 GiB cuando se usan GPU). Proporcionar una sugerencia de recursos puede cambiar los límites superior e inferior.
- El ajuste de escala automático vertical no es compatible con los grupos que usan GPU A100.
- En los trabajos por lotes, los paquetes que incluyen un elemento con errores pueden reintentarse más de 4 veces antes de que la canalización falle por completo.
- El ajuste de escala automático vertical no es compatible con los Controles del servicio de VPC. Si habilitas Dataflow Prime y, luego, inicias un trabajo nuevo dentro de un perímetro de Controles del servicio de VPC, el trabajo usa Dataflow Prime sin ajuste de escala automático vertical.
Supervisa el ajuste de escala automático vertical
Las operaciones de ajuste de escala automático vertical se publican en los registros de trabajos y de trabajadores. Para ver estos registros, consulta Métricas de trabajos de Dataflow.
Efecto en el ajuste de escala automático horizontal
En Dataflow Prime, el ajuste de escala automático vertical funciona junto con el ajuste de escala automático horizontal. Esta combinación permite que Dataflow Prime aumente o reduzca la escala verticalmente de los trabajadores sin problemas para que se adapte mejor a las necesidades de tu canalización y maximice el uso de la capacidad de procesamiento.
Por su diseño, el ajuste de escala automático vertical (que ajusta la memoria de los trabajadores) se produce con una frecuencia menor que el ajuste de escala automático horizontal (que ajusta la cantidad de trabajadores). El ajuste de escala automático horizontal se desactiva durante los 10 minutos posteriores a la activación de una actualización por parte del ajuste de escala automático vertical. Si hay una gran cantidad de tareas pendientes de datos de entrada después de esta marca de 10 minutos, es probable que el ajuste de escala automático horizontal borre esas tareas pendientes. Si deseas obtener información sobre el ajuste de escala automático horizontal para canalizaciones de transmisión, consulta Ajuste de escala automático de transmisión.
Soluciona problemas
En esta sección, se proporcionan instrucciones para solucionar problemas comunes relacionados con el ajuste de escala automático vertical.
El ajuste de escala automático vertical no funciona
Si el ajuste de escala automático vertical no funciona, verifica los siguientes detalles del trabajo.
Busca el siguiente mensaje de trabajo para verificar que el ajuste de escala automático vertical esté activo:
Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.
La ausencia de este mensaje indica que el ajuste de escala automático vertical no está en ejecución.
Para las canalizaciones de transmisión, verifica que la marca
enable_vertical_memory_autoscaling
esté configurada. Para las canalizaciones por lotes, verifica que las marcasenable_vertical_memory_autoscaling
yenable_batch_vmr
estén configuradas.Verifica que hayas habilitado la API de ajuste de escala automático de Cloud para tu proyecto de Google Cloud. Habilitar la API
Verifica que el trabajo esté ejecutando Dataflow Prime. Para obtener más información, consulta Habilita Dataflow Prime.
El trabajo observa una gran cantidad de tareas pendientes y una marca de agua alta
Estas instrucciones solo se aplican a los trabajos de transmisión. Si la modificación vertical de los trabajadores tarda más de unos minutos, es posible que el trabajo tenga una gran cantidad de tareas pendientes de datos de entrada y una marca de agua alta. Para abordar este problema en las canalizaciones de Python, te recomendamos que uses contenedores personalizados, ya que pueden mejorar la latencia que podría surgir a partir de la modificación de los trabajadores. Para solucionar este problema en las canalizaciones de Java, te recomendamos que habilites Streaming Engine y Runner v2. Si el problema persiste después de habilitar estas funciones, comunícate con Atención al cliente.
El ajuste de escala automático vertical alcanzó la capacidad de memoria.
De forma predeterminada, si no se proporcionan sugerencias de recursos, el ajuste de escala automático vertical no escala la memoria a más de 16 GiB por trabajador (26 GiB cuando se usan GPU) ni a menos de 6 GiB por trabajador (12 GiB cuando se usan GPU). Cuando se alcanzan estos límites, se genera uno de los siguientes mensajes de registro en Cloud Logging.
Trabajos de transmisión:
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.
Trabajos 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 canalización continúa viendo errores de memoria insuficiente, puedes usar Sugerencias de recursos para definir los requisitos de memoria de tu transformación mediante la especificación de min_ram="numberXB"
. Esta configuración permite que Dataflow seleccione una configuración inicial para los trabajadores que puede admitir una mayor capacidad de memoria. Sin embargo, cambiar esta configuración inicial puede aumentar el paralelismo latente disponible para tu canalización. Si tienes una transformación con falta de memoria, esto podría hacer que la canalización use más memoria que antes debido al aumento del paralelismo disponible. En esos casos, podría ser necesario optimizar la transformación para reducir su espacio en memoria.
Nota: El ajuste de escala automático vertical no evita que los errores de OOM aparezcan en los registros del trabajador. Si se produce un error OOM, será visible en los registros del trabajador, ya que el ajuste de escala automático vertical encuentra los eventos del OOM y hace un seguimiento de ellos.
El límite de memoria de los trabajadores no se estabiliza y aumenta y disminuye con el tiempo, a pesar del uso constante de memoria
Estas instrucciones solo se aplican a los trabajos de transmisión. Para las canalizaciones de Java, habilita Streaming Engine y Runner v2. Si el problema persiste o si observas este comportamiento en las canalizaciones de Python, comunícate con Atención al cliente.
Mensajes de registro comunes
En esta sección, se describen los mensajes de registro comunes que se generan cuando habilitas el ajuste de escala automático vertical.
El ajuste de escala automático vertical está habilitado. Esta canalización recibe recomendaciones de recursos asignados por trabajador.
Este mensaje indica que el ajuste de escala automático vertical está activo. La ausencia de este mensaje indica que el ajuste de escala automático vertical no opera en el grupo de trabajadores.
Si el ajuste de escala automático vertical no está activo, consulta El ajuste de escala automático vertical no funciona. ¿Qué debo revisar? para obtener instrucciones sobre cómo solucionar problemas.
Se activó la actualización del ajuste de escala automático vertical para cambiar el límite de memoria por trabajador para el grupo de X GiB a Y GiB.
Este mensaje indica que el ajuste de escala automático vertical activó un cambio de tamaño de la memoria del grupo de trabajadores.