BUG场景:
固定随机种子,提高模型复现性,在使用常规固定随机数种子外,最好使用下面方法固定, 注意的是, cudnn.benchmark虽然可以提高运行速度,但是cudnn.benchmark=True会影响模型每次运行结果不同。解决办法:
将多个随机的数据都固定,但是有遇到使用num_works>0时,模型复现也有波动。
random.seed(args.manualSeed)
np.random.seed(args.manualSeed)
torch.manual_seed(args.manualSeed)
torch.cuda.manual_seed(args.manualSeed)
torch.cuda.manual_seed_all(args.manualSeed)
os.environ['PYTHONHASHSEED'] = str(args.manualSeed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.enabled = True
种子固定,仍然变化,num_works也有责任:
但是dataloader有遇到使用num_works>0时,模型复现也有波动。
def _init_fn(worker_id):
random.seed(10 + worker_id)
np.random.seed(10 + worker_id)
torch.manual_seed(10 + worker_id)
torch.cuda.manual_seed(10 + worker_id)
torch.cuda.manual_seed_all(10 + worker_id)
trainloader = DataLoader(dataset=datasetTrain, batch_size=args.batch_size, shuffle=True,num_workers=6,worker_init_fn=_init_fn,
pin_memory=False)
如果最后还是变化,检查下是否在代码其他地方设置了cudnn.benchmark=True , 我当时因为为了提升模型速度,就忘了改。