使用带有大型中间体的函数,使用dask建立内存



我有一个关于dask.compute((的一般问题,这个问题的动机是我在使用该函数时遇到的内存积累。我正在使用dask.compute((和map_partitions(((已经尝试过使用dask.distributed和dask.multiprocessing(稍后使用pool=ThreadPool和pool=multiprocessing.pool((来应用一个函数,该函数对dask数据帧的块执行一系列操作。函数的输出是一个相对较小的矩阵,但函数内的运算涉及真正较大的中间矩阵。尽管删除了这些中间程序,但随着时间的推移,我的内存会堆积起来,最终导致我的内核死亡。这让我怀疑dask是否只根据最终输出变量的预期大小而不是函数中的大型计算来分配作业,从而导致发送的作业太多,内存也会爆炸。这可能吗?感谢您对可能出现问题的任何见解。

有许多类似的问题(例如。,https://github.com/dask/distributed/issues/1795以及其他地方(。在这个问题中,您可能希望首先在函数上运行典型的python内存监控工具,看看这是否是内在行为。

从本质上讲,人们在创建和删除大量panda数据帧时一直在经历内存积累,这似乎是一个与dask无关的panda问题,甚至可能是一个更深层次的malloc问题。您可以做一些典型的事情,比如强烈确保不保持引用的有效性,以及在代码中调用gc.collect()

相关内容

  • 没有找到相关文章

最新更新