训练细分模型,有4个GPU在工作,有1个填充并得到:“ CUDA错误:内存不足”

时间:2018-12-15 18:51:26

标签: gpu pytorch

我正在尝试建立细分模型,并且不断  “ CUDA错误:内存不足”,在进行了调查之后,我意识到所有4个GPU都可以正常工作,但是其中一个正在填充。

一些技术细节:

  • 我的模型:

    该模型是用pytorch编写的,具有3.8M参数。

  • 我的硬件:

    我有4个GPU,每个GPU具有12GRAM(Titan V)。

我试图了解为什么我的一个GPU装满了,我做错了什么。

  • 证据: 从下面的屏幕截图可以看出,所有GPU都可以正常工作,但是其中一个GPU一直处于填充状态,直到达到极限为止。

enter image description here

  • 代码: 我将尝试解释我在代码中所做的事情:

    首先,我的模特:

    model = model.cuda()
    model = nn.DataParallel(model, device_ids=None)
    

    第二,输入和目标:

    inputs = inputs.to('cuda')
    masks = masks.to('cuda')
    

这些是与GPU兼容的线路,如果我错过了什么,而您还需要其他任何东西,请分享。

我感觉好像缺少了一些基本知识,这不仅会影响该模型,还会影响将来的模型,我很乐意寻求帮助。

非常感谢!

1 个答案:

答案 0 :(得分:0)

在不了解很多细节的情况下,我只能说以下

  1. nvidia-smi不是最可靠和最新的测量机制
  2. PyTorch GPU分配器也无济于事-它会人为地缓存内存块,以消耗用尽的资源(尽管这里不是问题)
  3. 我相信仍然有一个“主” GPU,它是将一个数据直接加载到(然后在DataParallel中广播到其他GPU)

我对PyTorch的了解还不足以可靠地回答问题,但是您可以肯定地检查单个GPU设置是否可以用批大小除以4来工作。也许您可以一次加载模型+批处理(不进行处理) )。