FP32, FP16, BF16, INT8의 차이점 정리
FP32는 32비트 단정밀도 부동소수점 수로, 계산의 기준으로 쓰입니다. FP16과 BF16은 둘 다 16비트이지만 비트 배분이 다릅니다. FP16은 가수에 많은 비트를 써서 정밀도를 확보하고, 표현 범위는 최대 65504로 좁아집니다. BF16은 지수부를 FP32와 같은 8비트로 해서 범위를 FP32 수준으로 유지하고, 그만큼 정밀도를 낮췄습니다. INT8은 8비트 정수로, 스케일을 곱해 실수를 근사하는 양자화에 쓰이며, AI 추론에서 메모리와 전력을 크게 줄일 수 있습니다.
| 비교 항목 | FP32 | FP16 | BF16 | INT8 |
|---|---|---|---|---|
| 비트 수 | 32비트 | 16비트 | 16비트 | 8비트 |
| 부호·지수·가수 비트 수 | 1·8·23 | 1·5·10 | 1·8·7 | 지수와 가수가 없음. 2의 보수 정수로 −128~127 |
| 표현 가능한 최댓값 | 약 3.4 × 10³⁸ | 65504 | 약 3.4 × 10³⁸(FP32와 거의 같음) | 127(실수는 스케일을 곱해 표현) |
| 최소 정규화 수 | 약 1.2 × 10⁻³⁸ | 약 6.1 × 10⁻⁵(2⁻¹⁴) | 약 1.2 × 10⁻³⁸ | 없음(표현 가능한 값의 간격은 스케일로 결정) |
| 정밀도 기준 | 10진수로 약 7자리(1과 다음 수의 차이는 2⁻²³ ≈ 1.2 × 10⁻⁷) | 10진수로 약 3자리(2⁻¹⁰ ≈ 9.8 × 10⁻⁴) | 10진수로 2~3자리(2⁻⁷ ≈ 7.8 × 10⁻³) | 256단계의 눈금 |
| FP32에서의 변환 | 없음(기준) | 범위가 좁아 큰 값은 오버플로하고, 작은 값은 0이 될 수 있음 | 상위 16비트를 꺼내 반올림하기만 하면 되며, 범위는 넘치지 않음 | 스케일(과 영점)을 정해 양자화. 값의 범위를 조사하는 캘리브레이션이 필요 |
| 값 하나의 메모리 | 4바이트 | 2바이트 | 2바이트 | 1바이트 |
| 연산기 효율 | 곱셈기가 커서 같은 면적에서의 곱셈 누산 수가 적음 | FP32보다 작은 연산기로 많은 곱셈 누산을 배치 가능 | FP16과 비슷함. 가수가 짧은 만큼 곱셈기는 더 작음 | 곱셈기가 가장 작고 전력 효율이 좋음. 곱은 32비트 정수로 누산하는 경우가 많음 |
| 학습에서의 사용 | 마스터 웨이트, 옵티마이저 상태, 곱의 누산 | 혼합 정밀도 학습. 손실 스케일링으로 작은 기울기가 0이 되는 것을 방지 | 혼합 정밀도 학습에서 널리 쓰임. 대부분 손실 스케일링이 불필요 | 일반적으로 쓰지 않음(양자화 인식 학습에서는 양자화의 영향을 모사) |
| 추론에서의 사용 | 정밀도의 기준. 성능보다 정확도를 우선할 때 | GPU 등에서의 추론 | GPU나 AI 가속기에서의 추론 | 양자화한 모델의 추론. 특히 엣지 NPU 등 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.