最近接触一个生成代码,在每个epoch的train后放入了torch.cuda.empty_cache(),然后进入eval,模型整体bs为1,lr为0.0001。
我要查看这个模型在我的数据上效果,所以需要进行简单的超参调节,以下记录了步骤:
-
具体操作:bs较小,调参起来周期长,修改bs和对应的lr
-
发现问题1:这个步骤中,bs调整为32,lr调整为0.01,此时在watch中gpu会在一个epoch的训练结尾突然降低到6%-8%浮动
-
解决思路:
- 是否为gpu温度过高问题,因为我发现gpu随着运行逐渐会升高到80C,通过记录发现,并不是温度导致的显存突然下降
- 是否为dataloader的num_workers=8参数导致训练一段时间后内存满了,导致显存利用率下降,调整num_workers=0,增加pin_memory=True 选项,仍不能解决
- 是否为torch.cuda.empty_cache()问题,移除之后发现并没有太大变化,因为我的显存没有完全跑满,并不担心会爆显存
- 最后发现是eval的验证过程,bs还是为1且只有前向过程,所以使用现存很少且由于数据比较多又显得很慢
-
发现问题2:bs调整为32,lr调整为0.01,按理说应该会比bs为1,lr为0.0001能够更快到收敛值,有一个较好的结果,但是我发现训练后期会让整个生成模型变得不稳定,甚至loss逐渐增大
-
解决思路2:
我觉得可能是因为针对专门的数据集,基于GAN的生成模型在大bs中学习会很困难,导致bs增大后,模型能力不足,导致模式崩溃