PyTorch에서 Python으로 학습한 모델을 TorchScript로 변환하면, C++(LibTorch) 환경에서도 모델을 로드해 추론할 수 있습니다.
하지만 모델 내부에 torch_scatter, torch_fpsample 같은 커스텀 연산(custom operator) 이 포함되어 있다면, 단순히 .pt 파일만 로드하는 것으로는 부족합니다.
이 글에서는 torch_scatter, torch_fpsample 사례를 통해 TorchScript와 C++에서의 커스텀 연산 지원 조건과 방법을 정리했습니다.
torch_scatter는 PyTorch 확장 라이브러리로, 이미 C++/CUDA 연산 등록이 되어 있습니다.Unknown builtin op: torch_scatter::... 오류가 발생합니다.torch_fpsample은 Farthest Point Sampling(FPS) 연산을 제공하는 확장 라이브러리입니다.sample_farthest_points 같은 TorchScript 호환 FPS 연산을 사용하는 것이 안정적입니다.C++ 연산 등록
TORCH_LIBRARY 매크로를 사용해 네임스페이스와 연산 시그니처를 등록해야 합니다.
예시:
TORCH_LIBRARY(my_ops, m) {
m.def("warp_perspective(Tensor img, Tensor M) -> Tensor", warp_perspective);
}
공유 라이브러리 빌드
.so/.dll 형태로 빌드하고, Python에서는 torch.ops.load_library로, C++에서는 런타임에 로드되도록 설정해야 합니다.TorchScript 내보내기
.pt에 포함시킵니다.C++ 실행
torch::jit::load("model.pt")로 모델을 불러오기 전, 커스텀 연산 라이브러리가 반드시 로드되어 있어야 합니다.torch.ops.load_library 호출 후 TorchScript 변환이 정상 동작하는지 검증torch-scatter 확장 라이브러리가 설치·로드되어 있어야 함.