LibTorch

LibTorch는 C++ 인터페이스를 제공하는 PyTorch의 라이브러리이다. 이를 설치하면 PyTorch의 모든 기능을 사용할 수 있다.
파이썬 기반의 모델 서빙 말고, C++에서 활용 가능한 멀티스레드와 같은 기능을 사용하려면 LibTorch를 설치해야 한다.
이 작업은 CMakeLists.txt 파일을 통해 빌드하는 방식으로 진행한다. 따라서 CMake를 먼저 설치해야 한다.
CMake 설치는 인터넷에 많이 나오므로, 그 내용은 생략한다.

LibTorch 설치

먼저 PyTorch 공식 홈페이지에서 설치 가이드를 참고해 설치한다.
Locally하게 다운받아도 되지만, 터미널에서 아래 명령을 실행해도 된다. (2.4.1 버전 기준)
그 전에 앞서 tutorial-model이라는 폴더를 생성하여 그 안에서 작업한다.

wget https://download.pytorch.org/libtorch/cpu/libtorch-macos-arm64-2.4.1.zip
unzip libtorch-macos-arm64-2.4.1.zip

압축까지 풀었다면 아래와 같은 폴더 구조가 생성된다.

tutorial-models/
    libtorch/
    ├── bin/
    ├── include/
    ├── lib/
    └── share/
    libtorch-macos-arm64-2.4.1.zip

작업 폴더 설정

이제 tutorial-models 폴더 안에서 test 폴더를 하나 만들고, 그 안에서 CMakeLists.txt 파일을 생성한다.
그리고 아래 내용을 추가한다.

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(your_project_name)

find_package(Torch REQUIRED)

add_executable(your_app_name your_source_file.cpp)
target_link_libraries(your_app_name "${TORCH_LIBRARIES}")
set_property(TARGET your_app_name PROPERTY CXX_STANDARD 17)

지금 예시에서는 your_project_name과 your_app_name을 임의로 설정한 것이다.
test 폴더 아래에서 main.cpp 파일을 생성한다면 CMakeLists.txt 파일 내용을 아래와 같이 변경한다.

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(test)

find_package(Torch REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main "${TORCH_LIBRARIES}")
set_property(TARGET main PROPERTY CXX_STANDARD 17)

참고로 main.cpp 파일은 아래와 같이 작성해본다.

#include <torch/script.h>
#include <iostream>

int main() {
    std::cout << "LibTorch test program" << std::endl;

    // 텐서 생성
    torch::Tensor tensor = torch::rand({2, 3});
    std::cout << "Random Tensor:\n" << tensor << std::endl;


    // 간단한 연산 수행
    torch::Tensor result = tensor.sum();
    std::cout << "Sum of elements: " << result.item<float>() << std::endl;

    // 행렬 곱셈 예제
    torch::Tensor matrix1 = torch::rand({2, 2});
    torch::Tensor matrix2 = torch::rand({2, 2});
    torch::Tensor matrix_product = torch::mm(matrix1, matrix2);

    std::cout << "Matrix 1:\n" << matrix1 << std::endl;
    std::cout << "Matrix 2:\n" << matrix2 << std::endl;
    std::cout << "Matrix Product:\n" << matrix_product << std::endl;

    return 0;
}

빌드

이제 test 폴더 아래에서 빌드를 진행한다. 터미널에서 아래 명령을 실행한다.

mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=/path/to/libtorch ..
cmake --build . --config Release

이때 -DCMAKE_PREFIX_PATH 인자는 앞서 다운받은 libtorch 폴더의 경로를 입력해야 한다.
Mac OS의 경우 아래와 같이 입력하면 된다.

cmake -DCMAKE_PREFIX_PATH=~/{libtorch가 설치된 절대경로}/libtorch ..

실행

빌드가 완료되면 아래 명령을 실행해 실행 파일을 실행한다.

./main

결과

LibTorch test program
Random Tensor:
 0.9415  0.2037  0.5647
 0.5983  0.6339  0.3127
[ CPUFloatType{2,3} ]
Sum of elements: 3.25485
Matrix 1:
 0.7028  0.4906
 0.2590  0.5149
[ CPUFloatType{2,2} ]
Matrix 2:
 0.9533  0.2897
 0.6419  0.4006
[ CPUFloatType{2,2} ]
Matrix Product:
 0.9850  0.4002
 0.5775  0.2813
[ CPUFloatType{2,2} ]

결론

  • Mac OS에서 Libtorch는 C++ 17 이상의 std 기능이 필요하다.
  • LibTorch의 경로는 절대 경로를 입력해주는 것이 좋다.