Mixed Precision - fp16으로 학습하기
딥러닝 학습을 할 때 실수를 표현하는 방법으로 FP32(single precision)를 사용한다.
FP 뒤 32는 32bit를 사용하여 실수를 저장한다는 의미이다.
따라서 FP16(Half Precision)을 사용한다면 GPU를 더 효율적으로 활용하고 연산 속도도 빨라진다.
하지만 당연히 정밀도가 떨어져 오차들이 누적되면 제대로 정답에 수렴하지 못할 수도 있다.
이 한계를 극복하기 위해 나온 Mixed Precision Training을 활용하여 더 빠르고 효율적인 학습을 해보았다.
사용방법
https://github.com/hoya012/automatic-mixed-precision-tutorials-pytorch
위 깃허브 주소에 가면 잘 정리되어 있다.
Before (기존)
for batch_idx, (inputs, labels) in enumerate(data_loader):
self.optimizer.zero_grad()
outputs = self.model(inputs)
loss = self.criterion(outputs, labels)
loss.backward()
self.optimizer.step()
After (fp16)
""" define loss scaler for automatic mixed precision """
scaler = torch.cuda.amp.GradScaler()
for batch_idx, (inputs, labels) in enumerate(data_loader):
self.optimizer.zero_grad()
with torch.cuda.amp.autocast():
outputs = self.model(inputs)
loss = self.criterion(outputs, labels)
# Scales the loss, and calls backward()
# to create scaled gradients
self.scaler.scale(loss).backward()
# Unscales gradients and calls
# or skips optimizer.step()
self.scaler.step(self.optimizer)
# Updates the scale for next iteration
self.scaler.update()
Author And Source
이 문제에 관하여(Mixed Precision - fp16으로 학습하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoonene/Mixed-Precision-fp16으로-학습하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)