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

标签 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)
    

    问题:
  • 当我只处理两个图像(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
    

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



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

    编辑

    我包括 gc.collect()在工作人员运行的函数结束时调用,但没有消除警告。

    非常感谢您的帮助!

    最佳答案

    只要客户端持有分布式值的引用计数,集群就不会将其从内存中清除。这在 Managing Memory 中有详细说明文档,特别是“清除数据”部分。

    关于python - 任务之间保存的 dask-worker 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905659/

    相关文章:

    python - 如何从 pandas 数据框中的文本字符串中提取所有形容词?

    python - Tornado 中的错误电子邮件

    r - 使用并行时如何 `print`或 `cat`

    performance - 在不同的输入参数上多次运行 Tensorflow 图 : what kind of loop is efficient?

    c++ - 不完整的多线程 RayTracer 花费的时间是预期的两倍

    python - 将嵌套的 JSON 读入 Dask DataFrame

    python dask DataFrame,支持(可简单并行化)行吗?

    python - Pandas sort_values 函数中轴 = 1 的含义是什么?

    python - Groupby 并应用 pandas vs dask

    python - 在 Python 中计算每个时间范围内的事件