【发布时间】:2019-05-23 03:47:49
【问题描述】:
简介
我正在使用 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)
问题:
- 当我只处理两个图像(1 个图像/worker)时,一切都很好
- 当我为每个工作人员分散多个图像时,我会收到此警告,其中进程内存值会增加。
.
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 循环吗?
编辑
我在 worker 运行的函数末尾添加了 gc.collect() 调用,但没有消除警告。
非常感谢您的帮助!
【问题讨论】:
-
你解决了这个问题吗?
-
不,还是个问题
-
我猜还是没有解决办法?
标签: python parallel-processing dask dask-distributed