Pytorch 模型训练 CPU 内存泄漏问题

Pytorch model training CPU Memory leak issue

当我在 GPU 设备上训练我的 pytorch 模型时,我的 python 脚本被从 blue.Dives 中删除到 OS 日志文件中,我发现脚本被 OOM killer 杀死了,因为我的 CPU 运行 出自 memory.It 非常 st运行ge 我在 GPU 设备上训练了我的模型,但我 运行 超出了我的 CPU 内存。 Snapshot of OOM killer log file

为了调试这个问题,我安装了 python 内存分析器。从内存分析器查看日志文件,我发现当按列 -= 操作发生时,我的 CPU 内存逐渐增加,直到 OOM 杀手杀了我 程序。 Snapshot of Python memory profiler 非常st运行ge,我尝试了很多方法来解决这个issue.Finally,我发现在赋值操作之前,我分离Tensor first.Amazingly,它解决了这个issue.But我没有明白为什么works.Here是我原来的功能码

def GeneralizedNabla(self, image):
        pad_size = 2
        affinity = torch.zeros(image.shape[0], self.window_size**2, self.h, self.w).to(self.device)
        h = self.h+pad_size
        w = self.w+pad_size
        #pad = nn.ZeroPad2d(pad_size)
        image_pad = self.pad(image)
        for i in range(0, self.window_size**2):
            affinity[:, i, :, :] = image[:, :, :].detach()  # initialization
            dy = int(i/5)-2
            dx = int(i % 5)-2
            h_start = pad_size+dy
            h_end = h+dy  # if 0 <= dy else h+dy
            w_start = pad_size+dx
            w_end = w+dx  # if 0 <= dx else w+dx
            affinity[:, i, :, :] -= image_pad[:, h_start:h_end, w_start:w_end].detach()
        self.Nabla=affinity
        return

如果大家有什么想法,我将不胜感激,谢谢。

以前当你没有在你的张量上使用 .detach() 时,你也在积累计算图,并且随着你的继续,你不断积累越来越多,直到你最终耗尽你的记忆它崩溃的地方。
当您执行 detach() 时,您实际上是在获取数据,而无需计算梯度所需的先前纠缠历史。