小编s1m*_*0d3的帖子

任务之间保留的 dask-worker 内存

介绍

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

问题:

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

.

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
Run Code Online (Sandbox Code Playgroud)

暗示工作人员使用的部分 RAM 不在freed不同文件之间(我猜是剩余的过滤中间体......)

有没有办法在开始处理下一个图像之前释放工人的内存?我必须garbage collector在运行任务之间运行一个循环吗?

编辑 …

python parallel-processing dask dask-distributed

8
推荐指数
1
解决办法
659
查看次数