pytorch模型可复现设置(cudnn.benchmark 加速卷积运算 cudnn.deterministic)
在代码前加设torch.backends.cudnn.benchmark = True可以提升训练速度。会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。但是由于计算中有随机性,每次的网络结果可能会略有差异
torch.backends.cudnn.deterministic = True 固定cuda的随机数种子,每次返回的卷积算法将是确定的。可以避免benchmark=True的差异
如果是复现模型结果的话(reproducibility=True),应该用这个配置
random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True
mmdetection也这么写
否则 ,(reproducibility=False):
random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = True torch.backends.cudnn.deterministic = False