Stats & AI tech blog - '일단 시도함'

[ML/DL] Mixed Precision Training (혼합 정밀도 훈련) 본문

Statistics & AI/Deep Learning

[ML/DL] Mixed Precision Training (혼합 정밀도 훈련)

justdoit ok? 2024. 5. 3. 15:47

1. 혼합 정밀도 훈련(Mixed Precision Training)이란?

 

딥러닝에서는 일반적으로 신경망의 크기가 커질 수록 성능이 향상되는 특징을 가진다. 반면에, 모델이 복잡해질수록 메모리와 컴퓨팅에 대한 문제가 발생하게 된다.

혼합 정밀도 훈련(Mixed Precision Training)은 모델의 정확도와 파라미터에 영향을 끼치지 않고, 메모리 요구사항을 줄이고 GPU에서 산술 속도를 높일 수 있는 신경망 훈련 방법이다.

 

혼합정밀도 훈련은 모델 학습 과정에서 부동 소수점 연산의 정밀도를 혼합하여 사용하는데, 일반적으로는 반 정밀도(16비트 부동 소수점, FP16)단 정밀도(32비트 부동 소수점, FP32)를 혼합하여 사용한다.

 

일반적으로 딥러닝에서는 FP32연산이 사용되는데, FP32연산은 메모리 사용량이 많고 연산 속도가 느리기 때문에 모델 학습에 많은 리소스를 필요로 하게 된다. 그래서 혼합 정밀도 훈련에서는 상대적으로 메모리 사용량이 적고 연산 속도가 빠른FP16를 연산에 혼합하여 학습을 가속화한다.

 

http://52.141.58.118/wordpress/152

 

 

 

2. 그래디언트 스케일링 (Gradient Scaling)

 

FP16연산을 사용하게 되면 학습 중에 오버플로우(overflow)나 언더플로우(underflow) 문제가 발생할 수 있다.

 

  • 오버플로우(overflow) : 연산 결과가 데이터 타입이 표현할 수 있는 최대 값보다 큰 경우 발생. 연산 결과가 부정확해지거나 무한대로 수렴할 수 있음.
  • 언더플로우(underflow) : 연산 결과가 데이터 타입이 표현할 수 있는 최소 값보다 작은 경우 발생. 연산 결과가 부정확해지거나 0으로 수렴할 수 있음.

 

이런 문제가 발생하면 Gradient가 너무 크거나 작아져서 학습이 불안정해지기 때문에, Gradient를 조정하는 그래디언트 스케일링 (Gradient Scaling)이라는 방법을 사용하게 된다.

 

일반적으로는 Gradient를 계산한 후에 스케일링 팩터(Scale factor)를 곱해서 Gradient를 조정한 후 가중치를 업데이트하는 과정으로 오버플로우, 언더플로우를 방지해준다.

http://52.141.58.118/wordpress/152

 

 

 

3. 자동 혼합 정밀도 (AMP, Auto Mixed Precision)

 

PyTorch에서 제공하는 혼합 정밀도 훈련을 위한 솔루션이다. torch.cuda.amp()

몇 줄의 코드로 GPU의 혼합 정밀도로 이동할 수 있어서 훈련 시간을 단축하고 메모리 요구 사항을 감소시키는데 사용할 수 있다.