Eksperymentuję z IPython.parallel
i chcę tylko uruchomić kilka poleceń powłoki w różnych silnikach.IPython.parallel nie używając wielordzeniowych?
Mam następujący Notebook:
komórki 0:
from IPython.parallel import Client
client = Client()
print len(client)
5
i uruchomienie polecenia:
komórkowy 1:
%%px --targets 0 --noblock
!python server.py
Telefon komórkowy 2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
Celi 3:
%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1
Co robi to wykorzystuje realizację mincemeat
z MapReduce. Kiedy uruchamiam pierwszy !python mincemeat.py 127.0.0.1
używa on w przybliżeniu 100% jednego rdzenia, a kiedy uruchamiam drugi, spada do 50%. Mam 4 rdzenie (+ wirtualne rdzenie) na maszynie i mogę ich używać podczas uruchamiania bezpośrednio z terminalu, ale nie w Notebooku.
Czy jest coś, czego mi brakuje? Chciałbym użyć jednego rdzenia na polecenie !python mincemeat.py 127.0.0.1
.
EDIT:
Dla jasności, tutaj jest inna sprawa, że nie używa wielu rdzeni:
komórkowy 1:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
komórkowy 2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Przypuszczam, że czegoś mi brakuje. Wierzę, że te dwie komórki powinny uruchomić jeden inny rdzeń, jeśli jest dostępny. Jednak wydaje się, że tak nie jest. Znowu użycie procesora pokazuje, że dzielą one ten sam rdzeń i używają go w 50%. Co zrobiłem źle?
Nie jestem pewien, jaki jest sens używania IPython.równolegle tutaj, gdy po prostu uruchamiasz jednoliniowe polecenia powłoki na jednym komputerze na raz, ale jest mało prawdopodobne, że IPython.parallel ma jakąkolwiek zdolność do ingerowania w liczbę rdzeni używanych przez twoje podprocesy. Jak to wygląda, jeśli robisz ten sam przykład bez IPython.parallel (skoro to tylko trzy jednoliniowe wywołania powłoki)? – minrk
Witam @mnirk. Bez Ipython równolegle komórki blokują, to jest o wiele mniej interesujące. Aby to wyjaśnić, nie chcę uruchamiać jednego procesu na różnych rdzeniach, wolałbym, aby każdy proces miał jeden rdzeń. Dlatego przypisuję każde polecenie do innego celu. Wydaje się jednak, że wszystkie silniki (docelowa wartość od 0 do 4) działają na tym samym rdzeniu. – zermelozf
Mam na myśli zrobić to w trzech prostych sesjach terminalowych - to wszystko, co teraz robisz, uruchamiając jedno polecenie powłoki w trzech oddzielnych sesjach. IPython w ogóle nie angażuje się. – minrk