왜 쓰고 어떻게 작동하나
현대 가속기는 BF16/FP16 곱셈을 FP32보다 2-8x 빠르게 처리해. 혼합 정밀도 학습은 모델 가중치의 마스터 사본을 FP32로 유지하면서 행렬곱처럼 연산량이 큰 작업은 더 낮은 정밀도로 실행해. 그 결과 99%의 경우에 최종 정확도는 그대로 유지하면서 학습 속도를 높일 수 있어.
BF16은 FP32와 동적 범위가 같지만 정밀도는 더 낮아. GradScaler가 필요 없어서 2026년에는 기본값으로 선호돼. FP16은 정밀도가 더 높지만 동적 범위가 좁아서 작은 기울기가 underflow되지 않도록 GradScaler를 써야 해.
문제가 생기면 무엇을 확인할까
손실이 NaN이 될 수 있어. 가장 흔한 원인은 FP16 순전파 과정 어딘가에서 발생한 단 한 번의 underflow가 손실까지 전파되는 거야. 보통 BF16으로 바꾸면 해결되고, FP16을 계속 써야 한다면 GradScaler를 추가하면 돼.
정확도가 미묘하게 떨어질 수도 있어. 로그-소프트맥스나 층 정규화 같은 일부 연산은 낮은 정밀도에 민감해. PyTorch autocast는 이런 연산을 자동으로 FP32에 유지하지만, 맞춤형 층에서는 그렇지 않을 수 있어. Autocast를 썼을 때 모델 정확도가 눈에 띄게 떨어진다면 어떤 연산이 낮은 정밀도로 실행되는지 프로파일링해 봐.
수치로 보면
BF16 학습은 Tensor Core에서 FP32보다 실제 경과 시간 기준 1.5-3x 빠르고, 활성화 메모리를 ~50% 절약해. FP8은 H100 이상에서 Transformer 학습 성능을 추가로 30-50% 높일 수 있지만, 2026년 기준 도구 생태계은 여전히 성숙하는 중이야.