Torch.compile 사용 방법
torch.compile의 가치 제안
torch.compile의 주요 가치는 PyTorch 모델을 컴파일하여 실행 속도를 향상시키는 것입니다. 이는 단순히 모델을 컴파일함으로써 X% 빠르게 실행된다는 직관적인 이점을 제공합니다. 하지만 다양한 사용자들이 torch.compile을 사용하는 과정에서, 실제로 이 가치 제안이 각자의 상황에 어떻게 적용되는지는 미묘한 차이가 있을 수 있음을 발견했습니다. 이 글에서는 torch.compile을 사용하는 다양한 방법과 이러한 사용 사례 내에서 무엇이 효과적이고 무엇이 그렇지 않은지에 대해 설명합니다.
소규모-중간 규모에서의 훈련 효율성 향상
시나리오
PyTorch로 작성된 모델을 소규모에서 중간 규모(예: 1,000개 미만의 GPU)로 훈련하고자 할 때, 모델의 훈련 속도를 개선하고 싶을 때 유용합니다. 로컬에서는 모델을 더 빨리 훈련할 수 있어 개발 속도가 향상되며, 전 세계적으로는 모든 사용자의 모델 훈련 속도가 빨라지면 GPU 사용 시간이 줄어들어 동일한 클러스터 내에서 더 많은 작업을 수행할 수 있습니다. 이는 GPU 자원이 제한된 환경에서도 효율성을 크게 향상시킬 수 있습니다.
해결 방법
torch.compile을 활용하여 모델의 특정 모듈만을 컴파일하는 것이 효과적일 수 있습니다. 전체 모델을 컴파일할 필요 없이, 성능 향상이 큰 특정 모듈을 선택적으로 컴파일함으로써 최적의 결과를 얻을 수 있습니다. 예를 들어, 추천 시스템에서는 임베딩 조회 부분의 최적화로 인한 계산 향상이 크지 않을 수 있으며, 모델 병렬화가 컴파일러에서 처리하기 어려울 수 있기 때문에 이를 비활성화할 수 있습니다.
추가적으로, torch.compile에 대한 자세한 가이드를 제공하는 "missing manual" 문서를 참고하여 컴파일러를 효과적으로 활용하는 방법을 익히는 것이 좋습니다.
오픈 소스 예제
- torchtune
- torchtitan
- torchao
이들 라이브러리는 torch.compile을 사용한 최신 PyTorch 모델의 훈련 예제를 제공하며, 실습을 통해 더 깊이 이해할 수 있습니다.
단점
torch.compile은 사용자에게 단순히 모델을 컴파일하여 성능을 향상시킬 수 있다는 약속이 다소 과장되었을 수 있습니다. 컴파일러의 복잡성으로 인해 사용자는 모델을 torch.compile에 적용하면서 추가적인 복잡성을 감수해야 할 수 있습니다. 그러나 torch.compile의 설계는 점진적으로 도입할 수 있도록 되어 있어, 사용자는 필요한 부분부터 컴파일을 시작할 수 있습니다.
참고 자료
- PyTorch 공식 문서
- 컴파일러 최적화 기법
- Zettelkasten 노트 작성법