혼합 정밀도
혼합 정밀도 학습으로 딥러닝 효율성을 향상시키세요! 정확도를 희생하지 않고 더 빠른 속도, 감소된 메모리 사용량 및 에너지 절약을 달성하세요.
혼합 정밀도는 다음과 같은 분야에서 강력한 최적화 기법입니다.
딥러닝 전략적으로
다양한 숫자 형식, 특히 16비트(반정밀도) 및 32비트(단정밀도) 부동 소수점
유형을 전략적으로 결합하여 모델 훈련 메모리 사용량을
메모리 사용량을 줄입니다. 계산 집약적인 연산을 낮은 정밀도로 수행하면서 마스터 복사본을 유지함으로써
모델 가중치 의 마스터 복사본을 더 높은 정밀도로 유지합니다,
이 접근 방식은 최신 하드웨어에서 성능 저하 없이 상당한 속도 향상을 제공합니다.
정확도 또는 최종 네트워크의
네트워크. 이를 통해 연구자와 엔지니어는 효과적으로 더 큰 규모의
신경망 또는
배치 크기 동일한 하드웨어 내에서
제약 조건 내에서 배치 크기를 늘릴 수 있습니다.
혼합 정밀도 작동 방식
혼합 정밀도의 핵심 메커니즘은 다음과 같은 최신 가속기의 아키텍처에 의존합니다.
NVIDIA Tensor 코어와 같이 행렬 곱셈을 수행할 수 있는 최신 가속기의 아키텍처를 기반으로 합니다.
반정밀도 (FP16)로 훨씬 빠르게
보다 훨씬 빠르게 행렬 곱셈을 수행할 수 있습니다. 이 프로세스에는 일반적으로 세 가지 주요 단계가 포함됩니다:
-
캐스팅: 다음과 같은 작업
컨볼루션 및 행렬
곱셈과 같은 연산은 FP16으로 캐스팅됩니다. 이렇게 하면 필요한 메모리 대역폭이 줄어들고 계산 속도가 빨라집니다.
-
마스터 가중치 유지 관리: 모델 파라미터의 마스터 사본은 FP32에 보관됩니다. 동안
역전파를 사용하는 동안 그라데이션은 FP16에서 계산되지만 FP32 마스터 웨이트에 적용됩니다. 이렇게 하면 작은 그라데이션
업데이트를 유지하여 FP16의 제한된 범위로 인해 손실될 수 있는 다음과 같은 문제를 방지합니다.
사라지는 그라데이션.
-
손실 스케일링: 수치 안정성을 더욱 보장하기 위해
손실 함수 값에
에 스케일링 계수를 곱합니다. 이렇게 하면 그라데이션 값이 FP16이 더 효과적으로 표현할 수 있는 범위로 이동하여 가중치 업데이트를 위해 다시 변환되기 전에
무게 업데이트를 위해 다시 변환되기 전에 언더플로 오류를 방지합니다.
실제 애플리케이션
혼합 정밀도는 다음과 같은 기능으로 인해 다양한 인공 지능 영역에서 표준 관행이 되었습니다.
하드웨어 효율성을 극대화할 수 있기 때문입니다.
-
최첨단 비전 모델 교육: 고성능 개발
컴퓨터 비전
아키텍처 개발 Ultralytics YOLO11와 같은 대규모 데이터 세트에 대한 학습이 포함됩니다.
COCO. 혼합 정밀도를 사용하면 이러한 훈련 실행을 훨씬 빠르게 완료할 수 있으므로 더 많은 반복이 가능합니다.
하이퍼파라미터 튜닝 및
배포 주기를 단축할 수 있습니다.
-
대규모 언어 모델(LLM): 생성
기초 모델 및
대규모 언어 모델
은 테라바이트 단위의 텍스트 데이터를 처리해야 합니다. 여기서 혼합 정밀도는 매우 중요한데, 이는 활성화에 필요한 메모리를 대략 절반으로 줄여서
을 절반으로 줄여 수십억 개의 매개변수가 있는 모델을 다음과 같은 클러스터에 맞출 수 있습니다.
GPU.
Ultralytics 혼합 정밀도 구현하기
그리고 ultralytics 라이브러리는 자동 혼합 정밀도(AMP) 사용을 간소화합니다. 기본적으로 교육
루틴은 호환 가능한 하드웨어를 확인하고 최적의 성능을 보장하기 위해 AMP를 활성화합니다.
from ultralytics import YOLO
# Load the YOLO11 model for training
model = YOLO("yolo11n.pt")
# Train using Automatic Mixed Precision (AMP)
# 'amp=True' is the default setting, ensuring faster training on supported GPUs
results = model.train(data="coco8.yaml", epochs=5, imgsz=640, amp=True)
혼합 정밀도 대 관련 용어
혼합 정밀도를 다른 최적화 및 데이터 표현 개념과 구별하는 것이 도움이 됩니다:
-
Vs. 절반의 정밀도: 순수 절반
정밀도(FP16)는 모든 것을 16비트 형식으로 저장하고 계산합니다. 이는 속도를 최대화하지만, 종종 다음과 같은 결과를 초래합니다.
수치 불안정성과 훈련 중 수렴 불량으로 이어집니다. 혼합 정밀도는 안정적인 가중치 업데이트를 위해 FP32
마스터 복사본을 유지하여 안정적으로 가중치를 업데이트합니다.
-
Vs. 모델 양자화:
정량화는 일반적으로 가중치를 정수로 변환(INT8)하여 최적화함으로써 정밀도를 더욱 낮춥니다.
추론 지연 시간 및 모델
배포를 위한 모델 에지 AI 장치에 배포하기 위한 추론 대기 시간과 모델 크기.
혼합 정밀도는 주로 부동 소수점 숫자를 사용하여 학습 시간을 최적화하는 반면, 양자화는
추론을 위해 학습 후 적용하는 경우가 많습니다.
-
Vs. Bfloat16: 브레인 부동 소수점
(Bfloat16)은 Google 개발한 대체 16비트 형식입니다. 표준
IEEE 754 FP16과 달리 Bfloat16은 FP32와 동일한
지수 범위를 유지하여 공격적인 손실 스케일링 없이도 언더플로우에 대해 더 강력합니다. 일반적으로
혼합 정밀도 훈련에서
TPU 및 최신 GPU의 혼합 정밀도 훈련에 주로 사용됩니다.
다음과 같은 프레임워크에서 지원 PyTorch AMP와 같은 프레임워크에서 지원되는 혼합 정밀도는 고성능 딥 러닝에 대한 액세스를 대중화하는 가장 효과적인 방법 중 하나입니다,
개발자가 접근 가능한 하드웨어에서 복잡한 모델을 훈련할 수 있게 해줍니다.