GPU Kernel 하나를 띄울 때마다 드는 고정비용. kernel마다 두 가지 비용
- CPU가 띄우는 비용
- 결과를 GPU 메모리(HBM)에 썼다가 다음 kernel이 다시 읽는 비용
작은 kernel이 많으면, 예를 들어 작은 배치로 decode할 때는 GPU 계산보다 이 비용이 더 커진다. eager PyTorch에서는 연산 하나(add, mul, gelu …)가 kernel 하나
Kernel Fusion
여러 연산을 kernel 하나로 하고 중간값이 레지스터에만 머물러 memory hbm 왕복없다
CUDA Graph
kernel 수십 개를 띄우는 순서를 한 번 녹화해 두고, 다음부터는 CPU 호출 한 번으로 통째로 다시 돌림. 그래서 CPU가 띄우는 비용을 줄임
torch.compile()
Python 모델을 computation graph로 잡은 뒤(Dynamo), 컴파일러(Inductor)가 graph를 보고 합칠 수 있는 연산을 Triton kernel로 fusion해요. mode="reduce-overhead"를 주면 결과를 CUDA graph로도 감싼다

Seonglae Cho