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.
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
Usa la función
MLTransform
para preparar tus datos para entrenar modelos de aprendizaje automático. Para obtener más información, consulta Preprocesar datos conMLTransform
.Usa Dataflow con frameworks de operaciones de aprendizaje automático, como Kubeflow Pipelines (KFP) o TensorFlow Extended (TFX). Para obtener más información, consulta Dataflow ML en flujos de trabajo de aprendizaje automático.
Flujos de procesamiento de predicción e inferencia
Dataflow ML combina la potencia de Dataflow con la RunInference
API 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 Si estás creando un controlador de modelo personalizado, en lugar de usar el parámetro |
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 Si vas a crear un controlador de modelo personalizado, anula el parámetro |
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
- Consulta los cuadernos de Dataflow ML en GitHub.
- Consulta información detallada sobre cómo usar el aprendizaje automático con Apache Beam en la documentación de flujos de procesamiento de IA y aprendizaje automático de Apache Beam.
- Más información sobre la API
RunInference
- Consulta las métricas que puedes usar para monitorizar tu transformación
RunInference
.