Deep learning 在pytorch培训后如何清除图形卡内存?

Deep learning 在pytorch培训后如何清除图形卡内存?,deep-learning,memory-leaks,pytorch,Deep Learning,Memory Leaks,Pytorch,我在colab与pytorch打交道 训练时,pytorch会消耗大量内存 培训后,我保存了模型,并将模型加载到另一个笔记本(注2)。 在注2中,在加载状态和所有内容之后,pytorch消耗的内存要比训练状态少得多。 所以,我想知道训练时“无用”数据是否存储在图形卡存储器中(在我的例子中,大约13gb)… 如果是,培训后如何删除无用数据 另外。我试图删除训练时使用的变量,但不够大(大约2gb)这是训练时所期望的。在训练过程中,操作本身将占用内存 例如,考虑以下操作- a = np.random.

我在colab与pytorch打交道
训练时,pytorch会消耗大量内存
培训后,我保存了模型,并将模型加载到另一个笔记本(注2)。
在注2中,在加载状态和所有内容之后,pytorch消耗的内存要比训练状态少得多。
所以,我想知道训练时“无用”数据是否存储在图形卡存储器中(在我的例子中,大约13gb)…
如果是,培训后如何删除无用数据


另外。我试图删除训练时使用的变量,但不够大(大约2gb)

这是训练时所期望的。在训练过程中,操作本身将占用内存

例如,考虑以下操作-

a = np.random.rand(100, 500, 300)
b = np.random.rand(200, 500, 300)
c = (a[:, None, :, :] * b[None, :, :, :]).sum(-1).sum(-1)
a、b和c的内存大小分别约为400 MB。但是,如果您检查

%memit (a[:, None, :, :] * b[None, :, :, :]).sum(-1).sum(-1)
那是23GB!由于涉及大量的中间阵列,因此实际执行操作时,线路本身占用大量内存。这些阵列是临时的,在操作结束后会自动删除。因此,删除一些变量对减少占用空间没有多大作用

解决这个问题的方法是使用内存优化操作

例如,使用
np.tensordot(a,b,((1,2),(1,2)))
而不是通过广播进行乘法,会留下更好的内存占用


因此,您需要做的是确定代码中的哪个操作需要如此巨大的内存,并看看是否可以使用更高效的等效内存(这甚至可能不可能,具体取决于您的特定用例)。

感谢您提供的信息。不过,在培训过程之后,不会删除无用的数据(在您的示例中为临时数组)。在培训过程结束后,我是否必须手动清除这些临时阵列?不需要,这些临时阵列由Numpy自动管理。您不必手动跟踪或删除它们