当我在GPU设备上训练我的 pytorch 模型时,我的 python 脚本突然被杀死。深入研究操作系统日志文件,我发现脚本被 OOM Killer 杀死,因为我的CPU内存不足。It\xe2\x80\x99s 非常奇怪的是,我在GPU设备上训练了模型,但CPU内存用完了。\n OOM 杀手日志文件的快照\n
为了调试这个问题,我安装了 python 内存分析器。从内存分析器查看日志文件,我发现当发生列-=操作时,我的 CPU 内存逐渐增加,直到 OOM Killer 杀死我的\n程序。\n Python 内存分析器的快照\n
\n这\xe2\x80\x99s很奇怪,我尝试了很多方法来解决这个问题。最后,我发现在赋值操作之前,我先分离Tensor。神奇的是,它解决了这个问题。但我不明白\xe2\x80\x99不明白清楚为什么它有效。这是我原来的函数代码。
def GeneralizedNabla(self, image):\n pad_size = 2\n affinity = torch.zeros(image.shape[0], self.window_size**2, self.h, self.w).to(self.device)\n h = self.h+pad_size\n w = self.w+pad_size\n #pad = nn.ZeroPad2d(pad_size)\n image_pad = self.pad(image)\n for i in range(0, self.window_size**2):\n affinity[:, i, :, :] = image[:, :, :].detach() # initialization\n dy = int(i/5)-2\n dx = …Run Code Online (Sandbox Code Playgroud) python memory-leaks memory-profiling backpropagation pytorch