gpt4 book ai didi

Dask For 循环并行

转载 作者:行者123 更新时间:2023-12-04 14:54:14 26 4
gpt4 key购买 nike

我正在尝试找到使用带有 dask 延迟的 for 循环的正确语法。我找到了几个教程和其他问题,但没有一个适合我的条件,这是非常基本的。

首先,这是并行运行 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

我看过一些例子,据说 Dask 有少量开销,但这似乎需要足够长的时间来证明,不是吗?

我的实际 for 循环涉及更重的计算,我为各种目标构建模型。

最佳答案

这个计算

for i in range(...):
pass

受全局解释器锁 (GIL) 的约束。您将需要使用 multiprocessing 或 dask.distributed Dask 后端,而不是默认的线程后端。我推荐以下内容:
total.compute(scheduler='multiprocessing')

但是,如果您的实际计算主要是 Numpy/Pandas/Scikit-Learn/Other numeric 包代码,那么默认线程后端可能是正确的选择。

有关在调度程序之间进行选择的更多信息,请访问: http://dask.pydata.org/en/latest/scheduling.html

关于Dask For 循环并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51110641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com