두 method, 무한 power
PyTorch 의 모든 neural network 컴포넌트 — single linear layer 부터 70B-parameter transformer 까지 — 가 nn.Module. subclass 하기가 이 framework 에서 쓸 가장 중요한 Python pattern, 계약을 박아둬:
__init__override. 항상super().__init__()먼저. 자식 module 과 parameter 를self에 할당해서 만들기 (예:self.layer1 = nn.Linear(10, 20)). PyTorch 가__setattr__후크해서 등록.forward(self, x, ...)override. 계산 정의. 직접 호출 절대 안 함 — module instance 를 함수처럼 호출:model(x),model.forward(x)아님. instance 호출이__call__통과해서 등록된 hook 발사, 자식의 train/eval mode 처리, autograd 기계장치 적절히 thread.
무료로 얻는 것
model.parameters()— 얼마나 nested 되어 있든 모든 learnable tensor iterator.model.named_parameters()— 동일, dotted-path name 첨부.model.to(device)— 모든 parameter AND buffer 를 device 로 이동.model.train()/model.eval()— 신경 쓰는 자식의 행동 뒤집기 (Dropout, BatchNorm).model.state_dict()/load_state_dict()— serialization-ready 모든 parameter 와 buffer 의 dict.
이 모든 게 nn.Module 기계장치 사용에 의존 (self 에 할당, collection 엔 plain Python list 대신 nn.ModuleList, raw learnable tensor 엔 nn.Parameter). 빼먹으면 auto-magic 이 silently 멈춤.