본문 바로가기
[GPUaaS]/GPUmgt

[분산 학습] 운영 관점에서 NaN vs Inf 차이 !!

by METAVERSE STORY 2026. 2. 21.
반응형

 

 

 

 

 

1️⃣ 기본 개념 차이

구분 NaN Inf
의미 Not a Number Infinity (무한대)
계산이 정의되지 않음 값이 너무 커서 무한대로 발산
비교 연산 자기 자신과도 같지 않음 크기 비교 가능

 

 

2️⃣ 언제 발생하나?

🔥 Inf 발생 상황

값이 너무 커질 때

 
 
1e308 * 1e308
 

또는

 
 
1 / 0
 

결과:

 
 
inf
 

즉,

💥 값이 “폭발”하면 Inf

 

 


🔥 NaN 발생 상황

정의되지 않은 연산

 
 
0 / 0
inf - inf
sqrt(-1)  # 실수 범위
log(-5)
 

결과:

 
 
nan
 

즉,

❌ 수학적으로 정의되지 않으면 NaN

 

 


3️⃣ 딥러닝 학습 흐름에서의 차이

실제로는 이렇게 진행됩니다

 
 
gradient 증가
→ weight 증가
→ 값 overflow
→ inf 발생
→ 연산 진행
→ inf - inf
→ nan 발생
 

📌 중요 포인트:

대부분의 NaN은 먼저 Inf가 발생한 후에 나온다.

 

 


4️⃣ 연산 특성 차이 (중요)

✅ Inf 특징

 
 
inf + 1 = inf
inf * 2 = inf
 

값이 유지됩니다.


❌ NaN 특징

 
 
nan + 1 = nan
nan * 100 = nan
 

전염성이 매우 강합니다.

그리고:

 
 
nan == nan False
 

자기 자신과도 같지 않습니다.

 

 


5️⃣ 분산 학습에서의 위험도

 

🔴 Inf

  • 한 rank에서 발생
  • AllReduce로 전달
  • 다른 rank에도 전파

하지만 디버깅이 비교적 쉬움
(grad norm에서 감지 가능)


🔴 NaN

  • 한 번 발생하면
  • 모든 계산 오염
  • 통신 스턱 유발 가능
  • watchdog 발생 가능

👉 운영 관점에서 NaN이 더 치명적

 

 


6️⃣ PyTorch에서 체크 방법

(프레임워크 예: PyTorch)

 
 
torch.isinf(tensor)
torch.isnan(tensor)
 

학습 중 안전 체크:

 
 
if torch.isnan(loss) or torch.isinf(loss):
    print("Numerical issue detected")
 

 

 


7️⃣ 발생 원인 비교

원인 Inf NaN
LR 과대 매우 흔함 후속 발생
Gradient Explosion 먼저 Inf 이후 NaN
AMP overflow 흔함 overflow 후 발생
잘못된 수식 드묾 매우 흔함
데이터 문제 가능 매우 흔함

 

 


8️⃣ 운영 실전 구분법

🔍 로그 패턴

Inf 단계:

 
 
loss: 2.1
loss: 5.4
loss: 4000
loss: 2.3e38
loss: inf
 

 

NaN 단계:

 
 
loss: inf
loss: nan
loss: nan
 

 

 

 


9️⃣ 왜 Inf보다 NaN이 더 무섭나?

Inf는 "값이 너무 크다"는 신호

NaN은 "계산 체계가 무너졌다"는 신호

특히:

  • Optimizer 내부 상태도 NaN 오염
  • Adam의 moving average 파괴
  • 복구 불가능

 

 


🔟 초보자용 핵심 요약

💥 Inf = 숫자가 너무 커서 무한대
❌ NaN = 수학적으로 정의되지 않음
🔥 실제 학습에서는 “Inf → NaN” 순서로 진행되는 경우가 대부분

 

 

 

반응형

댓글