Deep learning Cuda内存不足,尽管只消耗了60%的内存

Deep learning Cuda内存不足,尽管只消耗了60%的内存,deep-learning,pytorch,nvidia,Deep Learning,Pytorch,Nvidia,我要把cuda从内存中取出错误。错误如下所示 运行时错误:CUDA内存不足。尝试分配256.00 MiB(GPU 0; 23.65 GiB总容量;21.65 GiB已分配;242.88 MiB空闲;PyTorch共预留22.55 GiB) 我可以在减少批量后训练模型。当我检查nvidia smi的输出时,我发现40%的内存仍然可用。这是输出。 可能的原因是什么? pytorch:1.4 cuda:10.2 输入大小:(512,512,4) 使用半精度 更多信息: gpu利用率图如下所示 每个

我要把cuda从内存中取出错误。错误如下所示

运行时错误:CUDA内存不足。尝试分配256.00 MiB(GPU 0; 23.65 GiB总容量;21.65 GiB已分配;242.88 MiB空闲;PyTorch共预留22.55 GiB)

我可以在减少批量后训练模型。当我检查nvidia smi的输出时,我发现40%的内存仍然可用。这是输出。

可能的原因是什么?
pytorch:1.4
cuda:10.2
输入大小:(512,512,4)
使用半精度

更多信息: gpu利用率图如下所示


每个峰值处的数字表示批次大小。似乎最初的内存需求比之后需要的内存要高得多。有人能解释一下吗?

在我看来,PyTorch总共保留了22.55 GiB—21.65 GiB已分配=242.88 MiB空闲。然后,它尝试分配256.00 MiB-在新分配中,不使用已分配的内存,而在256>242时,它失败了。我理解这一点,但为什么
nvidia smi
显示GPU内存使用率接近13.5 GB?表示“[差异]是由于与该进程无关的GPU内存消耗(例如CUDA本身使用的内存)。”使用nvidia smi查看您的程序使用了多少RAM没有多大意义,因为它显示了您执行该程序时的使用情况,并且RAM使用情况会随着程序的执行而变化。程序所需的内存显然比可用内存多。Pytorch几乎肯定试图分配比可用内存更多的内存。实际上,GPU内存的总使用量一直高达近24GB,因为没有更多的可用内存,pytorch崩溃,因此进程分配的内存被释放。这种情况发生得非常快,这可能就是为什么您没有在nvidia smi上看到结果的原因。nvidia smi在查询时只报告GPU的状态。在我看来,PyTorch总共保留了22.55 GiB-21.65 GiB已分配=242.88 MiB空闲。然后,它尝试分配256.00 MiB-在新分配中,不使用已分配的内存,而在256>242时,它失败了。我理解这一点,但为什么
nvidia smi
显示GPU内存使用率接近13.5 GB?表示“[差异]是由于与该进程无关的GPU内存消耗(例如CUDA本身使用的内存)。”使用nvidia smi查看您的程序使用了多少RAM没有多大意义,因为它显示了您执行该程序时的使用情况,并且RAM使用情况会随着程序的执行而变化。程序所需的内存显然比可用内存多。Pytorch几乎肯定试图分配比可用内存更多的内存。实际上,GPU内存的总使用量一直高达近24GB,因为没有更多的可用内存,pytorch崩溃,因此进程分配的内存被释放。这种情况发生得非常快,这可能就是为什么您没有在nvidia smi上看到结果的原因。nvidia smi只在查询时报告GPU的状态。