论文的代码复现以及代码设置


​ 如同我想说的那样 我希望在我写代码或者复现别人代码的开始的时候 就能使用一下这一篇文章对于我的思路的梳理 有较大的作用

感谢: https://mp.weixin.qq.com/s/Xy47wBVurmCH6QmGtM_mow

2022年5月15日 晚上 我看到了这篇文章

导入包和版本查询

1
2
3
4
5
6
7
import torch
import torch.nn as nn
import torchvision
print(torch.__version__)
print(torch.version.cuda)
print(torch.backends.cudnn.version())
print(torch.cuda.get_device_name(0))

可复现性

在硬件设备(CPU、GPU)不同时,完全的可复现性无法保证,即使随机种子相同。但是,在同一个设备上,应该保证可复现性。具体做法是,在程序开始的时候固定torch的随机种子,同时也把numpy的随机种子固定。

1
2
3
4
5
6
np.random.seed(0)
torch.manual_seed(0)
torch.cuda.manual_seed_all(0)

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

显卡设置

如果只需要一张显卡

1
2
# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

如果需要指定多张显卡,比如0,1号显卡。

1
2
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1'

也可以在命令行运行代码时设置显卡:

1
CUDA_VISIBLE_DEVICES=0,1 python train.py

清除显存(在跑高显存的代码)

1
torch.cuda.empty_cache()

也可以使用在命令行重置GPU的指令

1
nvidia-smi --gpu-reset -i [gpu_id]