Работники Dask не на все 100% - PullRequest
2 голосов
/ 30 мая 2019

При запуске Dask, распределенного по кластеру из 8 компьютеров, каждое из которых имеет 8 ядер (всего 64 ядра), я получаю странный поток задач:

Task stream

Есть некоторые пробелы между задачами (белые "столбцы"), которые появляются случайным образом.В идеале (как я понимаю) работники всегда должны быть заняты какой-то нерешенной задачей (как только работник освобождается, ему назначается задача).Это основной цикл моего скрипта, который генерирует предыдущую фигуру:

task_pool = as_completed(futures, with_results=True)
batches = task_pool.batches()

while not self.stopping_condition_is_met():
    batch = next(batches)
    for _, received_solution in batch:
        ...
        new_task = self.client.submit(heavy_computation, args)
        task_pool.add(new_task)

        update_condition()
        if self.stopping_condition_is_met():
            break

Я заметил, что в эти периоды у меня есть 1-2 задачи обработки и 100-120 задач в памяти, которые внезапно меняютсядо 30-40 и 80-100.Почему это происходит?

1 Ответ

0 голосов
/ 02 июня 2019

Трудно сказать точно, но я предполагаю, что просто не хватает работы, чтобы все ваши сотрудники были заняты все время. В идеале вы могли бы поддерживать намного больше задач, чем у вас есть рабочие потоки. Если у вас есть только 1-2 задачи обработки, тогда только 1-2 из ваших потоков могут быть активными одновременно. Даже если у вас 30 активных, вы используете только половину своего кластера.

Может быть, есть какой-то способ, которым вы можете разделить свою работу немного больше или оставить больше работы доступной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...