Pytorch reproducibility

Evo·2022년 7월 12일
0

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로 두고 하는 것을 추천한다.

profile
딥러닝 활용 연구

0개의 댓글