본문 바로가기

DeepLearning/파이토치(pytorch)

[torch] DDP 모드에서 훈련된 모델 불러오기. def load_DDP_model(path,model_frame): ''' path : /path/to/DDP-trained-model.pt model_frame : model structure ''' state_dict=torch.load(path) from collections import OrderedDict new_state_dict = OrderedDict() for k, v in state_dict.items(): name = k[7:] # remove 'module.' of DataParallel/DistributedDataParallel new_state_dict[name] = v model_frame.load_state_dict(new_state_dict) return model_fram.. 더보기
[torch] multi-gpu (DDP)로 사용하기 튜토리얼 아래의 코드는 간단하게 autoencoder를 만드는 과정을 적은 것이다. mp.spawn해봤자 global에 있는 model에는 영향을 안준다. 따라서, 학습 중간에 훈련된 trained-model을 torch.save로저장해야한다. 다른 것으로는 과거의 loss변동을 이용하는 옵티마이저들 (ex. ADAM)같은 것들도 저장해서 불러와야한다고 한다. SGD는 해당사항이 없다. 이 부분에 대해서는 테스트가 필요할 것 같다. 다만, 나의 경우는 데이터가 너무 커서 컴퓨터 메모리에 모두 못 올리는 상황인 것이라 문제가 없지 않을까 한다. 현재 내 상황은 총 데이터는 5TB이고 메모리에 모두 못 올리니 50gb 정도 불러온 후에 이를 배치로 나눠서 훈련하고 있는 상황이다. 그리고 각 gpu에서 돌던 모델들이 .. 더보기
[torch] cross-validation을 위한 기능 만들기 (multi-gpu) 정리가 안된 단계이지만 DistributedDataParallel 기능을 잘 활용하면 cross-validation을 수행할 수 있을 것으로 보인다. 구체적으로 각 gpu만큼 k-fold cv가 가능하다. 다만, 각 gpu에서 연산된 loss값 같은 것은 pickle로 내보내게 한 후에 하나로 합쳐야할 것으로 보인다. 테스트가 필요한 사항은 아래와 같다. DDP를 통해 각 gpu에서 진행되던 모델이 학습되는 것이 연동된다면 정확한 k-fold는 아니게 된다. import os import sys import tempfile import torch import torch.distributed as dist import torch.nn as nn import torch.optim as optim import.. 더보기
파이토치 시드 (seed)값 고정법 import torch import numpy as np import random import os def seed_everything(seed=42): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = False torch.use_deterministic_algorithms(True) os.environ["PYTHONHASHSEED"] = str(seed) os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0" 파이토치 시드 넘버를 고정해야 재현성 있는 결과가 나옴. 다만, 시드를 고정하면 훈련속도가 떨어.. 더보기