모든 PyTorch training step 이 같은 다섯 줄
이 리듬 외워. 경력 동안 만 번 쓸 거고, 절대 안 변해:
optimizer.zero_grad()— 이전 step 누적 gradient 비우기.output = model(batch)— forward pass. autograd graph 짓기.loss = criterion(output, target)— scalar loss 계산.loss.backward()— backward pass. 모든 leaf 의.grad채우기.optimizer.step()— gradient 로 update rule 적용.
순서 비협상. forward 는 loss 전, loss 는 backward 전, backward 는 step 전, step 은 gradient 존재 후, zero_grad 는 모든 거 전 (또는 이전 iteration 끝). 섞으면 silent 버그.
다섯 단계 wrap 하는 것
- epoch 위 outer loop (dataset 한 번 full pass).
- DataLoader 의 batch 위 inner loop.
- 각 epoch 위에
model.train()(또는 loop 전 한 번, training 이 default mode). - 주기적 evaluation pass (
model.eval()+torch.inference_mode()사용).
그게 전체 skeleton. 다른 모든 거 — scheduler, gradient clipping, mixed precision, logging, checkpointing — 가 이 다섯 단계 위 layer.