最适合 dask 申请的 concurrency/partitioning?
Optimal concurrency/partitioning for dask apply?
我在数据框列上使用 apply
(希望我不应该使用 apply_map
,文档对此并不清楚)。想把空闲的多核大内存机器发挥到极致
我是否使用了工作线程数、线程数和分区数的最佳组合?
client = Client(n_workers=cpu_count()-2, threads_per_worker=1, memory_limit='1GB')
ddf = daskDataFrame.from_pandas(df, npartitions=cpu_count()-2)
ddf['candidate'] = ddf['text'].apply(get_sameness_candidate, meta=('candidate', 'str'))
我应该看看我正在申请的函数才能自己回答这个问题,还是这个场景的调整与此无关,因此我们有一个经验法则?
谢谢!
恐怕,了解给定并行计算的最佳设置的唯一方法是基准测试。许多变量会影响性能:数据量和单个块的大小、计算的复杂性、它需要多少 CPU 以及函数内的中间体需要多少内存、函数是否释放GIL,工人之间需要多少沟通...
您正在使用 from_pandas
的事实表明您的计算需要 CPU 密集才能看到 Dask 的好处,因为显然它必须适合客户端机器的内存作为单个 pandas 数据帧。
一些建议是 here,分布式仪表板将向您显示正在发生的事情,包括提交的图表的当前状态和代码 运行 对工人的分析。这回答了评论中的问题;你没有获取行级信息,因为Dask事先不知道数据帧的每个分区中有多少行。
我在数据框列上使用 apply
(希望我不应该使用 apply_map
,文档对此并不清楚)。想把空闲的多核大内存机器发挥到极致
我是否使用了工作线程数、线程数和分区数的最佳组合?
client = Client(n_workers=cpu_count()-2, threads_per_worker=1, memory_limit='1GB')
ddf = daskDataFrame.from_pandas(df, npartitions=cpu_count()-2)
ddf['candidate'] = ddf['text'].apply(get_sameness_candidate, meta=('candidate', 'str'))
我应该看看我正在申请的函数才能自己回答这个问题,还是这个场景的调整与此无关,因此我们有一个经验法则?
谢谢!
恐怕,了解给定并行计算的最佳设置的唯一方法是基准测试。许多变量会影响性能:数据量和单个块的大小、计算的复杂性、它需要多少 CPU 以及函数内的中间体需要多少内存、函数是否释放GIL,工人之间需要多少沟通...
您正在使用 from_pandas
的事实表明您的计算需要 CPU 密集才能看到 Dask 的好处,因为显然它必须适合客户端机器的内存作为单个 pandas 数据帧。
一些建议是 here,分布式仪表板将向您显示正在发生的事情,包括提交的图表的当前状态和代码 运行 对工人的分析。这回答了评论中的问题;你没有获取行级信息,因为Dask事先不知道数据帧的每个分区中有多少行。