代码之家  ›  专栏  ›  技术社区  ›  matanster

dask应用的最佳并发/分区?

  •  0
  • matanster  · 技术社区  · 7 年前

    我在用 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'))
    

    我应该看看我正在应用的函数,以便能够自己回答这个问题,还是这个场景的调整是不可知的,因此我们有一个经验法则?

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   mdurant    7 年前

    恐怕,知道给定并行计算的最佳设置的唯一方法是基准测试。许多变量影响性能:数据的容量和单个块的大小、计算的复杂性、它需要多少CPU和中间函数需要多少内存、函数是否释放吉尔、需要多少通信……

    事实上你正在使用 from_pandas 建议您的计算将需要CPU密集型才能从Dask中获得良好的好处,因为显然它必须作为单个pandas数据帧放入客户机的内存中。

    一些建议是 here ,分布式仪表板将显示正在进行的操作,包括已提交图形的当前状态和正在工作线程上运行的代码的分析。这回答了评论中的问题;你回答了 获取行级信息,因为Dask不知道数据帧的每个分区中有多少行。