혼합 정밀도 훈련은 딥러닝에서 여러 수치 정밀도를 사용하여 신경망 훈련 중 계산 효율성을 높이고 메모리 사용량을 줄이면서도 모델 품질을 희생하지 않는 기법입니다. 모든 텐서에 대해 32비트 부동 소수점(FP32)과 같은 단일 고정밀도 형식을 사용하는 대신, 혼합 정밀도 훈련은 정밀도 감소가 허용되는 연산에서는 16비트 부동 소수점(FP16) 또는 bfloat16(BF16)과 같은 저정밀도 형식을 선택적으로 사용하고, 정확성을 유지하기 위해 가중치의 마스터 복사본은 FP32로 유지합니다. 이 접근 방식은 [large-language-model|대규모 언어 모델]]을 포함한 대규모 모델 훈련에서 표준 관행이 되었으며, 최신 하드웨어에서 훈련을 가속화하고 동일한 메모리 제약 내에서 더 큰 배치 크기나 모델 크기를 가능하게 합니다.
핵심 아이디어는 특히 순방향 및 역방향 패스 중에 기울기 누적과 가중치 업데이트 같은 중요한 구성 요소를 신중하게 처리한다면, 많은 신경망 연산이 수치 정밀도 감소에 관대하다는 관찰에서 비롯되었습니다. 저정밀도 연산에 대한 하드웨어 지원을 활용함으로써, 혼합 정밀도 훈련은 GPU 및 특수 가속기에서 중요한 속도 향상을 달성할 수 있으며 인공지능 분야에서 필수 도구가 되고 있습니다.
역사적 발전
신경망 훈련에 감소된 정밀도를 사용하는 개념은 2010년대 초반으로 거슬러 올라갑니다. 당시 연구자들은 고정소수점과 16비트 형식을 실험했습니다. 그러나 2017일에만 체계적인 프레임워크가 NVIDIA와 바이두 연구소(목록에 없음)에서 소개되었습니다. Paulius Micikevicius 등 (2018)의 기념비적 논문 '혼합 정밀도 훈련'은 NVIDIA에서 핵심 요소를 확립했습니다: FP32 마스터 가중치 유지, FP16을 사용한 순방향 및 역방향 계산, 그리고 하위 흐름을 방지하기 위한 손실 스케일링입니다. 이 작업은 PyTorch와 TensorFlow 같은 프레임워크에서 광범위한 채택의 기반을 마련했습니다.
그 이후, 혼합 정밀도 훈련은 Google DeepMind와 Google에서 소개한 bfloat16의 도입으로 진화했으며, FP16보다 더 큰 가변 범위를 제공하여 손실 스케일링의 필요성을 줄입니다. AMD, Intel, 그리고 Arm Holdings의 최신 하드웨어는 이러한 형식을 지원하며 점점 더 주류 훈련 파이프라인에 혼합 정밀도를 통합하고 있습니다.
기술적 기초
혼합 정밀도 훈련은 저장 정밀도와 계산 정밀도 간의 구분에 의존합니다. 일반적인 구현에서 가중치는 FP32로 마스터 복사본으로 저장되지만, 각 순방향 및 역방향 패스를 위해 FP16 또는 BF16 복사가 생성됩니다. 활성화 및 기울기는 이전 정밀도에서 계산되어 메모리 대역과 연산 비용을 줄입니다. 그러나 (특히 FP16에서) 기울기 하위플로우를 방지하기 위해 역전파 전에 손실에 스케일링 인자가 적용되고, 가중치 업데이트 전에 기울기가 스케일 해제됩니다. 마스터 가중치는 FP32로 업데이트되어 작은 기울기 업데이트가 손실되지 않습니다.
또 다른 중요한 요소는 벡터화된 연동 및 텐서 코어의 사용로, GPU에서 혼합 정밀도 행렬 곱셈을 고속으로 수행하는 특수 하드웨어 장치입니다. 또한 NVIDIA의 Volta 및 후속 아키텍처는 FP16 입력을 처리하고 FP32로 누적 결과를 수행하는 텐서 코어를 도입하여 괄목할만한 처리량 우위를 제공했습니다. 마찬가지로, AMD와 Intel도 자사 가속기에 유사한 기능을 포함했습니다.
이점과 상대
혼합 정밀도 훈련의 주된 이점은 메모리 사용량이 감소하는 것입니다. FP16 또는 BF16을 활성화 및 그래프에 사용하면 FP32에 비해 필요한 메모리가 절반으로 줄어들어 더 큰 배치 크기, 더 높은 해상도 입력 또는 더 깊은 모델을 힘들게 합니다. 이는 수십억 매개변수를 가진 대규모 언어모델을 훈련하는 데 특히 유용하며, 여기서 메모리 제약은 주요 병목입니다.
속도 측면에서 혼합 정밀도는 호환 하드웨어에서 훈련을 2~3배 가속할 수 있으며, 저정밀도 연산이 더 빠르고 메모리 이동이 줄어듭니다. 이 속도 벤트는 반복적 실험과 제품 환경에서 배포 시간을 줄이는 데 중요합니다.
그러나 절충이 있습니다. 감소된 정밀도는 기울기 크기가 작은 모델에서 특히 잘 관리되지 않으면 수치 불안을 유시할 수 있습니다. 손실 스케일링은 이를 완화하지만 복잡성을 추가합니다. 또한 모든 작업이 동일하게 이익을 얻드는 않습니다; 배수 반정규화 같은 일부 층은 정확성을 유지하기 위해 더 높은 정밀도해야 할 수 있습니다. 따라서 혼합 정밀도 훈련은 종종 특정 연스를 FP32로 유지하는 선택적 정밀도 할당을 포함합니다.
프레임워크 구현
현대 딥러닝 프레임워크는 혼합 정밀도 훈련을 일류 기능으로 통합하고 있습니다. [[pytorch] (목록에 없지만 널리 사용)에서 torch.cuda.amp 모듈은 손실 스케일링을 위한 GradScaler와 함께 자동 혼합 정밀도(AMP)를 제공합니다. 마찬가지로, [tensorflow 또한 tf.keras.mixed_precision API를 제공합니다. 이 도구들은 안전한 위치에서 연동을 자동으로 저정밀도로 변환하여 개발자 부에 느낌을 줄여줍니다.
예를 들어, PyTorch에서는 혼합 정밀도 활성화는 torch.cuda.amp.autocast()로 순방향 워크를 감싸고 GradScaler를 활용하면 몇 줄의 코드만으로 가능합니다. 이러한 용이성은 연구와 산업 모두에 혼합 정밀도의 광범위한 채택에 기여했다.
대규모 AI 적용
혼합 정밀도 훈련은 트랜스포머 및 대규모 언어모델과 같은 최첨단 모델 훈련에 필수입니다. OpenAI, Anthropic, 그리고 Google DeepMind 같은 회사는 수백억 매라미터가 있는 모델을 훈련하기 위해 혼합 정밀도에 의존합니다. 예를 들어, GPT-3 같은 모델을 훈련하는 것은 혼합 정밀도 파밍 시 메모리 및 연산 불가능하지 않을 것입니다.
언어 모델 이외에도 혼합 정밀도는 컴퓨터 비전, 음성 인식, 그리고 강화 학습에도 사용됩니다. 또한 지역 trainium 및 Cerebras 같은 특수 하드웨어에서 훈련을 위한 핵심 강점기이며, 해당 하드웨어는 혼합 정밀도를 염두에 두고 설계되었습니다.
하드웨어 지원 및 최적화
하드웨어 주로 혼합 정밀도 지원에 많이 투자했습니다. 2017년 Volta 아키텍처에서 소개된 NVIDIA의 텐서 코어가 대표적인 예입니다. AMD는 CDNA 아키텍처에 유사한 기능을 도입했습니다, 그리고 intel은 은 Xe GPU에 지원을 추가했습니다. Google Cloud 및 기타 클라우드 제공자는 이러한 가속기르는 인스턴스를 제공하여 더 넓은 대상에게 혼합 정밀도를 접근 가능하게 합니다.
뿐만 아니라, TSMC 및 다른 반도체 제조업체는 저정밀도 연동을 좋게 위해 칩 필요를 최적화했습니다. 장기간 하드웨어 직관과 소프트웨어의 협력은 혼합 정밀도의 이점을 실현하는 데 중요한 도움을 주었습니다.
과제와 미래 방향
그 장점에도 불구하고 혼합 정밀도 훈련은 문제를 마주합니다. 하나는 손실 스케일링 요소의 세밀한 조정 필요성이며, 이는 모델과 데이터에 따라 변화할 수 있습니다.. 또 다른 것은 특히 정밀에 민감한 반복 가중이나 주의 메인니티 연결이 있는 아키텍처의 정확성 저하 가능성입니다.
연구는 훈련 단계나 기울기 통계에 기반하여 정밀도를 동적으로 조정하는 적응 정밀 기술을 개발 중입니다. 또한, FP8 같은 새로운 형식이 더 큰 독성을 위해 탐구되고 있으며, NVIDIA 및 AMD의 초기 하드웨어 지원이 있습니다. 모델 크기가 계속 성장함에 따라 혼합 정밀도는 기계학습 에서 계속 중요한 혁신 분야로 남을 것입니다.
결론
혼합 정밀도 훈련은 정확성을 손실하지 않고 더 빠르고 메모리 효율적인 신경망 훈련을 통해 딥러닝 모델을 훈련하는 방식 초래했습니다. 현대 하드웨어에서 저정밀도 산술을 활용함으로써 대규모 AI 개발의 초석이 되었습니다. 하드웨어 및 소프트웨어가 계속 발展함에 따라 혼합 정밀 기법은 더욱 정교해 질 것이며, 인공지능에서 가능한 한계를 더욱 나아가게 될 것입니다.
참조
- Micikevicius, P., et al. (2018). Mixed Precision Training. International Conference on Learning Representations.
- NVIDIA Developer Blog. (2017). Mixed-Precision Training of Deep Neural Networks.
- Google AI Blog. (2019). bfloat16: The Secret to High Performance on Cloud TPUs.