dev.Log
FP16과 BF16의 차이 본문
왜 현업에서는 아직 FP16이 더 많이 쓰일까?
딥러닝이나 LLM을 다루다 보면
FP16, BF16 같은 16비트 부동소수점 포맷을 자주 접하게 된다.
둘 다 “16비트”인데,
- 왜 두 가지가 존재할까?
- 왜 논문이나 대규모 학습에서는 BF16을 많이 쓰는데
- 실제 서비스·추론 환경에서는 FP16이 더 흔할까?
이 글에서는 비트 구조부터 실무 사용 맥락까지
FP16과 BF16의 차이를 정리한다.
1. FP16과 BF16은 무엇이 다른가?
핵심 차이는 16비트를 어떻게 나누어 쓰느냐다.
FP16 (IEEE half-precision)
[ 부호 1bit | 지수 5bit | 가수 10bit ]
BF16 (Brain Floating Point)
[ 부호 1bit | 지수 8bit | 가수 7bit ]
👉 차이를 한 줄로 요약하면:
FP16은 정밀도(precision)를,
BF16은 표현 범위(range)를 더 중요하게 본다
2. 표현 범위 vs 정밀도
FP16의 특징
- 가수 10bit → 정밀도 높음
- 지수 5bit → 표현 범위 좁음
- 단점:
- 값이 커지면 overflow
- 값이 작아지면 underflow
- 대형 모델에서 NaN 발생 위험
BF16의 특징
- 가수 7bit → 정밀도는 낮음
- 지수 8bit → FP32와 동일한 표현 범위
- 장점:
- 값의 스케일이 커도 안정적
- 학습 중 overflow/NaN 발생 확률 낮음
3. 왜 대규모 학습에서는 BF16을 많이 쓸까?
1️⃣ LLM은 수치 안정성이 매우 중요하다
대형 모델 내부에서는:
- attention score
- softmax
- layer normalization
- residual connection
등으로 인해 값의 범위가 급격히 변한다.
FP16은 이런 상황에서:
- activation overflow
- gradient overflow
가 자주 발생한다.
BF16은:
- FP32와 동일한 지수 범위
- 훨씬 안정적인 수치 동작
👉 그래서 대규모 학습에서는 BF16이 사실상 표준에 가깝다.
2️⃣ FP32 → BF16 변환이 단순하다
BF16은 구조적으로:
FP32의 상위 16비트를 그대로 사용
즉,
- FP32 → BF16: 단순 truncation
- FP32 → FP16: 재정규화 필요
이 차이 때문에:
- 변환 비용 ↓
- 수치 일관성 ↑
3️⃣ 하드웨어가 BF16 중심으로 발전
- Google TPU: BF16 기준 설계
- NVIDIA A100 / H100: BF16 가속
- Intel CPU / Gaudi: BF16 최적화
👉 학습 인프라 쪽에서는
BF16이 자연스러운 선택
4. 그런데 왜 “현업에서는 BF16을 잘 안 쓴다”는 말이 나올까?
이 말도 틀린 말은 아니다.
이유 1️⃣ 하드웨어 지원이 아직 균일하지 않다
- RTX 20/30 일부 GPU: BF16 성능 이점 적음
- CPU 추론 환경: FP16 경로가 더 최적화된 경우 많음
- 구형 CUDA/cuDNN: BF16 이점 없음
👉 그래서 현업에서는:
“굳이 BF16 쓸 이유가 없다 → FP16 유지”
이유 2️⃣ 추론에서는 양자화가 더 중요하다
실제 서비스 환경에서는:
- FP16 vs BF16 고민 전에
- INT8 / Q4 / Q2 양자화로 내려가는 경우가 많다
즉,
BF16은 추론 파이프라인에서
중간 단계로 스킵되는 경우가 많다
이유 3️⃣ 프레임워크 기본값 영향
- PyTorch autocast 기본: FP16
- TensorRT 기본 파이프라인: FP16
- llama.cpp: FP16 → GGUF quant
👉 “기본값 = FP16” 문화가 이미 굳어 있음
5. 그래서 실제로는 어떻게 쓰일까?
현실적인 정리
| 구분 | 주 사용 포맷 |
| 대규모 학습 | BF16 |
| 연구 / TPU 환경 | BF16 |
| GPU 추론 | FP16 |
| CPU 추론 | FP16 / INT8 |
| 서비스 서빙 | FP16 → 양자화 |
한 줄로 말하면:
BF16은 학습 쪽 표준,
FP16은 서비스 쪽 표준
6. FP16과 BF16은 경쟁 관계가 아니다
중요한 포인트 하나.
FP16과 BF16은:
- “누가 더 좋은가”의 문제가 아니라
- 어디서 쓰느냐의 문제다.
그리고 대부분의 실무에서는:
- FP16/BF16 차이를 고민하기 전에
- 양자화가 더 큰 결정 포인트가 된다.
7. 정리
- FP16: 정밀도 중심, 실무 추론에서 여전히 가장 흔함
- BF16: 표현 범위 중심, 대규모 학습에서 안정적
- “BF16을 많이 쓴다 / 안 쓴다”는 말은 맥락 차이
- 현업 체감 기준으로는 FP16이 아직 주류
마무리
FP16과 BF16의 차이는
비트 수가 아니라 어떤 비트를 어디에 쓰느냐의 차이다.
LLM이 커질수록:
- 정밀도보다
- 수치 안정성과 범위가 더 중요해지고
그 결과 학습에서는 BF16,
서비스에서는 FP16 + 양자화라는 구조가 자연스럽게 자리 잡았다.
'인공지능' 카테고리의 다른 글
| ECNR이 뭐길래 STT 성능을 좌우할까 (0) | 2025.12.30 |
|---|---|
| Baseline / Ablation, 그리고 라벨링 이야기 (0) | 2025.12.29 |
| A-law와 μ-law(뮤로우)의 차이점 정리 (0) | 2025.12.26 |
| 실시간 STT (0) | 2025.12.23 |
| CTC vs RNN-T vs Attention Seq2Seq (1) | 2025.12.23 |
Comments