PyTorch 내부 구조 05 - Autograd Graph와 Engine은 어떻게 동작하는가
autograd는 단순 미분 기능이 아니라 연산 그래프와 gradient propagation을 조직하는 런타임이다
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를 직접 정의하는 첫 관문이다.