반응형

📌 1. 먼저, Epoch부터 정확히 이해하자
✅ Epoch란?
👉 전체 데이터 1번 학습 = 1 Epoch
✅ 쉽게 비유
- 데이터 = 문제집 1권
- 모델 = 학생
👉 Epoch 1
→ 문제집 1번 풂
👉 Epoch 35
→ 문제집 35번 반복 학습 중
✅ 실제 로그 해석
Epoch 35: 64%|██████▍ | 4711/7305 ...
👉 의미:
- 35번째 학습 반복 중
- 전체 batch 중 64% 진행
- 아직 학습 진행 중
📌 2. 왜 하필 Epoch 35에서 문제가 터질까?
👉 핵심 포인트:
"오래 돌다가 터지는 문제 = 인프라 문제 가능성 높음"
✅ 초반 (Epoch 1~5)
- 코드 문제
- 데이터 문제
👉 여기서 터짐
✅ 중후반 (Epoch 20~50)
👉 여기서 터지면:
99% 인프라 / GPU / 네트워크 문제
📌 3. NCCL Timeout이란?
✅ NCCL이 뭐냐?
👉 GPU끼리 통신하는 라이브러리
- AllReduce
- Broadcast
- Gradient Sync
👉 분산 학습 필수
✅ NCCL Timeout 의미
GPU 간 통신이 일정 시간 안에 끝나지 않음
👉 쉽게 말하면:
"야 응답해라"
"..."
→ Timeout 발생
📌 4. 실제 장애 발생 구조 (중요 ⭐)
분산 학습 구조:
GPU0 ──┐
GPU1 ──┼── AllReduce (Gradient Sync)
GPU2 ──┤
GPU3 ──┘
GPU1 ──┼── AllReduce (Gradient Sync)
GPU2 ──┤
GPU3 ──┘
👉 하나라도 느리면:
전체 멈춤 → NCCL Timeout
📌 5. Epoch 35에서 터지는 이유 (핵심 원인 5가지)
🔴 1. GPU 문제 (Xid / ECC)
특징
- 특정 GPU만 느려짐 / 멈춤
- 나머지 GPU 기다리다 timeout
로그
NVRM: Xid 31, 43, 94
🔴 2. IB / 네트워크 문제
특징
- InfiniBand 끊김
- bandwidth 저하
로그
mlx5: port error
Got async event
Got async event
🔴 3. NCCL Deadlock
특징
- 특정 rank에서 멈춤
- sync 안됨
🔴 4. DataLoader 병목
특징
- CPU / I/O 느림
- GPU가 데이터 기다림
👉 결과:
GPU utilization ↓ → 통신 타이밍 깨짐
🔴 5. 메모리 누수 (장시간 학습)
특징
- Epoch 진행할수록 느려짐
- 결국 hang 발생
📌 6. 실무에서 보는 "냄새" (중요)
👉 이런 패턴이면 100% 인프라 문제
- Epoch 1~30 정상
- Epoch 35에서 멈춤
- loss 정상 감소하다 멈춤
👉 결론:
코드 문제 ❌
GPU / 네트워크 문제 ⭕
GPU / 네트워크 문제 ⭕
📌 7. 실제 분석 방법 (GPU 엔지니어 기준)
✅ STEP 1. NCCL 로그 확인
export NCCL_DEBUG=INFO
export NCCL_DEBUG_SUBSYS=ALL
export NCCL_DEBUG_SUBSYS=ALL
확인 포인트:
- 어느 rank에서 멈췄는지
✅ STEP 2. GPU 상태 확인
nvidia-smi
nvidia-smi -q -d ECC
nvidia-smi -q -d ECC
✅ STEP 3. Xid 에러 확인
dmesg -T | grep -i xid
✅ STEP 4. IB 상태 확인
ibstat
ibv_devinfo
ibv_devinfo
✅ STEP 5. 특정 노드 문제 찾기
srun hostname
👉 문제 노드 찾기 핵심
📌 8. 해결 방법 (현실적인 순서)
✅ 1순위: 문제 노드 제거
scontrol update NodeName=<node> State=DRAIN
✅ 2순위: NCCL 환경 튜닝
export NCCL_IB_DISABLE=0
export NCCL_SOCKET_IFNAME=eth0
export NCCL_P2P_LEVEL=SYS
export NCCL_SOCKET_IFNAME=eth0
export NCCL_P2P_LEVEL=SYS
✅ 3순위: Timeout 증가
export NCCL_BLOCKING_WAIT=1
export NCCL_TIMEOUT=600
export NCCL_TIMEOUT=600
✅ 4순위: GPU 상태 리셋
nvidia-smi --gpu-reset
✅ 5순위: IB 리셋
systemctl restart openibd
📌 9. 진짜 핵심 정리 (중요 ⭐)
👉 딱 한줄로 정리하면:
Epoch 35에서 NCCL timeout = 장시간 학습 중 특정 GPU/노드가 죽어서 전체 sync 깨진 것
📌 10. 실무 팁 (이건 꼭 기억해라)
🔥 GPU 엔지니어 기준 핵심
✔ 항상 의심 순서:
- GPU (Xid)
- IB (네트워크)
- 특정 노드
- NCCL 설정
🔥 경험적으로 가장 많았던 원인
👉 실제 현업 기준:
- 60% → GPU 불량 / ECC
- 30% → IB 네트워크 문제
- 10% → 코드 / DataLoader
🎯 마무리
👉 너 상황 기준 해석:
- Epoch 35까지 정상
- 중간에 멈춤
👉 결론:
GPU or 네트워크 문제 거의 확정
반응형
'[GPUaaS] > PyTorch' 카테고리의 다른 글
| [멀티 GPU 노드 학습] PyTorchJob 방식으로 분산학습 !! (0) | 2026.03.15 |
|---|---|
| PyTorch란 무엇인가? (0) | 2026.03.05 |
댓글