⚖️ [심화] FP16 vs BF16: 비트의 전쟁, 승자는 누구? 🥊
딥러닝 모델의 무게를 반으로 줄이는 16비트 포맷에는 두 가지 강력한 라이벌이 있습니다. 바로 **FP16 (IEEE 754 Half Precision)**과 **BF16 (Brain Floating Point)**입니다.
둘 다 똑같이 16비트(16-bit) 용량을 차지하지만, 내부에서 땅따먹기(비트 할당)를 하는 방식이 완전히 다릅니다!
1️⃣ 구조적 차이 (Bit Layout) 🧬
컴퓨터가 실수를 표현할 때는 부호(Sign), 지수(Exponent, 크기/범위), 가수(Mantissa, 정밀도) 세 부분으로 나눠서 저장합니다.
| 구분 | 전체 크기 | 부호 (Sign) | 지수부 (Exponent) | 가수부 (Mantissa) |
| FP32 (기준) | 32 bit | 1 bit | 8 bit | 23 bit |
| FP16 (기존) | 16 bit | 1 bit | 5 bit 📉 | 10 bit |
| BF16 (신흥) | 16 bit | 1 bit | 8 bit 🚀 | 7 bit 📉 |
- FP16: 가수부(정밀도)에 투자를 많이 했습니다.
- BF16: 지수부(범위)에 몰빵했습니다. FP32와 지수부 크기가(8bit) 똑같다는 게 핵심입니다! ⭐
2️⃣ 표현 범위와 정밀도의 차이 (The Trade-off) ⚖️
비트 할당의 차이는 곧 **"어떤 숫자를 표현할 수 있는가"**로 직결됩니다.
🅰️ 표현 범위 (Dynamic Range) 👉 BF16 승! 🏆
- FP16: 지수부가 $5$비트밖에 없어서 표현할 수 있는 숫자의 범위가 좁습니다. ($\approx 6.5 \times 10^4$)
- 문제점: 딥러닝 학습 중에 숫자가 너무 커지거나(Overflow), 너무 작아지면(Underflow) NaN(Not a Number) 에러가 뜨면서 학습이 터져버립니다. 💥 그래서 Loss Scaling 같은 복잡한 기법이 필수입니다.
- BF16: 지수부가 $8$비트로 FP32와 동일합니다. ($\approx 3.4 \times 10^{38}$)
- 장점: FP32가 표현할 수 있는 숫자는 BF16도 다 표현할 수 있습니다. 변환이 아주 쉽고, 학습이 잘 터지지 않습니다. (Loss Scaling 불필요! 😍)
🅱️ 정밀도 (Precision) 👉 FP16 승! 🏆
- FP16: 가수부가 $10$비트라 소수점 아래를 더 디테일하게 표현합니다.
- 장점: 계산 결과가 더 정확합니다.
- BF16: 가수부가 $7$비트로 줄어서 숫자가 약간 거칠어집니다.
- 괜찮나요?: 놀랍게도 딥러닝은 **"약간의 노이즈"**에 강합니다! 소수점 끝자리가 조금 틀려도, 전체적인 학습 방향(Gradient)만 맞으면 결과에 큰 지장이 없다는 게 밝혀졌죠.
💡 쉽고 정확한 비유: "자와 현미경" 📏🔬
- FP32 (원본) 👉 "30cm 자 (눈금 1mm)"
- : 길이도 길고(범위), 눈금도 촘촘해요(정밀도). 완벽하지만 무거워요.
- FP16 👉 "10cm 자 (눈금 1mm)"
- : 눈금은 여전히 촘촘해서(정밀도 유지) 작은 건 잘 재는데, 자가 너무 짧아서(범위 축소) 긴 물건을 재려고 하면 잴 수가 없어요.
- BF16 👉 "30cm 자 (눈금 1cm)"
- : 눈금이 듬성듬성해서(정밀도 하락) 미세한 건 못 재지만, 자의 길이는 원본과 똑같아서(범위 유지) 큰 물건도 문제없이 잴 수 있어요.
'AI 엔지니어준비' 카테고리의 다른 글
| 머리에 박아둬야 할 것과 검색해서 갖다 써도 되는 (0) | 2026.01.30 |
|---|---|
| ONNX(Open Neural Network Exchange)🌐 (0) | 2026.01.30 |
| ONNX INT8 양자화 코드 분석하기 (0) | 2026.01.29 |
| BentoML 맛보기! (1) | 2026.01.27 |
| 🆚 지식 증류 & 가지치기 vs 양자화: 언제 누가 이길까? (0) | 2026.01.26 |