반응형
Pytorch에서는 초기화와 속도향상을 위해서 다양한 random함수들이 사용됩니다. 하지만 딥러닝 모델 학습을 재생산하거나 동일한 조건내에서 실험을 해야 할 경우, 이런 randomness를 컨트롤해줘야 할 필요가 있습니다.
# torch random 값 생성
torch.manual_seed(random_seed)
# 현 gpu에서의 random 값 생성 \
torch.cuda.manual_seed(random_seed)
# 2개 이상의 gpu를 사용할 때
torch.cuda.manual_seed_all(random_seed)
# randomness가 들어간 함수 미사용
torch.backends.cudnn.deterministic = True
# True일 시, 동일한 사이즈에 텐서들이 들어올때의 속도향상을 불러온다.
torch.backends.cudnn.benchmark = False
# numpy의 random seed 고정
np.random.seed(random_seed)
# random 라이브러리의 seed 고정
random.seed(random_seed)
multi gpu 사용시, dataloader에서 worker에 따른 random algorithm이 사용된다고 합니다. 아래 함수를 사용함으로써 해결할 수 있습니다.
def seed_worker(worker_id):
worker_seed = torch.initial_seed() % 2**32
numpy.random.seed(worker_seed)
random.seed(worker_seed)
g = torch.Generator()
g.manual_seed(0)
DataLoader(
train_dataset,
batch_size=batch_size,
num_workers=num_workers,
worker_init_fn=seed_worker,
generator=g,
)
반응형
'Pytorch' 카테고리의 다른 글
[Pytorch] model layer, Sequential 변경하는 법 (0) | 2021.09.26 |
---|---|
[Pytorch] network(model) parameter 얻는 방법 (1) | 2021.09.26 |