오류해결(11)
-
pytorch에서 loss 값이 nan이 나올 때!
이번에 준비하고 있는 논문을 위해서 아이디어가 나올 때마다 실험을 하고 있는데, 이번에 어째서인지 loss가 잘 떨어지다가 중간에 nan 값이 되어버리는 문제가 발생하였다... 처음부터 튀어버리면 loss 함수 자체에서 문제가 발생했다고 생각했겠지만 감소 중에 nan 값으로 바뀐 것이기 때문에 원인 파악이 어려웠다. 이럴 땐 뭐다? 바로 구글링을 하는 것이다.*요즘엔 ChatGPT도 하나의 방법! 그래서 찾아보니,torch.autograd.set_detect_anomaly(True) 자동으로 nan값이 나오는 곳을 찾아주는 명령어가 있지 않았겠는가! 이 명령어를 써놓기만 해도 nan값이 출력되는 순간 어느 backward에서 발생한건지 예쁘게 출력해준다! 내 경우에는 Pow와 관련있었는데, 최근 추가했던..
2024.10.22 -
cannot import name 'print_log' from 'mmcv' 오류 해결
mmcv 버전 문제 때문에 print_log 함수를 가지고 있지 않은 것이 문제인데, 이는 mmengine에 포함되어있을 것이다. 따라서 해당 오류가 일어난 파일을 찾아가서 from mmcv를 from mmengine로 바꿔주면 오류가 해결된다. 나 같은 경우는, mmcv/parallel/distributed.py 에서 에러가 났었다.
2023.06.29 -
RuntimeError: DataLoader worker (pid(s) *, *, *) exited unexpectedly 오류 해결
Problem 파이토치를 사용하다 보면 데이터를 불러오는 데 있어서 위와 같은 에러가 나올 때가 있다. 나도 몇 번 접해본 적이 있는데 이번에 글을 한 번 써보기로 했다. Simple Solution 먼저 기본적인 해결법은 간단하다. 파이토치의 DataLoader 파라메터 중 num_workers를 0으로 setting 해주면 해결된다. Second Problem 하지만 내 경우는 mmsegmentation 모듈을 사용하고 있었는데, 내부적으로 persistent_workers를 사용하고 있어서 무조건 num_workers 1이상으로 사용하라는 에러가 다시 나타났다 ㅠㅠ. Solution mmseg.datasets.dataloader 모듈이 workers_per_gpu라는 파라메터를 가지고 있는데 이를 ..
2023.06.29 -
[오류해결] torch.cuda.current_device()가 항상 0으로 잡히는 경우
이번에 새로운 서버를 사용하게 되었는데 이전과 다르게 gpu id를 설정해줄 필요가 있었다. 그래서 평소와 같이 os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "1" 로 devices를 제한해주는 방법을 사용했는데 어떤 이유에서인지 어떠한 gpu 번호를 할당하든 0번 gpu만 사용하는 현상이 발생하였다. ㅠㅠ main문으로 가져오기도 하고 별 시도를 해보았는데 계속 0번 gpu만 할당... 여러 서칭을 통해 결국 해결법을 발견하였으니....어이가 없었다. ㅎㅎ.. 그것은 위 구문을 무조건 import torch하기 전에 써야한다는 것. 나는 이러한 사실을 몰랐기에 그냥 모든 import 후에 위 구문을..
2023.01.10 -
[오류해결]RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method
Multi-gpu를 사용하려고 할 때 나올 수 있는 오류문이다. 누구는 나오고 누구는 안나오는지 정확한 이유는 모르겠지만 다음과 같은 방법으로 해결이 가능하다. torch.multiprocessing.set_start_method('spawn') 위 문구를 집어넣으면 끝! 매우 간단하지만 필자는 위 방법으로 해결이 되었다. ㅎㅎ 다들 연구든 개발이든 화이팅이다!!
2022.03.23