pytorch 관련 compile 기능 정리....

1. 정적 그래프의 시대: TorchScript (torch.jit.script, torch.jit.trace)

PyTorch는 처음부터 “동적 그래프(Dynamic Graph)”를 강조했습니다. 코드가 실행될 때마다 연산 그래프가 실시간으로 생성되어 디버깅이 쉽고 유연하다는 장점이 있었죠. 하지만 프로덕션 환경에서 모델을 배포하거나, 파이썬 인터프리터의 오버헤드를 줄여 최고 성능을 내기 위해서는 정적인 그래프(Static Graph)가 필요했습니다.

이러한 필요성에서 PyTorch 1.0과 함께 TorchScript가 등장했습니다.


2. 동적 그래프 컴파일의 혁신: torch.compile 시대

TorchScript는 중요한 역할을 했지만, 파이썬의 동적인 특성과 타협해야 하는 부분이 많아 개발자들이 아쉬움을 느끼는 지점이 있었습니다. 이에 PyTorch는 2.0에서 torch.compile을 필두로 한 새로운 컴파일러 스택을 도입하며 혁신을 꾀했습니다. 목표는 하나였습니다: “파이썬의 유연성을 유지하면서도 컴파일의 성능 이점을 모두 누리게 하자!”


3. 중간 다리 역할: torch.fxTorch-MLIR

torch.compile이 파이썬 코드를 컴파일하는 상위 레벨의 인터페이스라면, 그 밑단에서는 모델의 중간 표현을 다루고 다양한 백엔드로 변환하는 중요한 도구들이 작동합니다.


마치며

PyTorch의 컴파일러 스택은 계속 진화하고 있으며, torch.compile은 그 중심에서 파이썬의 유연성과 컴파일된 코드의 성능을 동시에 제공하고자 합니다. torch.fx는 이 과정에서 중요한 중간 표현 역할을 하고, Torch-MLIR은 MLIR이라는 강력한 인프라를 활용하여 PyTorch 모델을 더 넓은 범위의 하드웨어에서 효율적으로 실행할 수 있도록 돕는 다리 역할을 합니다.

이러한 도구들을 이해하면 PyTorch 모델을 더 깊이 있게 최적화하고 원하는 배포 환경에 맞춰 활용할 수 있는 인사이트를 얻으실 수 있을 거예요.