용어집

혼합 정밀도

혼합 정밀도 훈련으로 딥러닝 효율을 높이세요! 정확도는 그대로 유지하면서 더 빠른 속도, 메모리 사용량 감소, 에너지 절약을 달성하세요.

YOLO 모델을 Ultralytics HUB로 간단히
훈련

자세히 알아보기

혼합 정밀도 훈련은 모델 정확도에 큰 영향을 주지 않으면서 모델 훈련을 가속화하고 메모리 소비를 줄이기 위해 딥러닝(DL) 에서 사용되는 기술입니다. 이는 신경망(NN) 내에서 값을 저장하고 계산할 때 다양한 수치 정밀도 형식의 조합을 전략적으로 사용함으로써 달성할 수 있습니다. 일반적으로 모델 가중치 저장과 같은 중요한 부분에는 표준 32비트 부동 소수점 형식(FP32 또는 단정밀도)을 사용하고, 전진 및 후진 패스(역전파) 중 계산에는 더 빠르고 메모리 사용량이 적은 16비트 부동 소수점 형식(FP16 또는 반정밀도, 때로는 BF16 또는 BFloat16)을 사용하는 방식이 여기에 포함됩니다.

혼합 정밀도 작동 방식

혼합 정밀도의 핵심 아이디어는 저정밀 포맷의 속도와 메모리 이점을 활용하면서 잠재적인 수치 안정성 문제를 완화하는 것입니다. 일반적인 접근 방식에는 다음 단계가 포함됩니다:

  1. 마스터 가중치를 FP32로 유지: 모델 가중치의 기본 사본이 표준 FP32 형식으로 유지되어 가중치 업데이트 시 높은 정밀도를 보장합니다.
  2. 계산에는 FP16/BF16을 사용합니다: 훈련 루프 중에 FP32 가중치는 전진 및 후진 패스에 대해 FP16 또는 BF16으로 캐스팅됩니다. 이러한 낮은 정밀도 형식을 사용하는 계산은 낮은 정밀도에서 행렬 곱셈을 가속화하도록 특별히 설계된 Tensor 코어가 장착된 NVIDIA GPU와 같은 최신 하드웨어에서 훨씬 더 빠릅니다.
  3. 손실 스케일링: FP16을 사용할 경우 표현 가능한 숫자의 범위가 FP32보다 훨씬 작습니다. 이로 인해 역전파 중에 계산된 작은 기울기 값이 0이 되어(언더플로우) 학습에 방해가 될 수 있습니다. 이를 방지하기 위해 역전파 전에 손실 값을 스케일업하여 그라디언트를 FP16으로 표현 가능한 범위로 효과적으로 스케일업합니다. 가중치 업데이트 전에는 이러한 그라데이션이 다시 축소됩니다. FP32와 비슷한 넓은 동적 범위를 제공하지만 정밀도가 낮은 BF16은 손실 스케일링이 필요하지 않은 경우가 많습니다.
  4. 마스터 웨이트 업데이트: 계산된 그라데이션(손실 스케일링을 사용한 경우 축소됨)은 FP32에 남아 있는 가중치의 마스터 사본을 업데이트하는 데 사용됩니다.

이러한 세심한 균형을 통해 모델은 더 빠르게 훈련하고 더 적게 사용할 수 있습니다. GPU 메모리를 덜 사용합니다.

혼합 정밀도의 이점

  • 더 빠른 훈련: 저정밀 계산(FP16/BF16)은 호환 하드웨어에서 훨씬 빠르게 실행되므로 각 훈련 단계에 필요한 시간이 크게 단축됩니다. 따라서 더 빠르게 반복하고 실험할 수 있습니다.
  • 메모리 소비량 감소: FP16/BF16 값은 FP32 값의 절반의 메모리만 사용합니다. 이 감소는 포워드 패스 동안 저장된 활성화와 백워드 패스 동안 계산된 그라데이션에 적용됩니다. 메모리 사용량이 줄어들면 더 큰 모델을 훈련하거나 더 큰 배치 크기를 사용할 수 있으므로 모델 성능과 훈련 안정성이 향상될 수 있습니다.
  • 효율성 향상: 더 빠른 계산과 더 낮은 메모리 대역폭 요구 사항의 조합으로 하드웨어 리소스를 더 효율적으로 사용할 수 있어 클라우드 컴퓨팅 또는 온프레미스 클러스터의 교육 비용을 낮출 수 있습니다.

