The playground

More information here

Fyrd

What is Fyrd?Ein kurzes BeispielAbhängigkeitsverfolgungSchlüsselwortargumente und ProfileInstallationDokumentationProbleme und AntwortenWarum der Name? 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. Im Moment unterstützt es Torque und Slurm mit einem lokalen, multiprozessbasierten Fallback. Da es modular geschrieben ist, kann jedoch jedes Batch-System hinzugefügt werden. […]

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. Im Moment unterstützt es Torque und Slurm mit einem lokalen, multiprozessbasierten Fallback. Da es modular geschrieben ist, kann jedoch jedes Batch-System hinzugefügt werden. Um das Hinzufügen Ihres Batch-Systems anzufordern, senden Sie bitte eine E-Mail oder senden Sie ein Problem auf der Github-Seite.

Der lokale Fallback-Modus ist ein Miniatur-Torque/Slurm-Job-Management-Klon. Es startet einen Server auf Ihrem Computer und dieser Server akzeptiert und führt Jobs auf die gleiche Weise aus wie Torque oder slurm. Es ermöglicht die Abhängigkeitsverfolgung, implementiert jedoch keine Partitionen oder ermöglicht die Anzeige von Jobs anderer Benutzer. Beachten Sie, dass der lokale Modus von fyrd kein fantastischer Ersatz für Multiprocessing ist, da er ein Dateiübermittlungsmodell verwendet, das für lokale Jobs nicht erforderlich ist.

Ein kurzes Beispiel

Angenommen, Sie haben einen Code, den Sie von irgendwoher erhalten haben, nennen wir ihn really_slow_algorithm , und Sie möchten ihn auf 200 Dateien ausführen und dann an den Ergebnissen von STDOUT , aber Sie müssen die Ergebnisse zuerst analysieren, um nur die ersten beiden Spalten zu erhalten. So würden Sie das tun:

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]rd.jobify(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)

Abhängigkeitsverfolgung

Fyrd implementiert ein einfaches Abhängigkeitsverfolgungssystem. Die meisten Batch-Systeme ermöglichen Abhängigkeitsverfolgung, erfordern jedoch eine etwas komplexe Syntax und Vorkenntnisse der Job-ID, was Sie beim Erstellen einer Pipeline nicht haben. Fyrd ermöglicht daher die Verfolgung von Abhängigkeiten mithilfe von Jobobjekten sowie anhand von Job-IDs, falls Sie diese zufällig haben:

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()

Schlüsselwortargumente und Profile

Batch-Systeme haben viele mögliche Übermittlungsoptionen, damit diese Optionen unabhängig von der Clustersyntax gleich funktionieren, Sie sind alle als Schlüsselwortargumente für die Klasse fyrd.job.Job implementiert. Eine vollständige Liste finden Sie in der Dokumentation.

Da es viele mögliche Argumente für das Stapelsystem geben kann und die meisten Jobs dieselben wenigen Argumente verwenden, verfügt Fyrd auch über ein Profilsystem, mit dem allgemeine Argumente gebündelt werden können. Dieses System implementiert ein DEFAULT Profil, das die Jobübermittlung ohne Argumente ermöglicht:

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

Installation

pip install fyrd

Um eine bestimmte version:

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

Um die neueste stabile Version zu erhalten:

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

Um die neueste Entwicklungsversion zu erhalten (immer noch ziemlich stabil):

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

Der Befehl fyrd conf init initialisiert Ihre Umgebung interaktiv, indem er Fragen zum lokalen Clustersystem stellt.

Dokumentation

Fyrd verfügt über eine sehr umfassende Dokumentation zum Lesen der Dokumente. Ein guter Anfang ist die Dokumentation Erste Schritte.

Probleme und Antworten

Wenn Sie Probleme mit dieser Software haben, fügen Sie ein Problem auf der Seite Probleme hinzu

Ich bin immer auf der Suche nach Hilfe beim Testen der Software und beim Implementieren neuer Schlüsselwortargumente. Ich möchte auch sehr gerne neue Batch-Systemumgebungen hinzufügen, benötige jedoch Zugriff auf diese Cluster, um die neuen Schlüsselwortargumente zu testen und das Parsen von Warteschlangen zu implementieren. Wenn Sie dabei helfen oder mir Zugriff auf Ihren Cluster gewähren möchten (nur für die Entwicklung dieses Pakets), senden Sie mir bitte eine E-Mail an

Warum der Name?

Ich gab diesem Projekt den Namen ‚Fyrd‘ zu Ehren meiner Großmutter, Hélène Sandolphen, die eine Gelehrte des Altenglischen war. Es ist das alte angelsächsische Wort für ‚Armee‘, insbesondere eine Armee von Freien, und dieser Code gibt Ihnen eine Armee von Arbeitern auf jeder Maschine oder Cluster, so schien es angemessen. Das Logo ist ein angelsächsisches Schild der Art, wie es von den Fyrds verwendet wird, mit einer Grafik eines Clusters, der oben überlagert ist.

Das Projekt hieß früher „Python Cluster“, was beschreibender, aber ehrlich gesagt langweilig ist. Außerdem haben ungefähr ein halbes Dutzend andere Projekte fast den gleichen Namen, daher machte es keinen Sinn, diesen Namen beizubehalten und das Projekt auf PyPI zu setzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.