2017-08-28 1 views
1

Wenn Sie Worker-Ressourcen (http://distributed.readthedocs.io/en/latest/resources.html) in verteilten Multi-Processing-Worker definieren, ist der Ressourcenpool für alle Prozesse definiert?Diek-Worker-Ressourcen für verteilte Worker

Zum Beispiel auf dem Arbeiter-Host Ich betreiben:

dask-worker --nprocs 8 --resources HOST=1 

Wenn ich nun Aufgabe einreichen (n), die resources={"HOST":1} erforderlich macht diese Garantie, dass nur einer der Prozesse auf dem Computer diese Aufgabe ausgeführt wird zu einem bestimmten Zeitpunkt?

Antwort

1

Das Schlüsselwort resources wird gleichmäßig auf alle Prozesse angewendet. Alle Arbeiter erhalten eine einzige HOST Ressource. Im Allgemeinen empfehle ich für ausgereifte Bereitstellungen in institutionellen Clustern, das Schlüsselwort --nprocs zu vermeiden und stattdessen jeden dask-worker-Prozess einzeln zu erstellen. Das ist expliziter.

dask-worker scheduler-address:8786 --resources 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
dask-worker scheduler-address:8786 
+0

Ich sehe .. also in meinem Beispiel, was wäre der Weg, um sicherzustellen, dass nur einer dieser Arbeiter bestimmte Aufgabe ausführt? Wenn ich nprocs weiterhin verwende und die Anforderung HOST: 1 definiere, werden alle Prozesse gleichzeitig ausgeführt. Auf der anderen Seite, wenn ich HOST: 8 brauche, dann ... wird keiner von ihnen laufen? Gleiche Frage für getrennte Prozesse ohne gemeinsames Kindermädchen. – evilkonrex

+0

Ressourcen beschränken Aufgaben nicht mehrfach, sie beschränken, welche Mitarbeiter welche Aufgaben ausführen können. Das obige Beispiel, das "--nprocs" vermeidet, sollte vollständig explizit sein. Ich empfehle, das Schlüsselwort '--nprocs' zu vermeiden. – MRocklin

+0

Ich sehe, wir werden von --nprocs zu unserem eigenen Prozessmanager wechseln und mehrere Prozesse explizit starten. Lassen Sie mich meinen Fall ein wenig mehr erklären. Die Idee ist, dass Arbeitsprozesse auf einem einzelnen Host immer noch bestimmte Ressourcen teilen. Wenn ich also eine Aufgabe ausführe, die alle Ressourcen auf dem Host benötigt, kann nur einer der Worker auf diesem Host gleichzeitig ausgeführt werden. Ich denke, es ist einfach mit Multithread-Worker, aber gibt es eine Funktion, die diesen Fall für mehrere Arbeitsprozesse unterstützt? PS - wir können wahrscheinlich einige Ressourcen-Sync in unserem Worker-Code implementieren, aber es wird komplexer – evilkonrex

Verwandte Themen