【问题标题】:Cupy fft causing memory leak?Cupy fft导致内存泄漏?
【发布时间】:2021-02-26 23:35:42
【问题描述】:

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

【问题讨论】:

    标签: python cupy


    【解决方案1】:

    嗨@MazzMan 我直到现在才注意到你的 SO 问题。正如我在your ticket 中回复的那样,这不是错误,而是预期的行为,从 v8.0 开始,我们默认缓存 cuFFT 计划。这些计划作为工作空间与一些内存相关联,因此除非删除计划/清除缓存,否则会有一些内存保留。例如,您可以参考计划缓存here 上的 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
    

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2014-06-07
      • 2013-11-20
      • 2011-10-28
      • 2016-01-18
      • 2012-12-13
      • 1970-01-01
      • 2011-01-08
      • 2011-02-01
      相关资源
      最近更新 更多