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

Dask: very low CPU usage and multiple threads? is this expected?

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

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

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

当然,我知道具体情况取决于我在做什么,但也许上面的模式已经可以说明一些事情错得离谱吗?

非常感谢!!

Of course, I understand the specifics depends on what exactly I am doing, but maybe the patterns above can already tell that something is horribly wrong?

这很正确。识别性能问题很棘手,尤其是当并行计算发挥作用时。以下是我想到的一些事情。

  1. 多进程调度程序必须每次都在不同进程之间移动数据。 serialization/deserialization 周期可能非常昂贵。使用 distributed scheduler 会更好地处理这个问题。
  2. 您的函数 helper 可能会做一些奇怪的事情。
  3. 通常最好避免使用 apply,即使在 Pandas 中也是如此。

一般来说,解决这些问题的一个好方法是创建一个 minimal, complete, verifiable example 来分享,其他人可以轻松地复制和使用。通常在创建这样的示例时,您无论如何都会找到问题的解决方案。但是,如果这没有发生,至少您可以将责任推给库维护者。在创建这样的示例之前,大多数库维护人员都不会花时间,几乎总是有太多特定于手头问题的细节以保证免费服务。