任务之间的dask-worker记忆

时间:2018-12-23 17:24:19

标签: python parallel-processing dask dask-distributed

简介

我正在使用dask.distributed(使人并行的任务)并行化一些代码。

  • 我有一个指向我分散到工作人员的不同图像的路径列表。
  • 每个工作人员加载并过滤图像(3D堆栈)并运行一些过滤。使用scipy进行3D过滤可保存中间输出。
  • 每个经过过滤的图像都保存为npy和/或png在磁盘上。
  • 在群集上运行之前,我正在本地进行测试,并且我的设置是:

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(n_workers=2, threads_per_worker=1,memory_limit =8e9)
client = Client(cluster)

问题:

  • 当我只处理两张图像(一张图像/一个工人)时,一切都很好
  • 当我每个工作人员散布多于一张图像时,会收到此警告,其中过程内存值会增加。

distributed.worker - WARNING - Memory use is high but worker has no data to store to disk.
Perhaps some other process is leaking memory?  Process memory: 6.21 GB -- Worker memory limit: 8.00 GB

建议工作人员使用的RAM的一部分在不同文件之间不是freed(我想是剩余的过滤中间物...。)

问题

在开始处理下一个图像之前,是否有办法释放工作程序的内存?我必须在运行的任务之间运行garbage collector周期吗?

编辑

我在工作程序运行的函数末尾包含了gc.collect()调用,但是并没有消除警告。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

只要客户端拥有分布式值的引用计数,群集就不会从内存中清除它。 Managing Memory文档中对此进行了详细说明,特别是“清除数据”部分。