반정밀
반정밀도(FP16)가 어떻게 더 빠른 연산, 메모리 사용량 감소, 효율적인 모델 배포로 AI를 가속화하는지 알아보세요.
FP16이라고도 하는 반정밀은 보다 일반적인 32비트 단정밀도(FP32) 또는 64비트 배정밀도(FP64) 형식과 달리 16비트 메모리를 사용하여 숫자를 표현하는 부동소수점 숫자 형식입니다. 딥 러닝의 맥락에서 반정밀을 사용하면 모델의 메모리 사용량과 계산 요구 사항이 크게 줄어듭니다. 이러한 절충안에는 수치 범위와 정밀도가 감소하는 대가가 따릅니다. 하지만 최신 기술, 특히 혼합 정밀도 훈련은 모델 정확도에 미치는 영향을 최소화하면서 더 빠른 훈련과 추론을 가능하게 함으로써 FP16을 효율적인 머신 러닝(ML) 의 초석으로 만들었습니다.
반정밀 작동 방식
FP32에서 FP16으로 전환하면 모델 가중치 및 활성화를 저장하는 데 필요한 메모리가 절반으로 줄어듭니다. 따라서 더 큰 모델, 더 큰 배치 크기 또는 더 적은 메모리로 GPU에서 학습할 수 있습니다. 또한 NVIDIA 텐서 코어가 탑재된 최신 GPU는 32비트 연산보다 훨씬 빠른 속도로 16비트 매트릭스 연산을 수행하도록 특별히 설계되었습니다.
FP16의 가장 큰 문제점은 제한된 수치 범위로 인해 훈련 중 그라데이션이 사라지는 등의 문제가 발생할 수 있다는 점입니다. 이러한 문제를 해결하기 위해 반정밀도는 거의 항상 혼합 정밀도 접근 방식을 사용하여 구현됩니다. 이 전략은 속도를 위해 대부분의 계산을 FP16으로 수행하지만, 수치 안정성을 유지하기 위해 가중치 업데이트 및 특정 손실 함수 계산과 같은 중요한 연산에는 전략적으로 FP32를 사용하는 것입니다. PyTorch 및 TensorFlow와 같은 딥 러닝 프레임워크는 자동 혼합 정밀도 학습을 위한 기본 지원을 제공합니다.
애플리케이션 및 예시
주로 혼합 정밀 기술을 통한 반정밀이 널리 사용됩니다:
- 모델 훈련 가속화: 이미지 분류나 자연어 처리(NLP)와 같은 대규모 딥 러닝 모델 훈련은 혼합 정밀도를 사용하여 속도를 크게 높여 훈련 시간과 비용을 줄일 수 있습니다. Ultralytics HUB와 같은 플랫폼은 클라우드 트레이닝 세션 중에 이러한 최적화를 활용하는 경우가 많습니다.
- 객체 감지 추론 최적화: Ultralytics YOLO11과 같은 모델은 더 빠른 실시간 추론을 위해 FP16 정밀도의 ONNX 또는 TensorRT와 같은 포맷으로 내보낼 수 있습니다. 이는 여러 비디오 피드를 분석하는 보안 시스템이나 고속 생산 라인의 품질 관리와 같이 높은 처리량을 필요로 하는 애플리케이션에 매우 중요합니다.
- 리소스 제약이 있는 디바이스에 배포: FP16 모델의 메모리 사용 공간과 컴퓨팅 비용이 줄어들어 NVIDIA Jetson과 같은 엣지 AI 플랫폼이나 TensorFlow Lite 또는 Apple의 Core ML과 같은 프레임워크를 사용하는 모바일 디바이스에 배포하는 데 적합합니다.
- 대규모 언어 모델(LLM) 훈련: GPT-3 및 기타 기초 모델과 같은 모델의 크기가 방대하기 때문에 모델을 메모리에 맞추고 합리적인 시간 내에 학습을 완료하려면 16비트 형식을 사용해야 합니다.
반정확도 대 다른 포맷
- Bfloat16(BF16): Google에서 개발한 대체 16비트 포맷인 Bfloat16은 FP16에 비해 지수에 더 많은 비트를 할당하고 맨티사에 더 적은 비트를 할당합니다. 따라서 FP32와 동일한 동적 범위를 제공하므로 언더플로우 및 오버플로우에 더 탄력적이지만 정밀도가 떨어지는 단점이 있습니다. 이 기술은 Google의 TPU에 많이 활용되고 있습니다. 자세한 내용은 Google Cloud AI 블로그에서 확인할 수 있습니다.
- 모델 양자화: 두 가지 모두 모델 최적화 기술이지만, 모델 양자화는 일반적으로 부동 소수점 가중치(FP32 또는 FP16)를 더 낮은 비트 정수 형식, 가장 일반적으로 8비트 정수(INT8)로 변환합니다. 이는 특히 CPU와 특정 가속기에서 훨씬 더 빠른 속도를 제공할 수 있지만, 모델 성능의 현저한 저하를 피하기 위해 양자화 인식 훈련(QAT)과 같은 보다 신중한 보정 프로세스가 필요한 경우가 많습니다.
- 단일 정밀도(FP32): 대부분의 딥러닝 프레임워크에서 기본으로 사용되는 형식입니다. 높은 정밀도와 넓은 동적 범위를 제공하므로 훈련에 적합합니다. 하지만 반정밀도보다 느리고 메모리 집약적이기 때문에 대규모 모델을 배포하거나 최대 속도가 필요한 애플리케이션에는 적합하지 않습니다. 다양한 모델 비교에서 볼 수 있듯이 이러한 형식 간의 장단점은 주요 고려 사항입니다.