Train High, Infer Low - 머신러닝 학습과 서빙의 FP32, FP16, BF16, INT8 정밀도 선택

7 months ago 8

머신러닝 모델을 프로덕션에 배포할 때 가장 많이 고민하는 것 중 하나가 바로 수치 정밀도(Numerical Precision) 선택입니다. FP32로 학습한 모델을 FP16으로 서빙해도 될까? INT8 양자화는 언제 해야 할까? 이번 글에서는 정밀도 선택 전략을 정리했습니다. TL;DR - 바쁜 분들을 위한 요약 "Train High, Infer Low" - 학습은 높은 정밀도로, 서빙은 낮은 정밀도로 상황 추천 조합 메모리 절감 안정성/품질 비고 LLM 학습/서빙 FP32+BF16 Mixed 학습 → BF16 추론 50% ⭐⭐⭐⭐⭐ 가장 일반적인 선택, 넓은 범위(±3.4×10³⁸), 수치 안정성 우수 고성능 서빙 FP32 학습 → BF16 추론 50% ⭐⭐⭐⭐⭐ A100, H100 등 최신 GPU 권장 컴퓨터 비전 추론 (제한적) FP32 학습 → FP16 추론 50% ⭐⭐⭐ ⚠️ 오버플로우 위험 (범위 ±65K) 모바일/엣지 디바이스 FP32 학습 → INT8 추론 (QAT) 75% ⭐⭐ 정확도 손실 1~5%, 정수 표현으로 제한적, 양자화 작업 필요 핵심: FP16은 정밀도는 높지만 표현 범위가 좁아서(최대값 65,504) 오버플로우 위험이 있습니다. INT8은 메모리 효율은 최고지만 정확도 손실이 가장 큽니다. 실무에서는 BF16이 가장 안정적이고 범용적입니다. 수치 정밀도, 왜 중요한가? 모델 서빙 시 정밀도 선택은 다음 세 가지에 직접적인 영향을 미칩니다: 추론 속도: FP16은 FP32 대비 최대 2배, INT8은 최대 4배 빠릅니다 메모리 사용량: 정밀도를 낮추면 모델 크기가 절반~1/4로 감소합니다 정확도: 정밀도를 낮추면 0.1%~5%의 정확도 손실이 발생할 수 있습니다 핵심 데이터 타입 4가지 FP32 (Float32) - 학습의 표준 구조: [1bit 부호][8bit 지수][23bit 가수] = 32bit 표현 범위: ±3.4 × 10³⁸ 정밀도: 약 7~8자리 언제 사용? 모델 학습 (Training) 베이스라인 정확도 측정 디버깅 및 검증 FP16 (Float16) - GPU 추론 가속 구조: [1bit 부호][5bit 지수][10bit 가수] = 16bit 표현 범위: ±65,504 ⚠️ 정밀도: 약 3~4자리 장점: 메모리 50% 절감, 속도 2배 향상 단점: 좁은 표현 범위로 오버플로우 위험 언제 사용? GPU에서 추론 가속컴퓨터 비전 모델 (이미지는 0~255로 정규화) 하드웨...

Read Entire Article