최근 딥러닝 모델을 학습하거나 배포할 때, float32
(FP32) 대신 float16
, bfloat16
, 심지어 float64
(FP64)를 고려하는 사례가 늘고 있습니다. 하지만 이 선택은 단순히 정밀도의 문제가 아니라 메모리, 학습 안정성, 연산 성능까지 모두 고려해야 할 중요한 결정입니다.
이번 글에서는 특히 FP32에서 FP64로 변환할 경우 어떤 변화가 일어나는지, 그리고 왜 대부분의 딥러닝 프레임워크가 여전히 FP32를 기본으로 채택하는지에 대해 실제적인 관점에서 설명드리겠습니다.
📌 부동소수점(Floating Point)의 기본: FP16, FP32, FP64
형식 | 비트 수 | 메모리 | 유효 자릿수 | 표현 범위 | 주 사용처 |
---|---|---|---|---|---|
FP16 | 16bit | 2B | 약 3~4자리 | ±6.5e4 | 모바일, 그래픽, 일부 CNN |
FP32 | 32bit | 4B | 약 7자리 | ±3.4e38 | 대부분의 딥러닝 연산 |
FP64 | 64bit | 8B | 약 16자리 | ±1.8e308 | 과학 계산, 금융, 시뮬레이션 |
⚙️ FP64로 바꾸면 메모리는 얼마나 늘어날까?
단순합니다:
FP32 → FP64 전환 시, 가중치 하나당 메모리 사용량은 정확히 2배 증가합니다.
예를 들어, 10M개의 파라미터를 가진 모델이 있다고 가정하면:
- FP32일 경우:
10M x 4B = 40MB
- FP64일 경우:
10M x 8B = 80MB
여기에 옵티마이저 상태(예: Adam의 m
, v
)까지 고려하면 실제 학습 시 필요한 메모리는 2배 이상 증가할 수 있습니다.
🚫 FP64가 오히려 딥러닝 학습에 불리한 이유
- 정밀도가 높다고 꼭 좋은 건 아니다
- 대부분의 딥러닝 연산은 그렇게 높은 정밀도를 요구하지 않음.
- 오히려 학습 중 발생하는 gradient noise나 dropout 등의 regularization으로 인해 FP64는 과도한 연산 낭비가 될 수 있음.
- 하드웨어 지원이 떨어짐
- 대부분의 GPU(NVIDIA RTX 시리즈, A100 등)는 FP32, FP16에는 Tensor Core를 지원하지만, FP64는 느린 연산 장치에 매핑됨.
- 예: A100의 경우 FP32는 19.5 TFLOPS, FP64는 9.7 TFLOPS (절반 수준)
- 모델 저장 및 전송 비용 증가
- 모델 크기가 2배가 되면 저장 공간, 네트워크 전송 비용도 2배
✅ FP32가 여전히 표준인 이유
- 충분한 정밀도: 대부분의 CNN, Transformer 계열 모델에서 32bit 정밀도면 학습 안정성과 정확도 모두 확보 가능
- 최적의 트레이드오프: 연산 성능, 메모리 사용, 정밀도 사이에서 균형 잡힌 선택
- 프레임워크 최적화: TensorFlow, PyTorch 모두 FP32에 최적화되어 있으며, 대부분의 pre-trained 모델도 FP32로 제공
💡 Mixed Precision이 떠오르는 이유
현대 딥러닝에서는 오히려 mixed precision(예: float16
연산 + float32
저장)이 더 주목받고 있습니다.
- 연산은 빠른 FP16,
- 가중치 저장은 안정적인 FP32
- 이를 통해 성능과 안정성을 모두 확보할 수 있습니다.
TensorFlow에서는 다음과 같이 설정합니다:
pythonCopyEditfrom tensorflow.keras import mixed_precision
mixed_precision.set_global_policy('mixed_float16')
🧾 마무리: 실무에서의 추천
상황 | 추천 Precision |
---|---|
일반적인 CNN, Transformer | FP32 또는 Mixed Precision |
메모리 부족, 빠른 실험 필요 | Mixed Precision (float16 + float32 ) |
과학 계산, 수치 해석 | FP64 |
회귀 문제에서 소수점 정밀도가 핵심일 때 | FP32 (혹은 FP64, 상황에 따라) |
🔍 요약
딥러닝에서 FP64는 정밀도는 높지만 실전에서 이득은 크지 않다.
오히려 학습 속도 저하, 메모리 증가, 하드웨어 비호환성 같은 비용이 발생합니다.
따라서 대부분의 경우, FP32 또는 mixed precision이 현실적인 선택입니다.