À propos de Dataflow ML

Vous pouvez utiliser les fonctionnalités de traitement des données à échelle de Dataflow ML pour les pipelines de prédiction et d'inférence et pour la préparation des données pour l'entraînement.

Schéma du workflow Dataflow ML

Figure 1. Workflow complet de Dataflow ML.

Conditions requises et limites

  • Dataflow ML est compatible avec les pipelines de traitement par lot et par flux.
  • L'API RunInference est compatible avec Apache Beam 2.40.0 et versions ultérieures.
  • L'API MLTransform est compatible avec Apache Beam 2.53.0 et versions ultérieures.
  • Les gestionnaires de modèles sont disponibles pour PyTorch, scikit-learn, TensorFlow, ONNX et TensorRT. Pour les frameworks non compatibles, vous pouvez utiliser un gestionnaire de modèles personnalisés.

Préparation des données pour l'entraînement

Pipelines de prédiction et d'inférence

Dataflow ML combine la puissance de Dataflow avec l'API RunInference d'Apache Beam. L'API RunInference vous permet de définir les caractéristiques et les propriétés du modèle et de transmettre cette configuration à la transformation RunInference. Cette fonctionnalité permet aux utilisateurs d'exécuter le modèle dans leurs pipelines Dataflow sans avoir à connaître les détails de mise en œuvre du modèle. Vous pouvez choisir le framework qui convient le mieux à vos données, tel que TensorFlow et PyTorch.

Exécuter plusieurs modèles dans un pipeline

Utilisez la transformation RunInference pour ajouter plusieurs modèles d'inférence à votre pipeline Dataflow. Pour en savoir plus, y compris sur le code, consultez la page Pipelines multi-modèles dans la documentation Apache Beam.

Créer un pipeline multilingue

Pour utiliser RunInference avec un pipeline Java, créez une transformation Python multilingue. Le pipeline appelle la transformation, qui effectue les opérations de prétraitement, de post-traitement et d'inférence.

Pour obtenir des instructions détaillées et un exemple de pipeline, consultez la page Utiliser RunInference à partir du SDK Java.

Utiliser des GPU avec Dataflow

Pour les pipelines par lot ou par flux qui nécessitent l'utilisation d'accélérateurs, vous pouvez exécuter des pipelines Dataflow sur des appareils GPU NVIDIA. Pour en savoir plus, consultez la page Exécuter un pipeline Dataflow avec des GPU.

Résoudre les problèmes liés à Dataflow ML

Cette section fournit des stratégies de dépannage et des liens qui peuvent vous être utiles lors de l'utilisation de Dataflow ML.

La pile s'attend à ce que chaque Tensor ait la même taille

Si vous fournissez des images de différentes tailles ou des embeddings lexicaux de différentes longueurs lorsque vous utilisez l'API RunInference, l'erreur suivante peut se produire :

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)']

Cette erreur se produit car l'API RunInference ne peut pas regrouper les éléments de Tensor de tailles différentes. Pour contourner les problèmes, consultez la section Impossible de regrouper les éléments de Tensor dans la documentation Apache Beam.

Éviter les erreurs de mémoire insuffisante avec de grands modèles

Lorsque vous chargez un modèle de ML de taille moyenne ou grande, votre machine risque de manquer de mémoire. Dataflow fournit des outils pour éviter les erreurs de mémoire saturée (OOM) lors du chargement de modèles de ML. Utilisez le tableau suivant pour déterminer l'approche appropriée à votre scénario.

Scénario Solution
Les modèles sont suffisamment petits pour tenir en mémoire. Utilisez la transformation RunInference sans configuration supplémentaire. La transformation RunInference partage les modèles entre les threads. Si vous pouvez placer un modèle par cœur de processeur sur votre machine, votre pipeline peut utiliser la configuration par défaut.
Plusieurs modèles entraînés différemment effectuent la même tâche. Utilisez des clés par modèle. Pour en savoir plus, consultez la section Exécuter l'inférence ML avec plusieurs modèles entraînés différemment.
Un seul modèle est chargé dans la mémoire, et tous les processus le partagent.

Utilisez le paramètre large_model. Pour en savoir plus, consultez la section Exécuter l'inférence ML avec plusieurs modèles entraînés différemment.

Si vous créez un gestionnaire de modèle personnalisé, remplacez le paramètre share_model_across_processes au lieu d'utiliser le paramètre large_model.

Vous devez configurer le nombre exact de modèles chargés sur votre machine.

Pour contrôler exactement le nombre de modèles chargés, utilisez le paramètre model_copies.

Si vous créez un gestionnaire de modèles personnalisé, remplacez le paramètre model_copies.

Pour en savoir plus sur la gestion de la mémoire avec Dataflow, consultez la section Résoudre les erreurs Dataflow de mémoire insuffisante.

Étape suivante