Pytorch를 사용해서 모델을 개발하고
개발된 모델이나 코드를 배포할때,
개발 환경이 동작환경과 달라지는 문제점이 생길 수 있다.
그럴때는 아래의 코드를 활용하면 된다.
import torch
import os
import numpy as np
import random
def initialization(seed = 0):
np.random.seed(seed)
random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed) # multi-GPU
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
os.environ['PYTHONHASHSEED'] = str(seed)
#use
initialization(seed = 0)
추가적으로 multi GPU를 사용하는 경우 아래의 함수를 반드시 사용해 주어야
항상 같은 실험 결과를 얻을 수 있다.
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,
)
위 코드에서
"torch.backends.cudnn.deterministic = True" 부분을 사용할 경우 학습 속도가 2배 이상 늘어나기 때문에 모델 개발과정에서는 False로 두고 하는 것을 추천한다.