혼합 정밀도 대 관련 개념

  • 완전 정밀도(FP32): 기존 트레이닝은 모든 저장과 연산에 FP32를 사용합니다. 일반적으로 수치상으로는 더 안정적이지만 혼합 정밀도보다 느리고 메모리 사용량이 많습니다.
  • 절반 정밀도(FP16/BF16): 훈련 내내 FP16 또는 BF16만 사용하면 심각한 수치 불안정성(특히 손실 스케일링과 같은 기술이 없는 FP16)과 잠재적인 정확도 저하를 초래할 수 있습니다. 혼합 정밀도는 FP32와 FP16/BF16을 결합한 보다 강력한 접근 방식입니다.
  • 모델 정량화: 이는 일반적으로 모델 가중치 및/또는 활성화를 8비트 정수(INT8)와 같은 더 낮은 정밀도 형식으로 변환하는 것을 의미하며, 주로 추론 속도와 효율성을 최적화하기 위해 특히 엣지 디바이스에서 사용됩니다. 훈련(양자화 인식 훈련) 중에 사용되기도 하지만, 표준 훈련 단계에서 사용되는 일반적인 FP32/FP16 혼합 정밀도와는 구별됩니다.

애플리케이션 및 예시

혼합 정밀도는 대규모 머신 러닝(ML) 모델 학습에 널리 채택되고 있습니다.

  1. 대규모 언어 모델(LLM) 학습: GPT-3, BERT, T5와 같은 모델에는 수십억 개의 파라미터가 있습니다. FP32만 사용하여 이러한 모델을 훈련하려면 엄청난 양의 GPU 메모리와 시간이 필요합니다. 혼합 정밀도를 사용하면 메모리 필요량을 크게 줄이고 계산을 가속화하여 이러한 기초 모델을 훈련할 수 있습니다. PyTorch 같은 프레임워크와 TensorFlow 와 같은 프레임워크는 혼합 정밀도 훈련을 위한 기본 지원을 제공합니다.
  2. 컴퓨터 비전 모델 가속화: 컴퓨터 비전(CV)에서 혼합 정밀도는 물체 감지, 이미지 분할, 이미지 분류와 같은 작업에 사용되는 컨볼루션 신경망(CNN)비전 트랜스포머(ViT) 와 같은 복잡한 모델의 훈련 속도를 높입니다. 예를 들어, 최신 Ultralytics YOLO 모델을 포함한 Ultralytics YOLO11를 포함한 울트라트래픽스 YOLO 모델은 모델 훈련 팁과 모델 비교에서 언급했듯이 훈련 중에 혼합 정밀도를 활용하여 더 빠른 융합과 효율적인 리소스 활용을 할 수 있습니다. 이를 통해 사용자는 COCO와 같은 데이터 세트에서 고성능 모델을 더 빠르게 훈련할 수 있습니다. 훈련 주기가 빨라지면 Ultralytics 허브와 같은 플랫폼 내에서 하이퍼파라미터 튜닝과 모델 개발이 더 빨라집니다. 또한 추론 중에 혼합 정밀도를 사용하여 배포 속도를 높일 수 있으며, 특히 다음과 같은 형식으로 모델을 내보낼 때 더욱 그렇습니다. TensorRT 와 같은 형식으로 모델을 내보낼 때 특히 더 낮은 정밀도에 맞게 최적화할 수 있습니다.
모두 보기