pytorch resume 시 error

2023. 11. 7. 13:56GPU

ssd network 를 중간 weight (iteration) 에서 이어서 학습하려고 하니 error가 발생했다.

 

RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:1

 

찾아보니 해당 에러는 dataparallel을 사용할 시 다중 gpu를 사용하면서 load된 weight가 module을 포함하여 발생하는 error 였다.

가장 간단한 해결방법은 module을 제거하고 다시 학습시키는건데 (save시 net.module.save~ 로 save) 

이미 학습된걸 다시 학습시키는 건 차선책이라고 생각하여 최대한 이미 학습된 결과를 활용시키기 위한 노력을 해보았다.

 

1. erorr message를 보면 GPU 0이 main이 아닌 1이 잡혀서 생기는 error로 생각 

>>> DataParallel 에 device id로 순서 변경 (google search시 제일처음 나오는 답변 적용) 했지만, error message의 numbering만 바껴서 계속 error 발생

 

2. single GPU 사용

그냥 single gpu로 id fix해서 사용했지만, 추가 error발생 "RuntimeError: Error(s) in loading state_dict for SSD

>>>  위의 dataparallel과 이어지는 error... 

 

다른 방법은 없는건지 ㅠㅠ 

다시 학습시키는게 빠를지도 

 

--------------------------------------------------------------------------

해당 코드를 사용하는 다른 사람에게 조언을 구해서 해결한내용 ↓ ↓ ↓ ↓

 

3. pytorch, torchvision version check

 내가 사용하는 버전이 pytorch 1.1.0 torchvision 0.3.0 이었나 그랬는데, 코드 권장 버전이 pytorch 1.2.0 , torchvision 0.4.0 이어서 upgrade하여 버전 맞추고 진행했지만 error (아마 학습 처음부터 맞췄어야할듯?)

+) 해당 코드 동일하게 사용하는 사람은 위 버전에서 resume 문제없이 진행됨을 확인

 

4. single GPU 위에서 fix한 방법은 코드 내에서 device=[0]  이런식으로 fix했던 건데, 코드 실행 시 CUDA_VISIBLE_DEVICES=0 이런식으로 주니깐 single GPU동작 문제없이 되는 것을 확인

 

[결론]

- 코드 권장 library 버전을 맞추자!

- multi-gpu 사용시 module 을 제거하고 save하자!

 

12시간 ㅂㅂㅇ