Acerca de Dataflow ML

Puedes usar las funciones de procesamiento de datos a gran escala de Dataflow ML para pipelines de predicción e inferencia y para preparar datos para el entrenamiento.

Diagrama del flujo de trabajo de Dataflow ML.

Imagen 1. Flujo de trabajo completo de Dataflow ML.

Requisitos y limitaciones

  • Dataflow ML admite flujos de procesamiento por lotes y de streaming.
  • La API RunInference es compatible con Apache Beam 2.40.0 y versiones posteriores.
  • La API MLTransform es compatible con Apache Beam 2.53.0 y versiones posteriores.
  • Hay controladores de modelos disponibles para PyTorch, scikit-learn, TensorFlow, ONNX y TensorRT. En el caso de los frameworks no compatibles, puedes usar un controlador de modelo personalizado.

Preparación de los datos para el entrenamiento

Flujos de procesamiento de predicción e inferencia

Dataflow ML combina la potencia de Dataflow con la RunInferenceAPI de Apache Beam. Con la API RunInference, defines las características y las propiedades del modelo, y transfieres esa configuración a la transformación RunInference. Esta función permite a los usuarios ejecutar el modelo en sus pipelines de Dataflow sin necesidad de conocer los detalles de implementación del modelo. Puedes elegir el framework que mejor se adapte a tus datos, como TensorFlow y PyTorch.

Ejecutar varios modelos en una canalización

Usa la transformación RunInference para añadir varios modelos de inferencia a tu flujo de procesamiento de Dataflow. Para obtener más información, incluidos los detalles del código, consulta Flujos de procesamiento de varios modelos en la documentación de Apache Beam.

Crear un flujo de procesamiento multilingüe

Para usar RunInference con una canalización de Java, crea una transformación de Python entre lenguajes. La canalización llama a la transformación, que realiza el preprocesamiento, el posprocesamiento y la inferencia.

Para obtener instrucciones detalladas y un flujo de procesamiento de ejemplo, consulta Usar RunInference desde el SDK de Java.

Usar GPUs con Dataflow

En el caso de las canalizaciones por lotes o de streaming que requieran el uso de aceleradores, puedes ejecutar canalizaciones de Dataflow en dispositivos con GPU NVIDIA. Para obtener más información, consulta el artículo sobre cómo ejecutar una canalización de Dataflow con GPUs.

Solucionar problemas de Dataflow ML

En esta sección se ofrecen estrategias y enlaces para solucionar problemas que pueden ser útiles al usar Dataflow ML.

Stack espera que cada tensor tenga el mismo tamaño

Si proporcionas imágenes de diferentes tamaños o representaciones de palabras de diferentes longitudes al usar la API RunInference, puede producirse el siguiente error:

File "/beam/sdks/python/apache_beam/ml/inference/pytorch_inference.py", line 232, in run_inference batched_tensors = torch.stack(key_to_tensor_list[key]) RuntimeError: stack expects each tensor to be equal size, but got [12] at entry 0 and [10] at entry 1 [while running 'PyTorchRunInference/ParDo(_RunInferenceDoFn)']

Este error se produce porque la API RunInference no puede agrupar elementos de tensor de diferentes tamaños. Para ver soluciones alternativas, consulta Unable to batch tensor elements (No se pueden agrupar elementos de tensor) en la documentación de Apache Beam.

Evitar errores de falta de memoria con modelos grandes

Cuando cargas un modelo de aprendizaje automático mediano o grande, es posible que tu máquina se quede sin memoria. Dataflow proporciona herramientas para evitar errores de falta de memoria (OOM) al cargar modelos de aprendizaje automático. Usa la siguiente tabla para determinar el enfoque adecuado para tu situación.

Situación Solución
Los modelos son lo suficientemente pequeños como para caber en la memoria. Usa la transformación RunInference sin ninguna configuración adicional. La transformación RunInference comparte los modelos entre los hilos. Si puedes ajustar un modelo por núcleo de CPU en tu máquina, tu canal puede usar la configuración predeterminada.
Varios modelos entrenados de forma diferente realizan la misma tarea. Usa claves por modelo. Para obtener más información, consulta Ejecutar inferencias de aprendizaje automático con varios modelos entrenados de forma diferente.
Un modelo se carga en la memoria y todos los procesos comparten este modelo.

Usa el parámetro large_model. Para obtener más información, consulta Ejecutar inferencias de aprendizaje automático con varios modelos entrenados de forma diferente.

Si estás creando un controlador de modelo personalizado, en lugar de usar el parámetro large_model, anula el parámetro share_model_across_processes.

Debes configurar el número exacto de modelos cargados en tu máquina.

Para controlar exactamente cuántos modelos se cargan, usa el parámetro model_copies.

Si vas a crear un controlador de modelo personalizado, anula el parámetro model_copies.

Para obtener más información sobre la gestión de la memoria con Dataflow, consulta el artículo Solucionar errores de falta de memoria de Dataflow.

Siguientes pasos