혼합 정밀도 학습 (Mixed Precision Training)

컴퓨터과학·AI
한 줄 정의: 신경망 학습 시 일부 연산은 낮은 정밀도(예: 16비트)로, 일부는 높은 정밀도(예: 32비트)로 수행해 속도와 메모리 효율을 높이면서도 정확도 손실을 최소화하는 기법.

쉽게 풀면

컴퓨터에서 숫자를 표현할 때 더 적은 비트를 쓰면 계산도 빨라지고 메모리도 덜 차지하지만, 정밀도가 떨어져 오차가 생길 위험이 있다. 혼합 정밀도 학습은 이 둘의 장점을 절충한 방법으로, 대부분의 연산은 16비트처럼 가벼운 형식으로 빠르게 처리하되, 정밀도가 중요한 일부 단계(예: 그레이디언트 누적)만 32비트로 유지해서 정확도 손실을 막는다. 이 방식은 앞서 설명한 텐서 코어와 궁합이 좋아 최신 GPU에서 학습 속도를 크게 높여준다.

왜 중요한가

딥러닝 모델이 대형화되면서 학습에 필요한 연산량과 메모리 요구량이 급격히 늘어났고, 이는 연구 재현과 실무 적용 모두에 큰 비용 부담으로 이어진다. 혼합 정밀도 학습은 정확도 저하를 최소화하면서 학습 속도를 높이고 GPU 메모리 사용량을 줄일 수 있어, 대규모 언어모델이나 비전 모델을 다루는 논문에서 실험을 현실적인 시간과 자원 안에서 수행하기 위한 표준적인 기법으로 자리잡았다.

논문에서는 이렇게 쓰입니다

"FP16 혼합 정밀도 학습을 적용하여 학습 시간을 40% 단축하였다."

낮은 정밀도의 숫자 형식을 활용해 GPU 연산 속도를 끌어올림으로써 전체 학습에 걸리는 시간을 크게 줄였다는 뜻이다.

"BF16 혼합 정밀도를 사용함으로써 FP16 대비 손실 스케일링 없이도 학습이 안정적으로 수렴하였다."

대규모 언어모델 사전학습 논문에서는 지수 범위가 더 넓은 BF16 형식을 채택해 그레이디언트 언더플로 문제를 줄이고 학습 안정성을 높였다는 취지로 이런 표현이 자주 쓰인다.

"혼합 정밀도 학습을 통해 배치 크기를 두 배로 늘릴 수 있었으며, 이는 동일한 GPU 자원에서 처리량을 크게 향상시켰다."

이는 메모리 사용량 절감이 단순히 속도 향상뿐 아니라 더 큰 배치 크기나 더 큰 모델을 학습할 수 있게 해주는 효과로도 이어진다는 것을 보여주는 서술이다.

조금 더 깊게 보면

혼합 정밀도 학습에서는 낮은 정밀도로 계산한 그레이디언트가 너무 작아 0으로 표현되어 버리는 언더플로 문제를 막기 위해 손실 스케일링(loss scaling) 기법을 함께 사용하는 것이 일반적이며, 최근 프레임워크는 이를 자동으로 조절하는 동적 손실 스케일링을 기본 제공한다. 또한 FP16과 BF16은 표현 방식이 달라 트레이드오프가 존재하는데, FP16은 정밀도가 높지만 표현 가능한 값의 범위가 좁고, BF16은 범위가 넓어 안정성이 높은 대신 정밀도가 다소 낮다는 특성이 있다.

주의할 점

혼합 정밀도 학습은 잘못 설정하면 그레이디언트 값이 너무 작아 0으로 사라지는 문제가 생길 수 있어, 손실 스케일링 같은 보완 기법이 함께 쓰이는 경우가 많다.

관련 용어