dev.Log

FP16과 BF16의 차이 본문

인공지능

FP16과 BF16의 차이

초코푸딩 2025. 12. 29. 09:58

왜 현업에서는 아직 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 + 양자화라는 구조가 자연스럽게 자리 잡았다.

Comments