The playground

More information here

Fyrd

What is Fyrd?Un rapido esempio Dependency tracking Argomenti e profili di parole chiaveInstallazioneDocumentazione Problemi e contributo Perché il nome? 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. In questo momento supporta torque e slurm, con un fallback locale basato su multiprocessing. Poiché […]

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. In questo momento supporta torque e slurm, con un fallback locale basato su multiprocessing. Poiché è scritto in modo modulare, tuttavia, è possibile aggiungere qualsiasi sistema batch. Per richiedere l’aggiunta del tuo sistema batch, invia un’e-mail o invia un problema alla pagina github.

La modalità di fallback locale è un clone di gestione del lavoro in miniatura in stile torque/slurm. Avvia un server sulla tua macchina e quel server accetterà ed eseguirà i lavori nello stesso modo in cui torque o slurm farebbero. Consente il monitoraggio delle dipendenze, ma non implementa partizioni o consente la visualizzazione di lavori di altri utenti. Si noti che la modalità locale di fyrd non è un sostituto fantastico per la multiprocessing, perché utilizza un modello di invio di file non necessario per i lavori locali, ciò significa che c’è un leggero (circa 0,5 secondi) overhead per ogni lavoro inviato.

Un rapido esempio

Diciamo che hai qualche pezzo di codice che hai ottenuto da qualche parte, chiamiamoloreally_slow_algorithm, e vuoi eseguirlo su 200 file e poi lavorare su quindi esaminare i risultati diSTDOUT, ma devi prima analizzare i risultati per ottenere solo le prime due colonne. Ecco come faresti:

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)

Dependency tracking

Fyrd implementa un semplice sistema di dependency tracking. La maggior parte dei sistemi batch consente il monitoraggio delle dipendenze, ma richiede una sintassi alquanto complessa e una conoscenza preliminare dell’ID del lavoro, qualcosa che non si ha quando si crea una pipeline. Fyrd consente quindi di monitorare le dipendenze utilizzando gli oggetti Job, nonché gli ID job, che si hanno:

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

Argomenti e profili di parole chiave

I sistemi batch hanno molte opzioni di invio possibili, per consentire a queste opzioni di funzionare allo stesso modo indipendentemente dalla sintassi del cluster, sono tutte implementate come argomenti di parole chiave nella classe fyrd.job.Job. Un elenco completo è disponibile nella documentazione.

Poiché possono esserci molti argomenti possibili per il sistema batch e poiché la maggior parte dei lavori utilizza gli stessi argomenti, Fyrd ha anche un sistema di profili, che consente di raggruppare argomenti comuni. Questo sistema implementa un DEFAULT profilo, che consente l’invio di un lavoro senza argomenti a tutti:

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

Installazione

pip install fyrd

Per ottenere una versione specifica:

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

Per ottenere l’ultima versione stabile:

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

Per ottenere l’ultima versione di sviluppo (ancora abbastanza stabile):

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

Il comando fyrd conf init inizializza l’ambiente in modo interattivo ponendo domande sul sistema cluster locale.

Documentazione

Fyrd ha una documentazione molto completa su Leggi i documenti, dovresti assolutamente leggerlo. Un buon punto di partenza è la documentazione introduttiva.

Problemi e contributo

Se hai problemi con questo software aggiungi un problema alla pagina problemi

Sono sempre alla ricerca di aiuto per testare il software e implementare nuovi argomenti di parole chiave. Vorrei anche aggiungere nuovi ambienti di sistema batch, ma ho bisogno di accedere a quei cluster per testare i nuovi argomenti delle parole chiave e implementare l’analisi della coda. Se vuoi aiutare con questo o darmi accesso al tuo cluster (solo per lo sviluppo di questo pacchetto), scrivimi un

Perché il nome?

Ho dato a questo progetto il nome ‘Fyrd’ in onore di mia nonna, Hélène Sandolphen, che era una studiosa di inglese antico. È la vecchia parola anglosassone per “esercito”, in particolare un esercito di uomini liberi, e questo codice ti dà un esercito di lavoratori su qualsiasi macchina o cluster, quindi sembrava appropriato. Il logo è uno scudo anglosassone del tipo utilizzato dai Fyrds, con una grafica di un cluster sovrapposta sulla parte superiore.

Il progetto era chiamato “Cluster Python”, che è più descrittivo ma francamente noioso. Inoltre, circa una mezza dozzina di altri progetti hanno quasi lo stesso nome, quindi non aveva senso mantenere quel nome e mettere il progetto su PyPI.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.