딥러닝 연구에서 도출된 결과를 다시 실험하거나, 다른 사용자의 환경에서 동일하게 출력되는 것은 중요한 요소이다.
이를 재현성(Reproducibility)
라고 하는데 Pytorch나 Tensorflow와 같은 딥러닝 프레임워크에서는 Seed관련 메소드를 통해 재현성을 관리한다.
또한, 딥러닝 프레임워크 내에 사용되는 numpy, random과 같은 라이브러리 Seed 또한 고정해주어야한다.
매번 정의하려면 귀찮기 때문에 하나의 함수에 정의하여서 Utils.py와 같은 파이썬 파일에 두면 편리할 것이다.
import torch
import numpy as np
import random
import os
# mac OS 대응 추가
def seed_everything_forMac(num_seed: int):
random.seed(num_seed)
os.environ['PYTHONHASHSEED'] = str(num_seed)
np.random.seed(num_seed)
torch.manual_seed(num_seed)
torch.cuda.manual_seed(num_seed)
torch.cuda.manual_seed_all(num_seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
torch.mps.manual_seed(num_seed) # 맥 os에서는 이 코드가 필요함
seed_everything_forMac(608)
Mac도 병행하여 사용하다보니 MacOS GPU에서 사용하는 seed 메소드도 추가하였다.
해당 함수를 정의하여 실행하면, Pytorch 실험의 randomness를 제어할 수 있을 것이다.