Forward 가 실제 뭘 의미하나
Forward pass 는 input data x 를 모든 layer 통과시켜 순서대로 output y (logit, probability, embedding — head 가 반환하는 무엇이든) 를 만드는 행위. 도중에 PyTorch 가 모든 operation 을 computation graph 에 기록해서 backward 가 나중에 gradient 계산할 수 있게 해. 본인 forward() method 가 올바르게 해야 할 유일한 일이야.
forward() 는 model(x) 할 때 자동 호출. 절대 model.forward(x) 직접 호출하지 마 — normalization mode, gradient tracking, DDP synchronization 같은 hook 을 건너뛰게 돼.
forward() 쓰면, 모든 중간 tensor 의 shape 를 line 옆에 적어. 미래 본인 (그리고 본인 model 디버깅하는 다음 사람) 이 고마워할 거야.Train mode vs eval mode
일부 layer 는 training 과 evaluation 에서 다르게 행동: dropout (train 에서 active, eval 에서 identity), batch normalization (train 에서 batch statistics, eval 에서 running statistics). model.train() 과 model.eval() 로 switch. Validation 에서 eval() 잊는 게 noisy metric 만드는 유명한 버그 — training-loop track 에서 다시 볼 거야.
Gradient 필요 없으면 멈춰
Inference 와 transfer learning 의 frozen backbone 에는 forward call 을 torch.no_grad() (또는 latest, fastest path 인 torch.inference_mode()) 로 wrap. PyTorch 가 computation graph 안 만들고 묶였을 memory 풀어줘.
.forward() 가 아니라 model 호출, inference 에 eval() switch, gradient 필요 없을 때 inference_mode() 사용.