使用相同的参数进行模型的训练和inference。但居然在inference时出现:
RuntimeError: CUDA out of memory
后来发现可能是由于改变了inference出来的特征之后的计算过程,导致使用了更多的显存来计算梯度。原来计算出特征之后直接去算loss,而在inference时计算出特征之后是一些其他的操作。
之前以为model.eval()就可以停止计算梯度,但事实上model.eval()貌似只有禁用BatchNormalization和Dropout的功能。
在代码中加入torch.set_grad_enabled(False)后显存就够用了。
在模型训练与推理过程中,因改变特征计算流程致CUDA显存不足。原以为model.eval()能停止梯度计算,实则仅禁用BN与Dropout。通过加入torch.set_grad_enabled(False)有效降低显存消耗。
3953

被折叠的 条评论
为什么被折叠?



