PyTorch 내부 구조 04 - Dispatcher와 Operator Registry는 무엇을 하는가
같은 operator 이름 아래 여러 backend와 여러 역할의 구현을 연결해 주는 중심 계층이 dispatcher다
왜 dispatcher가 중요한가
PyTorch에서 add, matmul, layer_norm 같은 연산 이름은 하나처럼 보이지만 실제 구현은 여러 개일 수 있다.
- CPU 구현
- CUDA 구현
- Autograd 관련 구현
- Meta / shape inference 구현
- sparse나 special backend 구현
이 중 어떤 구현을 호출할지 결정하는 중심이 dispatcher다.
dispatcher를 어떤 관점으로 볼까
dispatcher는 단순 함수 테이블이 아니다. tensor의 device, dtype, layout, dispatch key set을 바탕으로 적절한 kernel을 고르는 런타임 계층이다.
이 계층을 이해해야:
- custom op를 제대로 등록할 수 있고
- 왜 어떤 backend로 빠지는지 추적할 수 있고
- autograd와 backend 구현이 어떻게 결합되는지 볼 수 있다
operator registry는 무엇을 담는가
operator schema, backend별 구현, aliasing 정보, sometimes meta 함수 같은 정보가 연결된다. 즉 operator는 "이 이름의 함수 하나"라기보다 "여러 상황에서 호출될 수 있는 계약과 구현 묶음"이다.
실무에서 중요한 이유
custom extension을 만들 때 forward kernel만 작성해서 끝나는 것이 아니다. schema를 어떻게 정의할지, 어떤 backend key에 등록할지, autograd는 별도로 둘지까지 함께 봐야 한다.
다음 글에서는 autograd graph와 engine을 본다. dispatcher가 연산 실행 경로를 잡아준다면, autograd는 그 연산 결과가 backward에서 어떻게 다시 연결될지를 관리한다.