혼합 정밀도
혼합 정밀도 학습으로 딥러닝 효율성을 향상시키세요! 정확도를 희생하지 않고 더 빠른 속도, 감소된 메모리 사용량 및 에너지 절약을 달성하세요.
혼합 정밀도는 모델 훈련 속도를 높이고 메모리 소비를 줄이기 위해 딥러닝에서 사용되는 기술입니다. 여기에는 계산 중에 16비트 부동 소수점(FP16)과 같은 저정밀 숫자 형식과 32비트 부동 소수점(FP32)과 같은 고정밀 형식을 함께 사용하는 것이 포함됩니다. 가중치 곱셈과 같은 모델의 특정 부분에 저정밀 숫자를 전략적으로 사용하고 가중치 업데이트와 같은 중요한 구성 요소를 고정밀로 유지함으로써 혼합 정밀도 훈련은 모델 정확도의 실질적인 손실 없이 최신 GPU에서 성능을 크게 향상시킬 수 있습니다.
혼합 정밀도 작동 방식
혼합 정밀도의 핵심 아이디어는 낮은 정밀도 데이터 유형의 속도 및 메모리 효율성을 활용하는 것입니다. 최신 하드웨어, 특히 Tensor Core가 있는 NVIDIA GPU는 32비트 숫자보다 16비트 숫자에 대한 연산을 훨씬 빠르게 수행할 수 있습니다. 이 프로세스에는 일반적으로 세 가지 주요 단계가 포함됩니다.
- 낮은 정밀도로 캐스팅(Casting to Lower Precision): 모델의 대부분의 연산, 특히 계산 집약적인 행렬 곱셈 및 컨볼루션은 반정밀도(FP16) 연산을 사용하여 수행됩니다. 이는 메모리 공간을 줄이고 계산 속도를 높입니다.
- 가중치 마스터 사본 유지: 모델 정확도와 안정성을 유지하기 위해 모델 가중치의 마스터 사본이 표준 32비트 부동 소수점(FP32) 형식으로 유지됩니다. 이 마스터 사본은 학습 프로세스 중에 기울기를 누적하고 가중치를 업데이트하는 데 사용됩니다.
- 손실 스케일링: 수치 언더플로(FP16으로 변환될 때 작은 기울기 값이 0이 되는 현상)를 방지하기 위해 손실 스케일링이라는 기술이 사용됩니다. 이 기술은 역전파 전에 손실에 스케일링 계수를 곱하여 기울기 값을 FP16에 대해 표현 가능한 범위 내로 유지합니다. 가중치가 업데이트되기 전에 기울기는 다시 축소됩니다.
PyTorch 및 TensorFlow와 같은 딥러닝 프레임워크는 자동 혼합 정밀도를 기본적으로 지원하므로 쉽게 구현할 수 있습니다.
응용 분야 및 예시
혼합 정밀도는 효율성이 가장 중요한 대규모 머신러닝(ML) 모델 훈련에 널리 채택되고 있습니다.
관련 개념
혼합 정밀도는 딥러닝 모델을 보다 효율적으로 만들기 위해 사용되는 여러 최적화 기술 중 하나입니다. 관련 개념과 구별하는 것이 중요합니다.
- 모델 양자화(Quantization): 양자화는 부동 소수점 숫자(예: FP32 또는 FP16)를 INT8과 같은 더 낮은 비트 정수 형식으로 변환하여 모델 크기와 계산 비용을 줄입니다. 혼합 정밀도는 학습 중에 다양한 부동 소수점 형식을 사용하는 반면, 양자화는 일반적으로 학습 후(사후 학습 양자화) 또는 학습 중(양자화 인식 학습)에 추론을 위해, 특히 엣지 장치에서 최적화하기 위해 적용됩니다.
- 모델 가지치기: 가지치기는 신경망에서 중복되거나 중요하지 않은 연결(가중치)을 제거하는 기술입니다. 가중치의 수치 형식을 변경하는 혼합 정밀도와 달리 가지치기는 모델의 크기와 복잡성을 줄이기 위해 모델 아키텍처 자체를 변경합니다. 이러한 기술을 함께 사용하여 훨씬 더 큰 성능 향상을 달성할 수 있습니다.