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의 경로는 절대 경로를 입력해주는 것이 좋다.