【问题标题】:Memory leak in python for loop even if I delete all variables at the end of each iteration即使我在每次迭代结束时删除所有变量,python for 循环中的内存泄漏
【发布时间】:2020-11-13 14:51:13
【问题描述】:

以下两个循环将使用内存,直到我用完为止,但我不知道为什么。我在每次迭代结束时删除所有创建的变量,但它仍然泄漏。

!pip3 install cupy-cuda101
import cupy as cp
import numpy as np
from sklearn.preprocessing import PolynomialFeatures

xtrain = cp.asnumpy(cp.random.uniform(-1,1,size = (150000,50)))

for i in range(0,1000):
   weights = cp.random.uniform(-1,1,size = (1275,1000))
   
   for chunk in range(0,xtrain.shape[0],5000):
      xchunk = xtrain[chunk:chunk+5000,:]
      poly=PolynomialFeatures(interaction_only = True, include_bias = False)
      xchunk = cp.array(poly.fit_transform(xchunk))
      ranks = cp.matmul(xchunk,weights)
      del ranks, xchunk, poly
   del weights

xtrain 也是浮点数据,介于 -1 和 1 之间。

【问题讨论】:

  • 你所有的del 语句都是毫无意义的,因为这些变量在每次迭代时都会重新分配。
  • 没错,那么每次迭代后它如何使用越来越多的内存?
  • 不知道。您必须提供 minimal reproducible example 才能真正期望任何人都能够诊断出类似 taht 的问题
  • 好的,现在可以重现了
  • 您能否详细说明您认为存在“泄漏”的原因?另请注意,CuPy 默认使用内存池:docs.cupy.dev/en/latest/reference/memory.html

标签: python for-loop memory-leaks cupy


【解决方案1】:

这些行在每次迭代结束时插入修复它:

    cp.get_default_memory_pool().free_all_blocks()
    cp.get_default_pinned_memory_pool().free_all_blocks()

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2011-09-17
    • 2017-08-13
    • 2018-05-23
    • 2017-02-09
    • 2011-08-16
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多