Mon code est largement inspiré de https://github.com /tensorflow/transform/blob/master/examples/census_example.py
J'ai un pipeline de faisceaux qui fonctionne sur des ensembles de données plus petits (<100Mo) mais le temps de traitement augmente considérablement à mesure que j'ajoute plus de données. Étant nouveau dans tf-transform et apache Beam, j'ai du mal à trouver les causes et les solutions au problème ... Et j'aimerais éviter d'utiliser google DataFlow.
Mon pipeline s'exécute localement en utilisant beam directRunner, si j'ai bien compris, mais il n'utilise qu'un seul noyau. L'utilisation de plusieurs cœurs pourrait être un moyen d'améliorer mon temps de prétraitement, mais je ne sais pas si cela est possible avec le faisceau directRunner. Existe-t-il un moyen d'exécuter un pipeline de transformation tensorflow sur plusieurs cœurs sur ma machine?
J'ai regardé dans les options du pipeline de faisceau et du directRunner, et je ne trouve aucune indication sur le fait de laisser un coureur accéder à plusieurs cœurs ou de créer plusieurs directRunners pour un pipeline.
Merci beaucoup pour toute aide que je pourrais obtenir!
3 Réponses :
Je ne pense pas que ce soit pris en charge. L'objectif principal de Direct Runner est de s'assurer que le pipeline implémente correctement le modèle Beam. Il n'est pas optimisé pour une utilisation en production et introduira probablement des inefficacités: https: // beam. apache.org/documentation/runners/direct/
Pour contourner ce problème, vous pouvez démarrer manuellement plusieurs pipelines d'exécution directe pour traiter différentes parties de données.
La meilleure option serait d'utiliser un exécuteur parallèle réel pour exécuter ces types de tâches, par exemple vous pouvez lancer un cluster Flink: https://beam.apache.org/documentation/runners / flink /
Pour ajouter au commentaire d'Anton, Vous pouvez utiliser Apache Flink pour exécuter le pipeline en parallèle. Plus de détails sont résumés dans Transformation Tensorflow sur poutres avec coureur flink a>
Vous devrez également définir le parallélisme en fonction du nombre total de cœurs et démarrer ces nombreux gestionnaires de tâches Flink. Ma recommandation serait de définir le parallélisme sur (nombre total de cœurs / 2)
@Ankur @Anton Merci pour vos réponses, je suis d'accord que cette approche n'est pas favorable à la production ... Nous allons essayer deux autres solutions: