Ajuste adecuado

La función de ajuste adecuado usa las sugerencias de recursos de Apache Beam para personalizar los recursos de trabajador de una canalización. La capacidad de orientar los recursos a pasos de canalización específicos proporciona flexibilidad y capacidad adicionales de la canalización, y posibles ahorros de costos. Puedes aplicar recursos más costosos a los pasos de canalización que los requieran y recursos menos costosos a otros pasos de canalización. Usa el ajuste adecuado a fin de especificar requisitos de recursos para una canalización completa o para pasos de canalización específicos.

Asistencia y limitaciones

  • Las sugerencias de recursos son compatibles con los SDK de Java y Python de Apache Beam, versiones 2.31.0 y posteriores.
  • El ajuste adecuado es compatible con las canalizaciones por lotes. Las canalizaciones de transmisión no son compatibles.
  • El ajuste adecuado admite Dataflow Prime.
  • El ajuste adecuado no es compatible con FlexRS.
  • Cuando uses el ajuste adecuado, no uses la opción de servicio worker_accelerator.

Habilita el ajuste adecuado

Para activar el ajuste adecuado, usa una o más de las sugerencias de recursos disponibles en tu canalización. Cuando usas una sugerencia de recursos en tu canalización, el ajuste adecuado se habilita de forma automática. Para obtener más información, consulta la sección Usa sugerencias de recursos de este documento.

Sugerencias de recursos disponibles

Las siguientes sugerencias de recursos están disponibles.

Sugerencia de recursos Descripción
min_ram

La cantidad mínima de RAM en gigabytes para asignar a los trabajadores. Dataflow usa este valor como un límite inferior cuando se asigna memoria a trabajadores nuevos (escalamiento horizontal) o a trabajadores existentes (escalamiento vertical).

Por ejemplo:

min_ram=NUMBERGB
  • Reemplaza NUMBER por el valor mínimo de memoria del trabajador que requiere tu canalización o paso de canalización.
  • min_ram es una especificación agregada por trabajador. No es una especificación por CPU virtual. Por ejemplo, si configuras min_ram=15GB, Dataflow establece la memoria agregada disponible en todas las CPU virtuales del trabajador en al menos 15 GB.
accelerator

Una asignación de GPU proporcionada por el usuario que te permite controlar el uso y el costo de las GPU en tu canalización y sus pasos. Especifica el tipo y la cantidad de GPU que se adjuntarán a los trabajadores de Dataflow como parámetros para la marca.

Por ejemplo:

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • Reemplaza GPU_TYPE por el tipo de GPU que se usará. Para obtener una lista de los tipos de GPU compatibles con Dataflow, consulta Compatibilidad de Dataflow para GPU.
  • Reemplaza GPU_COUNT por la cantidad de GPU que se usará.
  • Opcional: Reemplaza MACHINE_TYPE por el tipo de máquina que se usará con las GPU.
    • El tipo de máquina debe ser compatible con el tipo de GPU seleccionado. Para obtener detalles sobre los tipos de GPU y sus tipos de máquinas compatibles, consulta Plataformas de GPU.
    • Si especificas un tipo de máquina en la sugerencia de recursos accelerator y en la opción de canalización del tipo de máquina de trabajador, la opción de canalización se ignora durante el ajuste adecuado.
  • Para usar GPU de NVIDIA con Dataflow, establece la opción de configuración install-nvidia-driver.

Para obtener más información sobre el uso de GPU, consulta GPU con Dataflow.

Anidación de sugerencias de recursos

