부동소수점(숫자를 표현하는 방식)이 FP32 인 경우 많은 메모리를 차지해 학습 속도가 느려질 수 있음
그렇다고 FP16 만 쓰자니 학습 성능이 낮아짐(loss 높아짐)
이를 해결하기 위해 FP16 으로 연산하면 빨라지는 부분들(linear layer, conv layer 등)은 FP16 으로 연산하고 나머지는 FP32 를 쓰는 mixed precision 방법 채택 : 이것이 Autocast
forward 연산에서 FP16으로 계산하면 backward 에서도 FP16으로 연산하는데, 이때 gradient 값이 너무 작아서 fp16으로 표현이 안됨, 즉 underflow 발생
그래서 backward 시 fp32로 바꿔주는 게 : GradScaler
torch.cuda.amp 에서 가져와서 쓰면 됨~