본문 바로가기
[GPUaaS]/GPUmgt

[분산 학습] 부동소수점 연산 !!

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

 

 

 

 

GPU / 분산학습 / HPC 환경에서 아주 중요한 개념


1️⃣ 부동소수점이란?

우리가 아는 숫자:

 
 
10
3.14
0.001
123456.789
 

이처럼 소수점이 있는 숫자를 컴퓨터에서는
👉 부동소수점(Floating Point) 방식으로 저장합니다.

왜 "부동(浮動)" 이냐?

소수점 위치가 고정되지 않고 "떠서 움직인다"

 

 


2️⃣ 고정소수점 vs 부동소수점

📌 고정소수점 (Fixed Point)

소수점 위치가 고정

 
 
1234 → 12.34 로 약속
 

장점: 계산 빠름
단점: 표현 범위 좁음


📌 부동소수점 (Floating Point)

과학적 표기법처럼 표현

 
 
3.14 = 3.14 × 10⁰
314 = 3.14 × 10²
0.0314 = 3.14 × 10⁻²
 

컴퓨터는 이걸 2진수로 저장합니다.

 

 


3️⃣ 컴퓨터는 어떻게 저장하나? (IEEE 754)

대부분 시스템은 IEEE 754 규격을 사용합니다.

구조는 이렇게 생겼습니다:

 
 
[부호][지수][가수]
 

예: float32 (32비트)

구성 비트 수
부호 1bit
지수 8bit
가수 23bit

총 32비트

 

 


4️⃣ 왜 문제가 생기나?

핵심 이유:

컴퓨터는 10진수를 정확히 표현 못하는 경우가 많다

예:

 
 
0.1 + 0.2
 

결과:

 
 
0.30000000000000004
 

왜?

0.1 은 2진수로 무한소수라서
정확히 저장 못함 → 근사값 저장 → 오차 발생

 

 


5️⃣ 부동소수점 연산이란?

간단히 말하면:

컴퓨터가 소수 숫자를 더하고, 빼고, 곱하고, 나누는 연산

예:

  • 1.5 + 2.3
  • 3.14 × 9.81
  • 딥러닝 행렬곱
  • GPU Tensor 계산

모두 부동소수점 연산입니다.

 

 


6️⃣ 왜 GPU에서 중요하냐?

딥러닝은 거의 전부:

  • FP32
  • FP16
  • BF16
  • TF32

연산입니다.

예를 들어
NVIDIA GPU는
초당 수천조 번의 부동소수점 연산(FLOPS)을 합니다.

 

 


7️⃣ FP32 vs FP16 차이

타입 정밀도 속도
FP32 정확 느림
FP16 약간 오차 빠름
BF16 지수 넓음 학습 안정

 

 


8️⃣ 분산학습에서 왜 중요?

AllReduce에서

 
 
GPU0 값 + GPU1 값 + GPU2 값 ...
 

합칠 때

  • 연산 순서 다르면
  • 반올림 위치 달라지면
  • GPU 아키텍처 다르면

👉 미세한 오차 발생

이게 누적되면:

  • Loss mismatch
  • AllReduce mismatch
  • 모델 divergence

발생 가능

 

 


9️⃣ 초보자용 핵심 요약

✔ 컴퓨터는 소수를 완벽하게 저장 못함
✔ 그래서 계산할 때 작은 오차가 생김
✔ GPU는 이 연산을 엄청 많이 함
✔ 분산학습에서는 이 오차가 누적될 수 있음

 

 


🔥 현실 예시 (GPU 클러스터)

64노드에서

 
 
1e-7 오차 × 수십억 번
 

→ 모델 weight 달라짐
→ 재현성 깨짐

그래서:

  • deterministic 옵션
  • FP32 유지
  • AllReduce 검증

하는 겁니다.

 

 

 

반응형

댓글