Las sugerencias de recursos se aplican a la jerarquía de transformación de canalizaciones de la siguiente manera:

  • min_ram: El valor en una transformación se evalúa como el valor de sugerencia min_ram más grande entre los valores establecidos en la transformación y en todos sus elementos superiores en la jerarquía de la transformación.
    • Ejemplo: Si se configura una sugerencia de transformación interna min_ram a 16 GB, y la sugerencia de transformación externa en los conjuntos de jerarquía min_ram a 32 GB, se usa una sugerencia de 32 GB para todos los pasos de toda la transformación.
    • Ejemplo: Si se configura una sugerencia de transformación interna min_ram a 16 GB, y la sugerencia de transformación externa en los conjuntos de jerarquía min_ram a 8 GB, se usa una sugerencia de 8 GB para todos los pasos de la transformación externa que no están en la transformación interna y se usa una sugerencia de 16 GB para todos los pasos de la transformación interna.
  • accelerator: El valor más interno en la jerarquía de la transformación tiene prioridad.
    • Ejemplo: Si una sugerencia de transformación interna accelerator es distinta de una sugerencia accelerator de transformación externa en una jerarquía, la sugerencia accelerator de la transformación interna se usará para la transformación interna.

Las sugerencias configuradas para toda la canalización se tratan como si estuvieran configuradas en una transformación externa.

Usa sugerencias de recursos

Puedes establecer sugerencias de recursos en toda la canalización o en los pasos de canalización.

Sugerencias de recursos en la canalización

Puedes establecer sugerencias de recursos en toda la canalización cuando la ejecutas desde la línea de comandos.

Para configurar tu entorno de Python, consulta la Guía de inicio rápido de Python.

Ejemplo:

    python my_pipeline.py \
        --runner=DataflowRunner \
        --resource_hints=min_ram=numberGB \
        --resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
        ...

Sugerencias de recursos en pasos de canalización

Puedes establecer sugerencias de recursos en pasos de canalización (transformaciones) de manera programática.

Java

Si deseas instalar el SDK de Apache Beam para Java, consulta Instala el SDK de Apache Beam.

Puedes establecer sugerencias de recursos de manera programática en transformaciones de canalización mediante la clase ResourceHints.

En el siguiente ejemplo, se muestra cómo establecer sugerencias de recursos de manera programática en transformaciones de canalización.

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator(
    "type:nvidia-tesla-k80;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))

Para establecer sugerencias de recursos de manera programática en toda la canalización, usa la interfaz ResourceHintsOptions.

Python

Si deseas instalar el SDK de Apache Beam para Python, consulta Instala el SDK de Apache Beam.

Puedes establecer sugerencias de recursos de manera programática en transformaciones de canalización mediante la clase PTransforms.with_resource_hints. Para obtener más información, consulta la clase ResourceHint.

En el siguiente ejemplo, se muestra cómo establecer sugerencias de recursos de manera programática en transformaciones de canalización.

pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-k80;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")

Para establecer sugerencias de recursos en toda la canalización, usa la opción de canalización --resource_hints cuando ejecutes tu canalización. Para ver un ejemplo, consulta Sugerencias de recursos de canalización.

Go

Las sugerencias de recursos no son compatibles con Go.

Ajuste adecuado y fusión

En algunos casos, como parte del proceso de optimización de la fusión, se pueden ejecutar transformaciones configuradas con diferentes sugerencias de recursos en trabajadores que están en el mismo grupo. Cuando las transformaciones se fusionan, Dataflow las ejecuta en un entorno que satisface la unión de las sugerencias de recursos establecida en las transformaciones.

Cuando no se pueden combinar las sugerencias de recursos, no se produce la fusión. Por ejemplo, las sugerencias de recursos para diferentes GPU no se pueden combinar, por lo que no se combinan esas transformaciones.

Para evitar también la fusión, agrega una operación a la canalización que obligue a Dataflow a materializar una PCollection intermedia. Para obtener más información, consulta Evita la fusión.

Soluciona problemas de ajuste adecuado

En esta sección, se proporcionan instrucciones para solucionar problemas habituales relacionados con el ajuste adecuado.

La configuración no es válida

Cuando intentas usar el ajuste adecuado, se produce el siguiente error:

Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.

Este error se produce cuando el tipo de GPU seleccionado no es compatible con el tipo de máquina seleccionado. Para resolver este error, selecciona un tipo de GPU y un tipo de máquina compatibles. Para obtener detalles sobre la compatibilidad, consulta Plataformas de GPU.