[LibTorch 입문] 2편: LibTorch 환경 셋업과 CMake 프로젝트 기초

안녕하세요! 지난 1편에서는 PyTorch와 LibTorch에 대한 개념적인 소개와, 이 시리즈에서 우리가 달성하려는 궁극적인 목표를 알아보았습니다. 이제 실제로 C++ 환경에서 LibTorch를 활용하기 위한 기초 준비를 해볼 차례입니다.

이번 글에서는 다음과 같은 과정을 다룹니다.

  • LibTorch 다운로드 및 설치 위치 정하기: 운영체제(Windows, Linux, macOS)에 따라 설치하는 방법을 안내
  • CMake 기반의 기본 프로젝트 환경 설정:
    • CMakeLists.txt를 작성하는 방법
    • LibTorch 라이브러리를 C++ 프로젝트에 연결하는 법
  • 간단한 “Hello LibTorch” 예제 코드를 통해 C++에서 LibTorch가 정상적으로 동작하는지 확인

이 과정을 마치고 나면, 다음 글(3편)에서 텐서 생성 및 연산을 직접 시도할 준비가 완료됩니다.

사전 준비 사항

이 시리즈를 따라가기 위해서는 다음과 같은 개발 환경이 필요합니다.

  1. 운영체제: Linux(Ubuntu), macOS 또는 Windows (가능한 최신 환경 권장)
    • Windows의 경우 Visual Studio(Community 버전 가능)와 CMake, Ninja 등을 준비하면 좋습니다.
    • Linux나 macOS에서는 대부분 패키지 매니저를 통해 CMake, gcc, clang 등 개발 도구를 쉽게 설치할 수 있습니다.
  2. CMake:
    C++ 프로젝트를 구성하고 빌드하기 위해 CMake를 사용합니다.
  3. 컴파일러:
    • Linux: GCC 혹은 Clang
    • macOS: Clang 기본 제공
    • Windows: MSVC(Visual Studio) 또는 MinGW
      환경에 맞는 컴파일러가 준비되어 있어야 합니다.
  4. LibTorch 바이너리 패키지:
    PyTorch 공식 사이트에서 운영체제 및 CUDA 지원 여부를 선택하여 LibTorch 패키지를 다운받을 수 있습니다.

LibTorch 다운로드하기

LibTorch는 PyTorch 공식 홈페이지에서 다운받을 수 있습니다.

  • 공식 사이트: https://pytorch.org/
  • 사이트 접속 후 "Get Started" → "LibTorch" 항목으로 이동하면 OS, Package(C++), Language(C++), CUDA 지원 여부 등을 선택한 뒤 "Download" 링크를 확인할 수 있습니다.

다운받은 패키지는 압축파일 형태로 제공되며, 해당 압축을 원하는 경로에 풀어놓으면 됩니다. 예를 들어, Linux 기준으로 ~/libtorch 라는 디렉토리 아래에 압축을 풀었다고 가정해봅시다.

압축을 풀면 내부에 include, lib, share 등의 디렉토리가 있으며, 여기에 LibTorch가 사용할 헤더파일, 라이브러리 파일, CMake 관련 설정 파일 등이 들어 있습니다.

주의사항:

  • CPU 전용 버전과 CUDA 지원 버전이 있습니다. CUDA GPU가 있다면 CUDA 버전을 사용할 수도 있지만, 일단은 CPU 전용 버전으로 진행해도 무방합니다.
  • macOS나 Windows 환경에서도 마찬가지로 공식 사이트에서 OS에 맞는 LibTorch 바이너리를 다운로드하고, 적절한 폴더에 압축을 풀어둡니다.

CMake 프로젝트 기본 구조 만들기

이제 C++ 프로젝트 디렉토리를 구성해봅시다. 예를 들어, ~/my_libtorch_project 디렉토리를 하나 만들고, 그 안에 다음과 같은 구조를 잡아봅니다.

my_libtorch_project/
  |- CMakeLists.txt
  |- src/
       |- main.cpp
  • CMakeLists.txt: 프로젝트 빌드 설정을 담는 파일
  • src/main.cpp: 간단한 C++ 예제 코드를 담을 소스 파일

CMakeLists.txt 작성 예제

아래는 기본적인 CMakeLists.txt 예제입니다.
(이 예제에서는 LibTorch를 ~/libtorch 경로에 압축풀었다고 가정합니다.)

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(MyLibTorchApp)

# C++ 표준 설정 (C++11 이상)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# LibTorch 경로 설정
# 아래 경로는 사용자의 시스템에 맞게 변경해주세요.
# 예: set(Torch_DIR "/path/to/libtorch/share/cmake/Torch")
set(Torch_DIR "/home/user/libtorch/share/cmake/Torch")

