我使用multigpu使用pytorch训练模型。一个gpu比其他gpu占用更多的内存,从而导致“内存不足”。为什么一个GPU使用更多的内存?是否可以使使用更加平衡?还有其他减少内存使用量的方法吗? (正在删除不再使用的变量...?)批处理大小已为1。谢谢。
答案 0 :(得分:0)
DataParallel
拆分批次并将每个拆分发送到不同的GPU,每个GPU都有模型的副本,然后独立计算正向传递,然后将每个GPU的输出收集回一个GPU每个GPU中独立地计算损失的原因。
如果要缓解此问题,可以将损耗计算包括在DataParallel
模块中。
如果这仍然是一个问题,那么您可能需要模型并行性而不是数据并行性:使用.cuda(gpu_id)
将模型的不同部分移动到不同的GPU。当模型的权重很大时,这很有用。