AI Development/PyTorch

[Pytorch] 장치간 모델 불러오기 (GPU / CPU)

꾸준희 2020. 1. 9. 11:22
728x90
반응형

 

 

1. GPU에서 모델을 저장하고 CPU에서 불러오기

2. GPU에서 저장하고 GPU에서 불러오기 

3. CPU에서 모델을 저장하고 GPU에서 불러오기

 

 

 

 

 

1. GPU에서 모델을 저장하고 CPU에서 불러오기

 

GPU 모델 저장

torch.save(model.state_dict(), PATH)

 

저장한 모델을 CPU에서 로드

device = torch.device('cpu')
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location=device))

위와 같이 GPU에서 학습한 모델을 CPU에서 불러올 때는 torch.load() 함수의 map_location 인자에 'cpu' 값을 전달함

이 경우에는 Tensor에 저장된 내용들은 map_location 인자를 사용하여 CPU 장치에 동적으로 재배치됨 

 

 

 

 

 

 

2. GPU에서 모델을 저장하고 GPU에서 불러오기 

 

GPU모델 저장 (위와 동일)

torch.save(model.state_dict(), PATH)

 

저장한 모델을 GPU에서 로드

device = torch.device("cuda")
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(device)
# 모델에서 사용하는 input Tensor들은 input = input.to(device) 을 호출해야 합니다.

GPU에서 학습된 모델을 GPU에서 불러올 때에는

초기화된 model에 model.to(torch.device('cuda')) 를 호출하여 CUDA 최적화된 모델로 변환해야함

 

또한, 모델에 데이터를 제공하는 모든 입력에 .to(torch.device('cuda')) 함수를 호출해야함

 

my_tensor.to(device) 를 호출하면 GPU에 my_tensor의 복사본을 반환하기 때문에 Tensor를 직접 덮어써야함

my_tensor = my_tensor.to(torch.device('cuda'))

 

 

 

 

 

 

3. CPU에서 모델을 저장하고 GPU에서 불러오기

 

CPU모델 저장 (위와 동일)

torch.save(model.state_dict(), PATH)

 

저장한 모델을 GPU에서 로드

device = torch.device("cuda")
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location="cuda:0"))  # 사용할 GPU 장치 번호를 선택합니다.
model.to(device)
# 모델에서 사용하는 input Tensor들은 input = input.to(device) 을 호출해야 합니다.

CPU에서 학습한 모델을 GPU에서 불러올 때는 torch.load() 함수의 map_location 인자에 cuda:device_id 을 설정하면 모델이 해당 GPU 장치에 로드됨

 

다음으로 model.to(torch.device('cuda')) 을 호출하여 모델의 매개변수 Tensor들을 CUDA Tensor들로 변환해야 함

 

마지막으로 모든 모델 입력에 .to(torch.device('cuda')) 을 사용하여 CUDA 최적화된 모델을 위한 데이터로 만들어야 함

 

my_tensor.to(device) 를 호출하면 GPU에 my_tensor 의 복사본을 반환하며, 이 동작은 my_tensor 를 덮어쓰지 않기 때문에, Tensor를 직접 덮어써야 함

my_tensor = my_tensor.to(torch.device('cuda')) .

 

 

 

 

 

 

 

 

 

만일 map_location 을 설정하지 않는 경우 아래와 같은 에러를 맞이한다.

 

RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.

 

 

 

 

 

 

참고자료 1 : 

https://tutorials.pytorch.kr/beginner/saving_loading_models.html#device

 

모델 저장하기 & 불러오기 — PyTorch Tutorials 1.3.1 documentation

Note Click here to download the full example code 모델 저장하기 & 불러오기 Author: Matthew Inkawhich번역: 박정환 이 문서에서는 PyTorch 모델을 저장하고 불러오는 다양한 방법을 제공합니다. 이 문서 전체를 다 읽는 것도 좋은 방법이지만, 필요한 사용 예의 코드만 참고하는 것도 고려해보세요. 모델을 저장하거나 불러올 때는 3가지의 핵심 함수와 익숙해질 필요가 있습니다: torch.save:

tutorials.pytorch.kr

 

 

참고자료 2 :

https://github.com/computationalmedia/semstyle/issues/3

불러오는 중입니다...

 

728x90
반응형
1 2 3 4 5