PyTorch 내부 구조 13 - Fused Operator는 언제 가치가 있는가
fused op는 launch overhead 감소뿐 아니라 메모리 접근과 intermediate materialization을 줄이기 위해 설계된다
왜 연산을 합칠까
fused operator는 보통 다음을 줄이기 위해 등장한다.
- kernel launch overhead
- intermediate tensor materialization
- 불필요한 global memory traffic
즉 fusing의 핵심은 "연산 수를 줄였다"보다 "메모리 왕복을 줄였다"에 가깝다.
하지만 항상 좋은 것은 아니다
- code complexity가 크게 늘 수 있다
- backward 구현이 어려워진다
- operator semantics를 기존과 맞추기 어렵다
그래서 fusion은 hotspot이 명확할 때 적용하는 편이 좋다.
다음 글에서는 AMP, autocast, numerical stability를 본다. 고성능 operator는 dtype과 안정성 문제를 함께 관리해야 한다.