不断收到“distributed.utils_perf - WARNING - full garbage collections took 19% CPU time...”的警告信息。

13

在完成 DASK 代码后,我一直收到“distributed.utils_perf - WARNING - full garbage collections took 19% CPU time recently”警告消息。我正在使用 DASK 进行大规模地震数据计算。计算完成后,我将计算得到的数据写入磁盘中。写入磁盘部分所需时间比计算要长得多。在将数据写入磁盘之前,我调用了 client.close(),我认为 DASK 的工作已经结束了。但是“distributed.utils_perf - WARNING - full garbage collections took 19% CPU time recently”仍然不断出现。在进行计算时,我收到过这个警告消息3-4次,但是当我将数据写入磁盘时,每秒都会收到这个警告。我该如何摆脱这个烦人的警告?谢谢。


你找到解决方案了吗?对我来说只有60%,而且代码非常慢。 - gerrit
我让Dask Cluster在单独的进程中运行。因此,当我完成计算时,我让该进程完成。这大大改善了内存问题。 - NSJ
@NSJ,你能解释一下你是如何分离出Dask集群的吗? - takachanbo
@takachanbo 你可以在一个进程中启动调度程序,然后在另一个进程中启动客户端。当你启动客户端时,将调度程序的IP地址传递给构造函数。请参考文档(https://docs.dask.org/en/latest/setup/single-distributed.html)以获取在单台机器上使用LocalCluster进行此操作的示例。 - user1993951
这个在 dask/distributed 的 GitHub 上的线程有一些关于这个警告的有用评论:https://github.com/dask/distributed/issues/2801 - D.J. P.
4个回答

4

我在Colab中开启会话时遇到了同样的问题。

client = Client(n_workers=40, threads_per_worker=2)

我终止了所有Colab会话并安装和导入了所有Dask库。

!pip install dask
!pip install cloudpickle
!pip install 'dask[dataframe]'
!pip install 'dask[complete]'

from dask.distributed import Client
import dask.dataframe as dd
import dask.multiprocessing

现在一切都工作正常,没有遇到任何问题。不知道是怎么解决了我的问题 :D


1
在一个干净的环境中重新安装dask就解决了问题。 - Soren
是的,正确的 @Soren - Rajdeep Borgohain
1
它对我来说起到了作用,在我的系统上。只是,确认你的解决方案有效。 - Soren

2
我也曾苦恼于这个警告。我会收到很多这样的警告,然后工作进程就会死掉。之所以会出现这些警告,是因为我有一些自定义的Python函数,用于聚合我的数据,处理大型Python对象(字典)。如果我创建这些大型对象,垃圾回收需要花费很多时间,这是有道理的。
我重构了代码,使更多的计算在聚合之前并行进行,然后警告就消失了。
我查看了dask仪表板状态页面上的进度图表,以查看哪些任务需要处理很长时间(Dask尝试根据调用它们的代码中的函数来命名这些任务,这可以帮助,但它们并不总是那么描述性)。从那里,我可以找出需要优化的代码部分。

0

你可以在Python中禁用垃圾回收。

gc.disable()

我发现通过定期使用 Dask Client restart更容易管理Dask工作节点的内存:Client.restart()

-3
只需创建一个进程来运行Dask集群并返回IP地址。使用该IP地址创建客户端。

2
您能否在回答中提供任何限制条件、假设或简化?有关如何回答的更多详细信息,请参见此链接:https://stackoverflow.com/help/how-to-answer - Usama Abdulrehman
我希望我能提供更详细的样例。但是我已经转移到其他项目,不再拥有代码和集群环境了。 - NSJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接