PaddleCV-SIG/PaddleRS

sdanet如何单机多卡训练?

Closed this issue · 3 comments

sdanet如何单机多卡训练?

请问您指的是STANet吗?如果是的话,STANet我刚刚测试过多卡训练是完全没有问题的。至于您提到的显存占用过多的问题,这是STANet算法本身的设计缺陷导致的:STANet需要计算两个时相影像中任意两个像素点的特征之间的相关关系,这一操作如果用相似度矩阵实现则空间复杂度极高(常见的实现均使用了相似度矩阵)。因为据我所知,包括Paddle在内的当前市面上几乎所有深度学习框架在多卡并行的时候都是在batch维度进行切分和分派的,而如果STANet的输入尺寸过大的话,即使batch_size为1也需要占用非常大的显存(可能超过一张卡的显存容量),所以多卡训练的策略并不能解决OOM的问题。我认为要解决这个问题应该还是得从输入影像的空间尺寸上入手,或者改进算法,降低注意力步骤的复杂度。

非常感谢您的回答。我尝试改变了训练集的大小,并将图片尺寸缩小到原来的四分之一,遗憾的是,这看起来并不能解决问题。当运行10个epoch要保存一次模型时,就会报错,看起来像是突然需要64G显存(无论我采用多大的图片尺寸),请问我可以在哪里修改吗?
image

非常感谢您的回答。我尝试改变了训练集的大小,并将图片尺寸缩小到原来的四分之一,遗憾的是,这看起来并不能解决问题。当运行10个epoch要保存一次模型时,就会报错,看起来像是突然需要64G显存(无论我采用多大的图片尺寸),请问我可以在哪里修改吗? image

对于这个问题,请检查验证集的输入尺寸,确认验证集也不能使用太大的图像。