안녕하세요! 지난 1편에서는 PyTorch와 LibTorch에 대한 개념적인 소개와, 이 시리즈에서 우리가 달성하려는 궁극적인 목표를 알아보았습니다. 이제 실제로 C++ 환경에서 LibTorch를 활용하기 위한 기초 준비를 해볼 차례입니다.
이번 글에서는 다음과 같은 과정을 다룹니다.
- LibTorch 다운로드 및 설치 위치 정하기: 운영체제(Windows, Linux, macOS)에 따라 설치하는 방법을 안내
- CMake 기반의 기본 프로젝트 환경 설정:
- CMakeLists.txt를 작성하는 방법
- LibTorch 라이브러리를 C++ 프로젝트에 연결하는 법
- 간단한 “Hello LibTorch” 예제 코드를 통해 C++에서 LibTorch가 정상적으로 동작하는지 확인
이 과정을 마치고 나면, 다음 글(3편)에서 텐서 생성 및 연산을 직접 시도할 준비가 완료됩니다.
사전 준비 사항
이 시리즈를 따라가기 위해서는 다음과 같은 개발 환경이 필요합니다.
- 운영체제: Linux(Ubuntu), macOS 또는 Windows (가능한 최신 환경 권장)
- Windows의 경우 Visual Studio(Community 버전 가능)와 CMake, Ninja 등을 준비하면 좋습니다.
- Linux나 macOS에서는 대부분 패키지 매니저를 통해 CMake, gcc, clang 등 개발 도구를 쉽게 설치할 수 있습니다.
- CMake:
C++ 프로젝트를 구성하고 빌드하기 위해 CMake를 사용합니다.- Linux, macOS: apt, brew 등으로 설치 가능
- Windows: https://cmake.org/download/ 페이지에서 윈도우 인스톨러 다운
- 컴파일러:
- Linux: GCC 혹은 Clang
- macOS: Clang 기본 제공
- Windows: MSVC(Visual Studio) 또는 MinGW
환경에 맞는 컴파일러가 준비되어 있어야 합니다.
- 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와 거의 유사한 감각으로 텐서를 다룰 수 있다는 것을 확인할 수 있을 것입니다.
참고 자료
- PyTorch 공식 홈페이지: https://pytorch.org/
- LibTorch C++ Docs: https://pytorch.org/cppdocs/
- CMake 공식 홈페이지: https://cmake.org/
- YouTube: PyTorch Tutorial: https://www.youtube.com/c/PyTorch
'개발 이야기 > PyTorch (파이토치)' 카테고리의 다른 글
[LibTorch 입문] 6편: C++과 Python 사이에서 텐서 교환하기 (0) | 2024.12.11 |
---|---|
[LibTorch 입문] 5편: pybind11로 C++ 코드를 Python에 바인딩하기 (0) | 2024.12.11 |
[LibTorch 입문] 4편: Python 모델을 C++에서 TorchScript로 추론하기 (1) | 2024.12.10 |
[LibTorch 입문] 3편: C++에서 텐서 다루기 (기초 연산 실습) (0) | 2024.12.10 |
[LibTorch 입문] 1편: PyTorch와 LibTorch 소개, 그리고 목표 설정 (32) | 2024.12.09 |