Dask - одни и те же задачи не выполняются параллельно на кластере машин Ubuntu.

У меня 3 машины Ubuntu (CPU). мой планировщик dask и клиент находятся на одном компьютере, тогда как два рабочих процесса dask работают на двух других машинах. когда я запускаю первую задачу, она назначается для первого воркера, но затем при запуске второго воркера, пока первый все еще выполняется, он не расписывается для второго воркера. вот пример кода клиента, который я пробовал.

### client.py

from dask.distributed import Client

import time, sys, os, random

def my_task(arg):
  print("doing something in my_task")
  time.sleep(2)
  print("inside my task..", arg)
  print("again doing something in my_task")
  time.sleep(2)
  print("return some random value")
  value = random.randint(1,100)
  print("value::", value)
  return value

client = Client("172.25.49.226:8786")
print("client::", client)
future = client.submit(my_task, "hi")
print("future result::", future.result())
print("closing the client..")
client.close()

Я запускаю "python client.py" два раза почти одновременно с двух разных терминалов / машин. кажется, что оба клиента выполняются, но это приводит к точно такому же результату, которого не должно быть, потому что тип возврата my_task () является случайным значением. Я тестировал это на машинах с Ubuntu.

Однако месяц назад мне удалось запустить те же задачи параллельно на машинах CentOs. И теперь, если вернуться и запустить те же две задачи с этих машин CentOs, проблема не исчезнет. Это странно. он не работал параллельно. Не удалось выяснить это поведение с помощью dask. Мне не хватает настроек уровня ОС или чего-то еще?

Запустите нижеприведенное почти одновременно,

python client.py # from one machine/terminal
python client.py # from another machine/terminal

эти две задачи должны выполняться параллельно, каждая задача должна выполняться на разных воркерах (у нас есть два свободных воркера), но этого не происходит. Я не вижу никаких журналов ни на второй рабочей консоли, ни в планировщике, в то время как первая задача продолжает выполняться. В конце концов, я заметил, что обе задачи завершаются в одно и то же время с одинаковым результатом.

Однако приведенный выше клиентский код хорошо работает «параллельно» в ОС Windows, каждая задача выполняется через несколько терминалов. но я бы хотел запустить его на машинах с Ubuntu.


person SpiritOverflow    schedule 20.04.2018    source источник


Ответы (1)


По умолчанию, если вы вызываете одну и ту же функцию для одних и тех же входов, Dask будет считать, что это приведет к тому же значению, и вычислит его только один раз. Вы можете изменить это поведение с помощью ключевого слова pure=False

future = client.submit(func, *args, pure=False)
person MRocklin    schedule 20.04.2018
comment
ты гениален ..: D (: thums up) - person SpiritOverflow; 20.04.2018