Dask For Loop Parallel - PullRequest
       21

Dask For Loop Parallel

0 голосов
/ 30 июня 2018

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

Во-первых, это правильный способ параллельного запуска цикла for?

%%time

list_names=['a','b','c','d']
keep_return=[]

@delayed
def loop_dummy(target):
    for i in range (1000000000):
        pass
    print('passed value is:'+target)
    return(1)


for i in list_names:
    c=loop_dummy(i)
    keep_return.append(c)


total = delayed(sum)(keep_return)
total.compute()

Это произведено

passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 53s

Если я запускаю это последовательно,

%%time

list_names=['a','b','c','d']
keep_return=[]


def loop_dummy(target):
    for i in range (1000000000):
        pass
    print('passed value is:'+target)
    return(1)


for i in list_names:
    c=loop_dummy(i)
    keep_return.append(c)

это на самом деле быстрее.

passed value is:a
passed value is:b
passed value is:c
passed value is:d
Wall time: 1min 49s

Я видел примеры, где говорилось, что у Даска есть небольшое количество накладных расходов, но это, кажется, занимает достаточно много времени, чтобы оправдать, нет?

Мой фактический цикл for включает более сложные вычисления, когда я строю модель для различных целей.

1 Ответ

0 голосов
/ 30 июня 2018

Это вычисление

for i in range(...):
    pass

Связан GIL. Вы захотите использовать многопроцессорный или dask.distributed бэкэнд Dask, а не бэкэнд по умолчанию для потоков. Я рекомендую следующее:

total.compute(scheduler='multiprocessing)

Однако, если ваши фактические вычисления в основном состоят из числового кода пакета Numpy / Pandas / Scikit-Learn / Other, то потоковый бэкэнд по умолчанию, вероятно, является правильным выбором.

Более подробная информация о выборе между планировщиками доступна здесь: http://dask.pydata.org/en/latest/scheduling.html

...