학습을 수행하다보면 이전 학습 결과 재현이 필요한 경우가 있다.
일반 적인 경우는 다양한 난수로 인해 random 값이 달라지기 때문에 재현이 불가능하다.
그래서 실험을 위한 학습에서는 난수의 시드를 고정 할 필요가 있다.
그러나 은근히 이게 고정하게 많아서 이참에 정리.
1. pytorch seed 고정
- 파이토치 기본 난수에 영향을 줌. 초기값 등에 영향을 줌
- torch.manual_seed(val)
2. CUDA seed 고정
- GPU 에서 동작하는 난수에 영향을 줌
- torch.cuda.manual_seed(val)
- torch.cuda.manual_seed_all(val)
3. numpy seed 고정
- numpy 난수에 영향을 줌.
- Albumentations 의 random도 numpy seed에 영향을 받(는것으로 알고있는데 확인필요)
- np.random.seed(val)
4. python random seed 고정
- 파이썬 기본 난수에 영향을 줌
- random.seed(val)
5. cudnn deterministic 옵션
- CUDA 에서 conv 등의 일부 연산은 deterministic 하여 동일입력, 시드에서도 다른 결과 발생 가능
- 이 옵션을 True로 설정하면 더 느릴수 있지만 결과값은 결정적
- torch.backends.cudnn.deterministic = True
- 이 옵션을 False로 설정하면 런타임 연산 최적화를 수행하지 않고 일관된 연산 수행
- torch.backends.cudnn.benchmark = False
[ 정리 ]
import torch
import numpy as np
import random
def set_seed(val):
torch.manual_seed(val)
torch.cuda.manual_seed(val)
torch.cuda.manual_seed_all(val) # 멀티 GPU를 사용하는 경우
np.random.seed(val)
random.seed(val)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
'전공관련 > Deep Learning' 카테고리의 다른 글
[Pytorch] Sequential 모듈 내 레이어에 접근하자 (0) | 2023.09.06 |
---|---|
[Pytorch] No audio I/O backend is available. 에러를 해결하자. (0) | 2023.08.02 |
[Pytorch] DDP 환경에서 load_state_dict 사용시 OOM 발생 상황을 해결하자 (0) | 2023.06.08 |
[Pytorch] Boolean value of Tensor with more than one value is ambiguous 에러를 해결하자. (0) | 2023.06.07 |
[MXNet] 데이터 리스트를 만들고 rec 파일로 만들어 보자 (0) | 2022.04.01 |