autograd를 API로만 보면 안 된다

loss.backward()는 한 줄이지만 내부에서는 꽤 많은 일이 일어난다.

  • forward 중 연산 그래프가 구성된다
  • 필요한 tensor와 metadata가 저장된다
  • backward 시점에 dependency를 따라 gradient가 전파된다

즉 autograd는 "자동 미분 함수"가 아니라 그래프 실행 엔진에 가깝다.

중요한 구성 요소

  • grad_fn: 어떤 연산이 이 tensor를 만들었는지
  • saved tensors: backward에 필요한 중간 값
  • leaf tensor / requires_grad 상태
  • engine scheduler: backward task를 어떤 순서로 실행할지

이 구조를 알아야 gradient가 왜 끊겼는지, 왜 메모리가 늘었는지, 왜 custom backward가 필요한지 판단할 수 있다.

실무에서 만나는 질문

  • in-place 연산이 왜 autograd를 깨뜨릴까
  • detach는 그래프를 어디서 끊는가
  • checkpointing은 saved tensor 전략을 어떻게 바꾸는가
  • 여러 output을 가진 op는 backward를 어떻게 구성할까

이런 질문은 결국 그래프와 saved state 모델로 돌아간다.

다음 글에서는 custom autograd function을 본다. 이 계층은 PyTorch가 기본 제공하지 않는 연산 semantics를 직접 정의하는 첫 관문이다.