Fermer

avril 27, 2020

Réglez les cadrans pour optimiser votre pipeline de machine learning Spark


Le réglage de Spark pour votre pipeline d'apprentissage machine peut être un processus complexe et long. Le stockage et le calcul jouent un rôle différent pour votre cluster Spark à différentes étapes de votre pipeline d'apprentissage machine. Les valeurs par défaut des étincelles ne sont jamais la bonne voie à suivre. Il est plus logique de savoir quels paramètres sont les plus efficaces aux différentes étapes de votre pipeline: fusion de données, formation et modélisation.

Comment démarrer

Identifiez le type de tâche que vous effectuez. Plus précisément, Spark va-t-il exécuter le travail sur le pilote ou sur l'exécuteur testamentaire? Les exécuteurs exécutent des transformations (map, filter, groupBy, sortBy, sample, randomSplit, union, distinct, coalesce, repartition) tandis que le pilote effectue des actions (réduire, collecter, compter, min, max, somme, moyenne, stddev, variance, saveAs) . Assurez-vous d'exécuter le plan d'explication à différentes étapes pour vérifier ce qui se passe réellement. Faites très attention à la taille des données qui sont déplacées à différentes étapes. Les paramètres dans Spark sont généralement calculés avec une formule lorsque vous n'utilisez pas les valeurs par défaut, vous devez donc avoir confiance en vos chiffres.

Data Munging

Le data munging semble enfreindre la plupart des règles. Le conseil standard est d'éviter les activités qui impliquent l'utilisation du pilote, mais c'est le cœur de la science des données. Plutôt que de dire à votre équipe d'éviter les agrégations, intégrez-la à votre pipeline. Nous précalculons les agrégations gourmandes en ressources et stockons les résultats sous forme de parquet dans la zone brute dans nos sections de fusion de données.

Le mélange est considéré comme mauvais car il implique des E / S disque, une sérialisation des données et des E / S réseau. Spark organisera les données à l'aide d'un ensemble de tâches de mappage et l'utilisation d'un ensemble de tâches de réduction pour agréger les données. Les résultats des tâches de carte individuelles sont conservés en mémoire jusqu'à ce qu'ils ne puissent pas tenir ou se renverser. Une fois en mémoire, ils sont triés en fonction de la partition cible et écrits dans un seul fichier, qui est ensuite lu par l'opérateur de réduction. L'astuce consiste à s'assurer que les données ne se déversent pas sur le disque. Spark divise les données en partitions où chaque partition est calculée par thread d'exécuteur.

 Data Intelligence - L'avenir des Big Data
L'avenir des Big Data

Avec quelques conseils, vous pouvez créer une plateforme de données qui convient aux besoins de votre organisation et qui tire le meilleur parti de votre capital de données.

Obtenez le guide

Identifiez la taille du cluster et la taille de vos données. Il est logique, à l'étape de la fusion des données, où le brassage est courant, de créer une stratégie de salage qui se traduit par des partitions qui s'adapteront à votre cluster en supposant une partition par thread exécuteur. Saler l'ensemble de données pour permettre un partitionnement prévisible est utile en règle générale; aucune raison de déterminer si les données seront biaisées sur la base d'une partition naturelle. Une fois que la taille des données est connue, définissez les paramètres de configuration Spark appropriés, comme spark.reducer.maxSizeInFlight et spark.reducer.maxReqsInFlight. Repartitionnez les données pour déplacer toutes les valeurs de la même clé dans la même partition sur un exécuteur avant une opération de mélange.

Il y a quelques considérations matérielles. Vous devez vraiment mettre / var / lib / spark sur un grand SSD indépendant et y mapper spark.local.dir. Il s'agit de l'emplacement de stockage temporaire utilisé par Spark pour les travaux de longue durée, et la plupart des travaux de transfert de données entrent dans cette catégorie. Une autre considération est que de plus gros serveurs, en particulier pour le pilote, sont en ordre.

Formation

Nous voulons laisser les données bien arrangées pour les prochaines étapes du pipeline de science des données, comme la formation. La formation est l'étape la plus intensive en stockage. Répartissez les données uniformément sur un cluster. Viser une stratégie de partitionnement et de regroupement qui permet d'effectuer le traitement dans Spark sur des mandrins de 128 Mo. Le partitionnement distribue les données horizontalement tandis que le regroupement décompose les données en morceaux plus faciles à gérer en fonction de la valeur hachée d'une colonne. Stockez la sortie sur un stockage moins cher. Espérons que nous ayons fait suffisamment de travail intensif en CPU pour intégrer les données. De plus, les serveurs plus petits sont meilleurs à ce stade où le parallélisme est essentiel.

Modélisation

Enfin, nous arrivons à l'étape du modèle. Ici, je dois vous laisser avec les outils que vous avez appris à utiliser lors des deux étapes précédentes. Honnêtement, les modèles sont trop différents pour donner des conseils généraux. L'apprentissage en profondeur aime les GPU, H2O.ai a généralement besoin de trois fois la quantité de stockage que j'alloue habituellement. Les forêts aléatoires semblent bien jouer dans le même cluster que nous avons mis en place pour la formation. Vous avez suffisamment appris en analysant les plans d'exécution et en regardant les rapports de gestion de la mémoire pour vous donner une idée de votre cluster. Utilisez d'abord un nombre limité d'algorithmes MLLib. En règle générale, vérifiez que le magasin alimente le calcul via une parallélisation appropriée avant de dépenser davantage pour le calcul.

Conclusion

Le traitement distribué est difficile. L'apprentissage automatique est difficile. L'apprentissage automatique distribué est assez difficile. Les scientifiques des données ont l'habitude de travailler sur une seule machine avec un petit ensemble de données. Assurez-vous qu'il y a le moins de ralentisseurs possible pendant la transition.

À propos de l'auteur <! -: dcallaghan, Architecte de solutions -> Le dimensionnement correct de votre cluster Spark pour répondre aux besoins différents de stockage et de calcul des différentes parties du pipeline d'apprentissage automatique est un bon début.

En tant qu'architecte de solutions chez Perficient, j'apporte vingt ans d'expérience en développement et je suis actuellement en contact avec Hadoop / Spark, la blockchain et le cloud, le codage en Java, Scala et Go. Je suis certifié et travaille beaucoup avec Hadoop, Cassandra, Spark, AWS, MongoDB et Pentaho. Plus récemment, j'ai apporté des solutions de blockchain intégrées (en particulier Hyperledger et Ethereum) et de Big Data au cloud en mettant l'accent sur l'intégration de produits de données modernes tels que HBase, Cassandra et Neo4J en tant que référentiel hors blockchain.

cet auteur




Source link