The playground

More information here

Fyrd

What is Fyrd?szybki przykład śledzenie zależności argumenty kluczowe i profile instalacjadokumentacja problemy i pomoc dlaczego nazwa? 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. Obecnie obsługuje moment obrotowy i slurm, z lokalnym, opartym na wieloprocesorze, awaryjnym. Ponieważ jest napisany w sposób modułowy, […]

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. Obecnie obsługuje moment obrotowy i slurm, z lokalnym, opartym na wieloprocesorze, awaryjnym. Ponieważ jest napisany w sposób modułowy, można jednak dodać dowolny system wsadowy. Aby poprosić o dodanie systemu wsadowego, wyślij wiadomość e-mail lub zgłoś problem na stronie github.

lokalny tryb awaryjny to miniaturowy klon zarządzania zadaniami w stylu torque/slurm. Uruchamia serwer na Twojej maszynie i ten serwer będzie akceptował i uruchamiał zadania w taki sam sposób, jak torque lub slurm. Pozwala na śledzenie zależności, ale nie implementuje partycji ani nie pozwala na przeglądanie zadań innych użytkowników. Zauważ, że tryb lokalny fyrd nie jest fantastycznym substytutem wieloprocesora, ponieważ wykorzystuje model przesyłania plików, który jest niepotrzebny dla lokalnych zadań, oznacza to, że dla każdego przesłanego zadania jest niewielki (około 0,5 sekundy) narzut.

szybki przykład

powiedzmy, że masz jakiś kawałek kodu, który skądś otrzymałeś, nazwijmy goreally_slow_algorithm, I chcesz go uruchomić na 200 plikach, a następnie popracować nad wynikamiSTDOUT, ale musisz najpierw przeanalizować wyniki, aby uzyskać tylko dwie pierwsze kolumny. Oto jak to zrobić:

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)

śledzenie zależności

Fyrd implementuje prosty system śledzenia zależności. Większość systemów wsadowych umożliwia śledzenie zależności, ale wymagają one nieco złożonej składni i wcześniejszej znajomości job ID, czegoś, czego nie masz podczas budowania potoku. Fyrd umożliwia zatem śledzenie zależności za pomocą obiektów zadań, a także ID zadań, Jeśli masz te:

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

argumenty kluczowe i profile

Systemy wsadowe mają wiele możliwych opcji przesyłania, aby umożliwić te opcje działać tak samo niezależnie od składni klastra, wszystkie są zaimplementowane jako argumenty kluczowe do klasy fyrd.job.Job. Pełna lista jest dostępna w dokumentacji.

ponieważ w systemie wsadowym może być wiele możliwych argumentów i ponieważ większość zadań używa tych samych argumentów, Fyrd ma również system profili, który pozwala na łączenie wspólnych argumentów. Ten system implementuje DEFAULT profil, który umożliwia składanie zadań bez żadnych argumentów:

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

instalacja

pip install fyrd

aby uzyskać najnowszą stabilną wersję:

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

aby uzyskać najnowszą stabilną wersję:

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

aby uzyskać najnowszą wersję rozwojową (nadal dość stabilną):

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

poleceniefyrd conf init inicjuje środowisko interaktywnie, zadając pytania dotyczące lokalnego systemu klastrów.

dokumentacja

Fyrd ma bardzo obszerną dokumentację na temat przeczytaj dokumenty, zdecydowanie powinieneś ją przeczytać. Dobrym miejscem na rozpoczęcie jest dokumentacja getting started.

problemy i pomoc

Jeśli masz jakiekolwiek problemy z tym oprogramowaniem dodaj problem na stronie problemy

zawsze szukam pomocy w testowaniu oprogramowania i wdrażaniu nowych argumentów słów kluczowych. Chciałbym również dodać nowe środowiska systemu wsadowego, ale potrzebuję dostępu do tych klastrów, aby przetestować nowe argumenty słów kluczowych i zaimplementować parsowanie kolejek. Jeśli chcesz pomóc w tym lub dać mi dostęp do swojego klastra (tylko dla rozwoju tego pakietu), napisz do mnie

dlaczego nazwa?

nadałem temu projektowi nazwę „Fyrd” na cześć mojej babci, Hélène Sandolphen, która była badaczką staroangielskiego. Jest to stare anglosaskie słowo oznaczające „armię”, szczególnie armię wolnych ludzi, a ten kod daje armię pracowników na każdej maszynie lub klastrze, więc wydawało się to właściwe. Logo jest anglosaską tarczą w rodzaju używanej przez fyrdów, z Grafiką klastra nałożoną na górze.

projekt był kiedyś nazywany „Python Cluster”, co jest bardziej opisowe, ale szczerze mówiąc nudne. Ponadto, około pół tuzina innych projektów ma prawie taką samą nazwę, więc nie ma sensu trzymać tej nazwy i umieszczać projektu na PyPI.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.