반응형
많은 개발자와 연구자들이 PyTorch를 이용해 Python 환경에서 딥러닝 모델을 개발하고 학습합니다. 하지만 실제 프로덕션 환경이나 고성능 애플리케이션에서는 C++ 기반의 애플리케이션에 모델을 통합하고 싶을 때가 있습니다. 이때 Python 환경 없이도 모델을 로딩하고 추론할 수 있도록 해주는 것이 바로 TorchScript 입니다.TorchScript를 사용하면 Python으로 학습한 PyTorch 모델을 별도의 .pt 파일 형태로 내보내고, 이 파일을 C++ LibTorch 환경에서 로딩해 추론할 수 있습니다. 이 글에서는 Python에서 TorchScript 모델을 만드는 방법, 그리고 C++에서 이를 로딩해 추론하는 과정을 단계별로 살펴봅니다. 또한 단순한 완전연결 모델에서 한 걸음 더 나아가..
이번 글에서는 CMake를 사용하여 CUDA 기반의 GPU 가속 응용 프로그램을 빌드하고 설정하는 방법을 알아보겠습니다. GPU 프로그래밍은 고성능 계산, 머신 러닝, 그래픽스 등 다양한 분야에서 중요한 역할을 합니다. CMake를 활용하여 CUDA 코드를 효율적으로 관리하고 빌드 시스템에 통합하는 방법을 살펴보겠습니다.CUDA와 CMake의 통합CUDA는 NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼으로, GPU를 활용하여 계산을 가속화할 수 있습니다. CMake는 CUDA를 지원하기 위한 다양한 기능을 제공하며, 이를 통해 CUDA 코드와 C++ 코드를 함께 빌드할 수 있습니다.CMake에서 CUDA 활성화CMake에서 CUDA를 사용하기 위해서는 프로젝트 설정에서 LANGUAGES에 CUDA를 추가합니..
지난 글(2편)에서는 LibTorch 환경을 설정하고 C++에서 간단한 텐서를 생성해 출력하는 "Hello LibTorch" 예제를 실습했습니다. 이제 본격적으로 텐서 연산을 조금 더 다뤄보며, C++에서 PyTorch 텐서와 유사한 감각으로 연산을 하는 방법을 익혀봅시다.이번 글에서는 다음을 다룹니다.텐서 생성 방법과 다양한 초기화 방식기초적인 텐서 연산(덧셈, 곱셈, 행렬 연산 등)텐서 모양(Shape) 확인 및 변경GPU(CUDA) 사용을 위한 기초 개념 (CUDA 지원 환경일 경우)작은 예제 코드를 통해 실습이 과정을 통해 C++에서도 Python PyTorch API와 크게 다르지 않은 직관적인 방식으로 텐서를 다룰 수 있음을 확인할 수 있습니다.텐서 생성하기LibTorch에서는 PyTorch와..
안녕하세요! 지난 1편에서는 PyTorch와 LibTorch에 대한 개념적인 소개와, 이 시리즈에서 우리가 달성하려는 궁극적인 목표를 알아보았습니다. 이제 실제로 C++ 환경에서 LibTorch를 활용하기 위한 기초 준비를 해볼 차례입니다.이번 글에서는 다음과 같은 과정을 다룹니다.LibTorch 다운로드 및 설치 위치 정하기: 운영체제(Windows, Linux, macOS)에 따라 설치하는 방법을 안내CMake 기반의 기본 프로젝트 환경 설정:CMakeLists.txt를 작성하는 방법LibTorch 라이브러리를 C++ 프로젝트에 연결하는 법간단한 “Hello LibTorch” 예제 코드를 통해 C++에서 LibTorch가 정상적으로 동작하는지 확인이 과정을 마치고 나면, 다음 글(3편)에서 텐서 생성..
안녕하세요! LibTorch 입문 시리즈에 오신 것을 환영합니다.이 시리즈에서는 머신러닝과 딥러닝에 널리 사용되는 PyTorch를 C++ 환경에서 다루는 방법을 차근차근 알려드리려 합니다. 많은 분들이 Python 환경에서 PyTorch를 사용하며 텐서(Tensor) 연산, 모델 훈련, 추론 등을 손쉽게 경험하셨을 텐데요, 여기서 한 발 더 나아가 C++ 환경에서도 PyTorch 기능을 활용한다면 무엇이 가능할까요? 또한, C++로 작성한 성능 높은 코드를 Python에서 투명하게 사용한다면 어떨까요?이 시리즈의 최종 목표는 C++로 작성된 수치 연산 및 딥러닝 로직을 PyTorch의 C++ 라이브러리(LibTorch) 로 활용하고, 여기에 pybind11을 이용하여 Python 환경에서도 동일한 로직을..
이번 글에서는 Python 바인딩 프로젝트를 CMake로 구성하고 설정하는 방법을 알아보겠습니다. C++로 작성된 라이브러리를 Python에서 사용할 수 있도록 바인딩하면 두 언어의 장점을 모두 활용할 수 있습니다. 이를 위해 다양한 라이브러리가 존재하며, 대표적으로 Boost.Python, pybind11, nanobind 등이 있습니다. 이 글에서는 특히 pybind11과 nanobind를 중심으로 설명하겠습니다.Python 바인딩이란?Python 바인딩은 C++로 구현된 코드를 Python에서 직접 호출할 수 있도록 연결해주는 기술입니다. 이를 통해 성능이 중요한 부분은 C++로 작성하고, 사용의 편의성은 Python으로 제공할 수 있습니다. 과학 계산, 게임 개발, 머신 러닝 등 다양한 분야에서 ..
환경 설정이전 글(#1)에서 Vulkan을 GPGPU용으로 활용할 수 있다는 개념적 소개를 했습니다. 이제 실제 코드를 다루려면 환경이 제대로 갖춰져야 합니다. Ubuntu를 예로 들어 Vulkan SDK 설치, 드라이버 설정, CMake 및 기타 툴 설치 방법을 정리하고, Windows 사용자를 위한 간단한 가이드도 제공하겠습니다. 또한 CUDA 경험자들이 Vulkan 환경 구축을 이해하기 쉽도록 CUDA와의 차이점도 다시 상기시켜드리겠습니다.Ubuntu에서 Vulkan 환경 설정1. GPU 드라이버 설치:NVIDIA의 경우:sudo apt updatesudo ubuntu-drivers devicessudo ubuntu-drivers autoinstallAMD/Intel의 경우에는 Mesa 드라이버가 ..
모던 CMake를 활용하여 효율적인 C++ 프로젝트 빌드 시스템을 구축하는 방법을 계속해서 알아보겠습니다. 이번 글에서는 외부 프로젝트와의 통합 및 CMake의 ExternalProject 모듈을 활용하여 서드 파티 라이브러리나 의존성을 관리하는 방법에 대해 다루겠습니다. 이를 통해 프로젝트의 확장성과 유지보수성을 높일 수 있습니다.외부 프로젝트 통합의 필요성현대 소프트웨어 개발에서는 다양한 오픈 소스 라이브러리와 서드 파티 코드를 활용하는 것이 일반적입니다. 이러한 외부 의존성을 효율적으로 관리하고 빌드 시스템에 통합하는 것은 프로젝트의 성공에 중요한 요소입니다.일관된 빌드 환경 유지: 모든 개발자와 CI/CD 시스템에서 동일한 버전의 라이브러리를 사용하도록 보장합니다.의존성 관리의 편의성: 라이브러리..
안녕하세요! 이번 포스팅부터 OpenCL(Open Computing Language)을 활용해 GPU 가속 프로그래밍을 시작하려는 입문자 분들을 위해 총 10편에 걸친 시리즈를 진행하려고 해요.OpenCL은 GPU, CPU, FPGA 등 다양한 디바이스에서 병렬 계산을 지원하는 오픈 표준인데요. 흔히 비교되는 CUDA가 NVIDIA GPU를 염두에 둔 전용 기술이라면, OpenCL은 다양한 벤더와 디바이스에서 유연하게 활용할 수 있는 특징이 있어요. “어? 난 이미 CUDA에 좀 익숙한데?” 하는 분들도, 여기서 OpenCL을 배워두면 훨씬 넓은 하드웨어 지원 범위를 가질 수 있게 되는 셈입니다.이번 첫 글에서는 다음과 같은 내용을 담았습니다.OpenCL 개발 환경 준비(Ubuntu, Windows 참조..
모던 CMake를 활용하여 효율적인 C++ 프로젝트 빌드 시스템을 구축하는 방법을 계속해서 알아보겠습니다. 이번 글에서는 대규모 프로젝트에서 CMake를 효과적으로 사용하기 위한 베스트 프랙티스에 대해 다루겠습니다. 프로젝트 규모가 커질수록 빌드 시스템의 복잡도도 증가하기 때문에, 유지보수성과 확장성을 고려한 빌드 설정이 중요합니다.디렉토리 구조의 중요성대규모 프로젝트에서는 명확하고 일관된 디렉토리 구조를 유지하는 것이 중요합니다. 이를 통해 코드의 가독성을 높이고, 협업 시 혼란을 최소화할 수 있습니다.표준 디렉토리 구조 예시my_large_project/├── CMakeLists.txt├── src/│ ├── CMakeLists.txt│ ├── module1/│ │ ├── CMakeLi..