1. test或者valid时候,显存爆炸,
怀疑没有清空计算图或者梯度还存着
在循环前面, with torch.no_grad():
2. 训练 开启bn和dropout: model.train()
测试关闭 bn和dropout: model.eval()
3。 训练加速方法
https://www.zhihu.com/question/274635237/answer/756144739
apex或者 新版pytorch的 混合精度训练
我自己用过的:
dataparellel或者 DistributedDataParallel
dalaloader设置num_workers 设为gpu数量的4倍, pin_memory= True, drop_last, .cuda(non_blocking= True)
bn<8 可能太小, 不稳定
开启 torch.backends.cudnn.benchmark= True
主要: gpu利用率低下,减少gpu cpu之间的数据传输
.cpu() .cuda() .item() .numpy()
可以 卷积等的 inplace= true
梯度设none而不是0: .zero_grad(set_to_None= True) 而不是.zero_gard()
关于 dataparellel:
设置devices_ids=[0,1,2...]
设置 每个batch的数据 模型都to(device)
设置optimizer dataparellel
设置保存model 和optimizer的module
设置 optimizer.module.step()
和nn.DataParallel说再见
https://zhuanlan.zhihu.com/p/95700549
Pytorch DistributedDataParallel简明使用指南
https://zhuanlan.zhihu.com/p/368916180
pytorch多gpu DataParallel 及梯度累加解决显存不平衡和显存不足问题
https://github.com/Link-Li/Balanced-DataParallel
4.PyTorch中的contiguous
https://zhuanlan.zhihu.com/p/64551412
r2d2中的 x.continuous().cuda()