【发布时间】:2021-07-23 03:42:35
【问题描述】:
我有许多大型numpy 数组需要存储为dask 数组。在尝试从.npy 加载每个数组然后将其转换为dask.array 时,我注意到RAM 使用率几乎与常规numpy 数组一样多,即使在我将del arr 加载到arr 之后dask.array .
在这个例子中:
arr = np.random.random((100, 300))
print(f'Array ref count before conversion: {sys.getrefcount(arr) - 1}') # output: 1
dask_arr = da.from_array(arr)
print(f'Distributed array ref count: {sys.getrefcount(dask_arr) - 1}') # output: 1
print(f'Array ref count after conversion: {sys.getrefcount(arr) - 1}') # output: 3
我唯一的猜测是,当dask 加载数组时,它创建了对numpy 数组的引用。
如何释放内存并删除对内存位置的所有引用(如 C 中的 free(ptr))?
【问题讨论】:
-
写入磁盘阵列
import gc; gc.collect()后试一试 -
Python 没有公开任何显式管理内存的方法
-
@Ehsan 需要注意,
gc只影响循环垃圾收集器 -
@Ehsan,我 tried
gc但这不起作用。内存仍未释放。 -
你试过在你的对象上使用 'del' 然后调用 gc 吗?
标签: python numpy memory-leaks dask