find_package(Torch REQUIRED)

add_executable(my_app src/main.cpp)
target_link_libraries(my_app "${TORCH_LIBRARIES}")
set_property(TARGET my_app PROPERTY CXX_STANDARD 11)

설명:

  • cmake_minimum_required(VERSION 3.10 FATAL_ERROR): CMake 최소 버전 지정
  • project(MyLibTorchApp): 프로젝트 이름을 MyLibTorchApp로 설정
  • set(CMAKE_CXX_STANDARD 11): C++11 사용
  • set(Torch_DIR "/home/user/libtorch/share/cmake/Torch"): LibTorch가 설치된 디렉토리 설정
    • 여기서 /home/user/libtorch 부분을 실제 LibTorch 설치 경로로 맞춰주어야 합니다.
    • Windows에서는 C:/path/to/libtorch/share/cmake/Torch 식으로 지정하면 됩니다.
  • find_package(Torch REQUIRED): LibTorch 패키지 찾기
  • add_executable(my_app src/main.cpp): my_app 라는 이름의 실행 파일 생성
  • target_link_libraries(my_app "${TORCH_LIBRARIES}"): my_app에 LibTorch 라이브러리 링크

위와 같이 설정하면 CMake가 LibTorch의 헤더와 라이브러리를 인식하고 빌드시 포함하게 됩니다.

간단한 "Hello LibTorch" 코드 예제

src/main.cpp에 아주 간단한 코드를 작성해 봅시다. 이 코드는 LibTorch를 인클루드하고, 텐서 하나를 만들어 출력하는 정도만 해보겠습니다.

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

int main() {
    // 1x3 텐서 하나 만들기
    torch::Tensor tensor = torch::rand({1, 3});
    std::cout << "Random Tensor: " << tensor << std::endl;

    return 0;
}

설명:

  • #include <torch/torch.h>: LibTorch 헤더 파일을 인클루드합니다.
  • torch::rand({1, 3}): 1x3 형태의 텐서를 랜덤한 값으로 초기화합니다.
  • 결과를 표준 출력으로 찍어보면, LibTorch가 정상적으로 동작하는지 쉽게 확인할 수 있습니다.

빌드 및 실행하기

이제 터미널(또는 명령 프롬프트)에서 프로젝트를 빌드해봅시다.

cd ~/my_libtorch_project
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=/home/user/libtorch ..
make
./my_app
  • cmake -DCMAKE_PREFIX_PATH=/home/user/libtorch .. 명령을 통해 CMake에 LibTorch의 상위 경로를 알려줍니다.
    • CMAKE_PREFIX_PATH는 LibTorch가 설치된 경로를 CMake에게 인식시키는 중요한 옵션입니다.
    • Windows에서는 -DCMAKE_PREFIX_PATH=C:/path/to/libtorch 식으로 지정합니다.
  • make 명령(또는 cmake --build .)으로 빌드를 진행합니다.
  • 빌드에 성공했다면 ./my_app을 실행해 봅니다.
  • 콘솔에 "Random Tensor: ..." 형태로 텐서 값이 출력되면 LibTorch가 정상적으로 동작하는 것입니다.

문제 해결 팁

빌드 과정에서 문제가 발생한다면 다음을 확인하세요.

  • CMake 버전: 최소 3.10 이상의 버전을 사용하고 있는지 확인합니다.
  • Torch_DIR 설정: Torch_DIR 경로가 제대로 설정되었는지 다시 한 번 점검합니다. 특히 Windows에서는 경로 구분자(\ vs /)를 유의하세요.
  • CMAKE_PREFIX_PATH 설정: CMake 실행 시 -DCMAKE_PREFIX_PATH=... 옵션으로 LibTorch 경로를 정확히 지정했는지 확인합니다.

문제가 지속된다면 LibTorch 문서나 PyTorch 포럼, GitHub 이슈 등을 참고해보세요.

다음 단계

이제 LibTorch를 연결하고 C++에서 텐서를 생성하고 출력하는 최소한의 준비가 완료되었습니다.


다음 편(3편)에서는 텐서 연산에 대해 조금 더 깊게 들어가서, 단순히 랜덤 텐서 생성뿐만 아니라 다양한 텐서 연산과 GPU 사용 방법 등을 살펴보겠습니다. 그렇게 하면 C++에서도 PyTorch와 거의 유사한 감각으로 텐서를 다룰 수 있다는 것을 확인할 수 있을 것입니다.

참고 자료

반응형