我在how to parallelize many (fuzzy) string comparisons using apply in Pandas?
中使用dask
基本上我做了一些计算(没有写任何东西到磁盘)调用Pandas
和Fuzzywuzzy
(显然可能没有释放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
选项显然是非常错误的吗?
当然,我了解具体细节取决于我到底在做什么,但是上面的模式可能已经说明了某些事情是非常错误的?
非常感谢!!
答案 0 :(得分:3)
当然,我了解具体细节取决于我到底在做什么,但上面的模式可能已经说明了某些事情是非常错误的?
这是相当有意义的。识别性能问题很棘手,尤其是在并行计算发挥作用时。以下是一些可以想到的事情。
helper
可能做得很奇怪。通常,解决这些问题的一个好方法是创建一个minimal, complete, verifiable example来分享其他人可以轻松复制和播放的内容。通常在创建这样的示例时,无论如何都能找到问题的解决方案。但是,如果这种情况至少发生,那么你可以将其转移给图书馆维护者。在创建这样的示例之前,大多数图书馆维护者都懒得花时间,几乎总是有太多细节特定于手头的问题以保证免费服务。