The playground

More information here

Fyrd

What is Fyrd?Un Exemple rapideSuivi des dépendancesArguments et profils de mots clésInstallationDocumentationProblèmes et contributionPourquoi ce nom? What is Fyrd? Fyrd is a library for Python 2.7+/3.3+ that allows easy multiprocessing-style parallelization using a batch system back end. À l’heure actuelle, il prend en charge torque et slurm, avec une solution de secours locale basée sur […]

Fyrd Buildkite build state for version masterFyrd Travis CI tests for the master versionCodacy Project GradeFyrd master ManualPyPI versionimageFyrd Version master Requirements Status

What is Fyrd?

Fyrd is a library for Python 2.7+/3.3+ that allows easy multiprocessing-style parallelization using a batch system back end. À l’heure actuelle, il prend en charge torque et slurm, avec une solution de secours locale basée sur le multitraitement. Parce qu’il est écrit de manière modulaire, cependant, tout système de lot peut être ajouté. Pour demander l’ajout de votre système de lot, veuillez envoyer un e-mail ou soumettre un problème sur la page github.

Le mode de secours local est un clone de gestion de tâches de type couple/slurm miniature. Il démarre un serveur sur votre machine et ce serveur acceptera et exécutera les tâches de la même manière que torque ou slurm. Il permet au suivi des dépendances de fonctionner, mais n’implémente pas de partitions ni ne permet la visualisation des travaux d’autres utilisateurs. Notez que le mode local de fyrd n’est pas un substitut fantastique au multitraitement, car il utilise un modèle de soumission de fichier inutile pour les tâches locales, cela signifie qu’il y a une légère surcharge (environ 0,5 seconde) pour chaque tâche soumise.

Un Exemple rapide

Disons que vous avez un morceau de code que vous avez obtenu de quelque part, appelons-le really_slow_algorithm, et vous voulez l’exécuter sur 200 fichiers, puis travailler puis examiner les résultats de STDOUT, mais vous devez d’abord analyser les résultats pour obtenir uniquement les deux premières colonnes. Voici comment vous feriez cela :

import osimport mathimport fyrdSCRIPT = """really_slow_algorithm {} | awk '{print $1, "\\t", $2}'"""# This is the same as running fyrd.Job(filter_results, (x,), profile='small', time='00:01:00').submit()# It is best used when dependency tracking is not needed and every function submission requires# the same [email protected](profile='small', time='00:01:00')def filter_results(x): """If first column contains 'tomato', return the log of the second column.""" output = for i in x.split('\n'): name, data = i.split('\t') if 'tomato' in name: output.append(math.log10(int(data))) return outputscript_jobs = for i in os.listdir('input_files'): script_jobs.append(fyrd.Job(SCRIPT.format(i), cores=1, mem='10GB', time='48:00:00').submit())# Wait for jobs to completefyrd.wait(script_jobs) func_jobs = for result in script_job: func_jobs.append(filter_results(result.stdout))filtered = fyrd.basic.get(func_jobs)

Suivi des dépendances

Fyrd implémente un système de suivi des dépendances simple. La plupart des systèmes par lots permettent le suivi des dépendances, mais ils nécessitent une syntaxe quelque peu complexe et une connaissance préalable de l’ID de travail, ce que vous n’avez pas lorsque vous construisez un pipeline. Fyrd permet donc le suivi des dépendances à l’aide d’objets de travail, ainsi que par des ID de travail, s’il vous arrive de les avoir:

job = fyrd.Job('really_slow_algorithm big_file').submit()job.wait()if job.completed: job2 = fyrd.Job(completed_function)elif job.failed: job2 = fyrd.Job(failed_function)job3 = fyrd.Job(wrapup_function, depends=job2)for job in : job.submit()result = job3.get()

Arguments et profils de mots clés

Les systèmes par lots ont de nombreuses options de soumission possibles, pour permettre à ces options de fonctionner de la même manière quelle que soit la syntaxe du cluster, elles sont toutes implémentées comme arguments de mots clés pour la classe fyrd.job.Job. Une liste complète est disponible dans la documentation.

Parce qu’il peut y avoir beaucoup d’arguments possibles pour le système batch, et parce que la plupart des tâches utilisent les mêmes quelques arguments, Fyrd dispose également d’un système de profils, qui permet de regrouper les arguments communs. Ce système implémente un profil DEFAULT, qui permet la soumission de travaux sans aucun argument :

fyrd.Job(my_function).submit().get()fyrd.Job(long_function, profile='long').submit().get()

Installation

pip install fyrd

Pour obtenir une version spécifique :

pip install https://github.com/MikeDacre/fyrd/archive/0.6.2b1.tar.gz --userfyrd conf init

Pour obtenir la dernière version stable :

pip install https://github.com/MikeDacre/fyrd/tarball/master --userfyrd conf init

Pour obtenir la dernière version de développement (toujours assez stable ):

pip install https://github.com/MikeDacre/fyrd/tarball/dev --userfyrd conf init

La commande fyrd conf init initialise votre environnement de manière interactive en posant des questions sur le système de cluster local.

Documentation

Fyrd a une documentation très complète sur la lecture des documents, vous devriez certainement la lire. Un bon point de départ est la documentation de démarrage.

Problèmes et contribution

Si vous rencontrez des problèmes avec ce logiciel, ajoutez un problème sur la page problèmes

Je cherche toujours de l’aide pour tester le logiciel et implémenter de nouveaux arguments de mots clés. Je voudrais également ajouter de nouveaux environnements de système par lots, mais j’ai besoin d’accéder à ces clusters afin de tester les nouveaux arguments de mots clés et d’implémenter l’analyse de file d’attente. Si vous souhaitez m’aider ou me donner accès à votre cluster (pour le développement de ce package uniquement), veuillez m’envoyer un e-mail

Pourquoi ce nom?

J’ai donné à ce projet le nom de « Fyrd » en l’honneur de ma grand-mère, Hélène Sandolphen, qui était une érudite du vieil anglais. C’est le vieux mot anglo-saxon pour « armée », en particulier une armée d’hommes libres, et ce code vous donne une armée de travailleurs sur n’importe quelle machine ou cluster, cela semblait donc approprié. Le logo est un bouclier anglo-saxon du genre utilisé par les Fyrds, avec un graphique d’une grappe superposée sur le dessus.

Le projet s’appelait auparavant « Cluster Python », ce qui est plus descriptif mais franchement ennuyeux. De plus, environ une demi-douzaine d’autres projets ont presque le même nom, il n’avait donc aucun sens de garder ce nom et de mettre le projet sur PyPI.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.