반응형

GPU / 분산학습 / HPC 환경에서 아주 중요한 개념
1️⃣ 부동소수점이란?
우리가 아는 숫자:
10
3.14
0.001
123456.789
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⁻²
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 검증
하는 겁니다.
반응형
'[GPUaaS] > GPUmgt' 카테고리의 다른 글
| [마운트] /etc/fstab vs /etc/rc.local 차이 !! (0) | 2026.02.27 |
|---|---|
| [vi편집기/less] 대용량(GB급) 로그 실무 분석 기준 !! (0) | 2026.02.22 |
| [분산 학습] Tensor 란!! (0) | 2026.02.21 |
| [분산 학습] AllReduce & AllReduce mismatch 란 !! (0) | 2026.02.21 |
| [Syslog] mlx5_core ... Detected insufficient power on the PCIe slot (27W) (0) | 2026.02.21 |
| [GPU서버 HW문제] NaN 발생 가능성 !! (0) | 2026.02.21 |
| [분산 학습] 운영 관점에서 NaN vs Inf 차이 !! (0) | 2026.02.21 |
| [분산 학습] NaN 반드시 알아야 하는 개념 !! (0) | 2026.02.21 |
댓글