python - 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
解决方案
嗨@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
推荐阅读
- laravel - laravel 中的身份验证和重定向问题
- haskell - 列表理解保护等效于 filterM
- excel - 如何禁用 Excel 上下文菜单项
- r - 在 R 中绘制两个凸包
- python - 如何对列表中的字典进行排序并操作数据?
- c# - 使用 C# 插入 Oracle 数据访问
- r - 创建一个双向表以在 R 中运行 t 检验
- node.js - 使用带有调色板颜色的 ffmpeg 将 GIF 转换为 MP4
- javascript - 反应:_open_weather_map.default.fetchForcast 不是一个函数
- reactjs - React Redux 多用户注册