최악의 오류
1. 에러
•
GPU가 뻗었다.
•
모든 파라메터가 N/A 를 뿜으며 죽어 버렸다.
Output
2021-12-29 08:58:52,565-rk0-train.py#448:[ 3] 330/6800 | loss 1.3529 | mIoU 0.2955/['0.886', '0.000', '0.000'] | mAcc 0.3333/['1.000', '0.000', '0.000'] | LR ['0.010', '0.096', '0.096']
2021-12-29 08:59:48,309-rk0-train.py#596:[ 3] Val_Teacher mIoU 0.2966/['0.890', '0.000', '0.000'] | mAcc 0.3333/['1.000', '0.000', '0.000']
2021-12-29 08:59:48,309-rk0-train.py#597:[ 3] Val_Student mIoU 0.2966/['0.890', '0.000', '0.000'] | mAcc 0.3333/['1.000', '0.000', '0.000']
2021-12-29 08:59:49,083-rk0-train.py#234:epoch [ 4] sample_rate_target_class_conf [0.47213766 0.52786237] | criterion_per_class [0.5887482 0.44511193 0.26645374] | sample_rate_per_class_conf [0.5606351 0.75644594 1. ]
2021-12-29 09:00:15,121-rk0-train.py#448:[ 4] 360/6800 | loss 1.2346 | mIoU 0.3019/['0.906', '0.000', '0.000'] | mAcc 0.3333/['1.000', '0.000', '0.000'] | LR ['0.010', '0.095', '0.095']
Traceback (most recent call last):
File "../../train.py", line 610, in <module>
main()
File "../../train.py", line 154, in main
labeled_epoch, class_criterion, cutmix_bank = train(model, optimizer, lr_scheduler, criterion, trainloader_sup, epoch,
File "../../train.py", line 405, in train
loss.backward()
File "/usr/local/lib/python3.8/dist-packages/torch/tensor.py", line 221, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph)
File "/usr/local/lib/python3.8/dist-packages/torch/autograd/__init__.py", line 130, in backward
Variable._execution_engine.run_backward(
RuntimeError: CUDA error: unspecified launch failure
Exception in thread StatsThr:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.8/dist-packages/wandb/sdk/internal/stats.py", line 133, in _thread_body
stats = self.stats()
File "/usr/local/lib/python3.8/dist-packages/wandb/sdk/internal/stats.py", line 179, in stats
handle = pynvml.nvmlDeviceGetHandleByIndex(i)
File "/usr/local/lib/python3.8/dist-packages/wandb/vendor/pynvml/pynvml.py", line 819, in nvmlDeviceGetHandleByIndex
_nvmlCheckReturn(ret)
File "/usr/local/lib/python3.8/dist-packages/wandb/vendor/pynvml/pynvml.py", line 310, in _nvmlCheckReturn
raise NVMLError(ret)
wandb.vendor.pynvml.pynvml.NVMLError_GpuIsLost: GPU is lost
Exception in thread StatsThr:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.8/dist-packages/wandb/sdk/internal/stats.py", line 133, in _thread_body
stats = self.stats()
File "/usr/local/lib/python3.8/dist-packages/wandb/sdk/internal/stats.py", line 179, in stats
handle = pynvml.nvmlDeviceGetHandleByIndex(i)
File "/usr/local/lib/python3.8/dist-packages/wandb/vendor/pynvml/pynvml.py", line 819, in nvmlDeviceGetHandleByIndex
_nvmlCheckReturn(ret)
File "/usr/local/lib/python3.8/dist-packages/wandb/vendor/pynvml/pynvml.py", line 310, in _nvmlCheckReturn
raise NVMLError(ret)
wandb.vendor.pynvml.pynvml.NVMLError_GpuIsLost: GPU is lost
Shell
복사
•
GPU is lost.
•
이유도 나와있지 않다. 그냥 GPU가 끊어져버린다.
•
이러면 무조건 재부팅을 해야한다.
•
DistributedDataParallel에 multiThreading까지 더해져서 이런일이 생기는 듯 하다.
뭘까?
많은 생각이 스쳐간다.
gpu의 모델이 서로 달라서?
gpu 전원의 과부하?
적절하지 못한 memory 배분?
통신의 문제?
연결불량?
도대체 뭘까?
Possible Solutions
•
label의 num_class 와 model 출력단의 채널 수가 같아야 한다는 의견
•
target이 0과 1사이의 값을 가져야 한다는 의견
•
GPU 온도나 power 이슈라는 의견 (과도한 utilization? 부족한 전원공급?)
•
마찬가지로 power 부족이라는 의견
본격적으로 원인파악을 해보자.
아래 명령어를 실행시키면 그래픽카드에 관련된 모든 로그가 담긴 파일이 생성된다.
nvidia-bug-reports.sh
gzip -d nvidia-bug-reports.log.gz
Shell
복사
생성된 nvidia-bug-reports.log 파일을 보자.
엄청나게 긴 외계어 로그파일이 보여지고...
그 중에서 직접적인 원인을 찾아본다.
...
12월 30 04:56:13 b3 kernel: NVRM: A GPU crash dump has been created. If possible, please run
NVRM: nvidia-bug-report.sh as root to collect this data before
NVRM: the NVIDIA kernel module is unloaded.
12월 30 04:56:13 b3 kernel: NVRM: GPU at PCI:0000:01:00: GPU-b2625df5-6c09-5dd0-ce56-b91ffc31cda4
12월 30 04:56:13 b3 kernel: NVRM: GPU at PCI:0000:01:00: GPU-b2625df5-6c09-5dd0-ce56-b91ffc31cda4
12월 30 04:56:13 b3 kernel: NVRM: GPU Board Serial Number: 1320220059181
12월 30 04:56:13 b3 kernel: NVRM: GPU Board Serial Number: 1320220059181
12월 30 04:56:13 b3 kernel: NVRM: Xid (PCI:0000:01:00): 79, pid=0, GPU has fallen off the bus.
12월 30 04:56:13 b3 kernel: NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
12월 30 04:56:13 b3 kernel: NVRM: Xid (PCI:0000:01:00): 79, pid=0, GPU has fallen off the bus.
12월 30 04:56:13 b3 kernel: NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
12월 30 04:56:13 b3 kernel: NVRM: GPU 0000:01:00.0: GPU is on Board 1320220059181.
12월 30 04:56:13 b3 kernel: NVRM: GPU 0000:01:00.0: GPU is on Board 1320220059181.
12월 30 04:56:45 b3 nvidia-persistenced[860]: Received signal 15
12월 30 04:56:45 b3 nvidia-persistenced[860]: Socket closed.
12월 30 04:56:45 b3 nvidia-persistenced[860]: device 0000:01:00.0 - persistence mode disabled.
12월 30 04:56:45 b3 nvidia-persistenced[860]: device 0000:01:00.0 - NUMA memory offlined.
12월 30 04:56:45 b3 nvidia-persistenced[860]: device 0000:02:00.0 - persistence mode disabled.
12월 30 04:56:45 b3 nvidia-persistenced[860]: device 0000:02:00.0 - NUMA memory offlined.
12월 30 04:56:45 b3 nvidia-persistenced[860]: PID file unlocked.
12월 30 04:56:45 b3 nvidia-persistenced[860]: PID file closed.
12월 30 04:56:45 b3 nvidia-persistenced[860]: The daemon no longer has permission to remove its runtime data directory /var/run/nvidia-persistenced
12월 30 04:56:45 b3 nvidia-persistenced[860]: Shutdown (860)
...
Shell
복사
•
Xid 메시지는 GPU 에러가 발생할 때 생성되는 에러코드이다.
•
Xid 79라는 코드가 눈에 띈다.
•
레퍼런스 챙기고..
하드웨어 혹은 파워문제라고 말한다.
결론
에러가 나는 순간의 코드는 다음과 같다.
•
데이터로더와 모델을 모두 준비한 후,
•
본격적으로 forward를 할 때 바로 shutdown된다.
•
이는 두개의 gpu 파워가 모두 최고로 치솟자마자 셧다운 되는 것으로 보인다.
일단 파워가 부족한 것으로 이해하자.
원인을 알았으니.. 이제 파워를 바꾸어 달아봐야겠다.