Dask:非常低的CPU使用率和多线程?这是预期的吗?

时间:2016-07-01 14:22:45

标签: python multithreading pandas dask fuzzywuzzy

我在how to parallelize many (fuzzy) string comparisons using apply in Pandas?

中使用dask

基本上我做了一些计算(没有写任何东西到磁盘)调用PandasFuzzywuzzy(显然可能没有释放GIL,如果这有帮助),我运行的东西如下:

dmaster = dd.from_pandas(master, npartitions=4)
dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value'))
dmaster.compute(get=dask.multiprocessing.get)

但是,代码的变体现在已经运行了10个小时,并且还没有结束。我在Windows任务管理器中注意到

  • RAM utilization相当低,与我的数据大小相对应
  • CPU usage每2/3秒左右从0%反弹至最高5%
  • 我的大小为20 Python processes,大小为100MB,一个Python进程可能包含30GB大小的数据(我有一台 128 GB机器,内核为8核

问题是:是预期的行为吗?我在这里设置一些dask选项显然是非常错误的吗?

当然,我了解具体细节取决于我到底在做什么,但是上面的模式可能已经说明了某些事情是非常错误的?

非常感谢!!

1 个答案:

答案 0 :(得分:3)

  

当然,我了解具体细节取决于我到底在做什么,但上面的模式可能已经说明了某些事情是非常错误的?

这是相当有意义的。识别性能问题很棘手,尤其是在并行计算发挥作用时。以下是一些可以想到的事情。

  1. 多处理调度程序必须在每次之间在不同进程之间移动数据。序列化/反序列化周期可能非常昂贵。使用distributed scheduler可以更好地处理这个问题。
  2. 你的函数helper可能做得很奇怪。
  3. 通常使用apply,即使在Pandas中,也最好避免使用。
  4. 通常,解决这些问题的一个好方法是创建一个minimal, complete, verifiable example来分享其他人可以轻松复制和播放的内容。通常在创建这样的示例时,无论如何都能找到问题的解决方案。但是,如果这种情况至少发生,那么你可以将其转移给图书馆维护者。在创建这样的示例之前,大多数图书馆维护者都懒得花时间,几乎总是有太多细节特定于手头的问题以保证免费服务。