首页 > 解决方案 > Cupy fft导致内存泄漏?

问题描述

在我的 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

标签: pythoncupy

解决方案


嗨@MazzMan 我直到现在才注意到你的 SO 问题。正如我在您的工单中回复的那样,这不是错误,而是预期的行为,从 v8.0 开始,我们默认缓存 cuFFT 计划。这些计划与一些内存作为工作空间相关联,因此除非删除计划/清除缓存,否则会有一些内存保留。例如,您可以在此处参考计划缓存中的 CuPy 文档并尝试禁用缓存。

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

>>> 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

推荐阅读