Cupy fft 导致内存泄漏?

Cupy fft causing memory leak?

在我的 python 脚本中,我相当广泛地使用了 fft 和 ifft。为了加快我的 GTX 1060 6GB 的速度,我使用了 cupy 库。 运行进入内存不足问题后,我发现内存泄漏是原因。

我创建了以下代码来调查这个问题。在调用 cupy.fft.fft 之后,分配了比输出大小更多的额外内存。删除该输出时,实际上只释放了该数量的内存,我不知道如何释放额外的内存。这是一个错误还是我在监督什么?

import cupy as cp


t = cp.linspace(0, 1, 1000)
print("t      :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

a = cp.sin(4 * t*2*3.1415)

print("t+a    :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

fft = cp.fft.fft(a)

print("fft    :", fft.nbytes/1024, "kB")
print("t+a+fft:", cp.get_default_memory_pool().used_bytes()/1024, "kB")

del fft
cp.get_default_memory_pool().free_all_blocks()
cp.get_default_pinned_memory_pool().free_all_blocks()

print("t+a    :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

del t,a
print("       :", cp.get_default_memory_pool().used_bytes()/1024, "kB")

输出:

t      : 8.0 kB
t+a    : 16.0 kB
fft    : 15.625 kB
t+a+fft: 48.0 kB
t+a    : 32.0 kB
       : 16.0 kB

我正在使用 cupy-cuda101 版本 8.1.0

你好@MazzMan 我直到现在才注意到你的问题。例如,正如我在 your ticket, this is not a bug but rather expected behavior, as starting v8.0 we cache cuFFT plans by default. The plans are tied to some memory as workspace, so unless the plans are deleted/the cache is cleared, there will be some memory hold. You can refer to CuPy's doc on the plan cache here 中回复并尝试禁用缓存。

对于您的情况,您还可以 运行 在脚本后添加以下行以确认清除缓存后内存已释放。

>>> cache = cp.fft.config.get_plan_cache()
>>> cache.clear()
>>> print("after clearing cache:", cp.get_default_memory_pool().used_bytes()/1024, "kB")
after clearing cache: 0.0 kB