반응형
앞선 글에서 우리는 C++ 환경에서 LibTorch를 이용해 텐서 연산, TorchScript 모델 로딩 및 추론까지 다뤄보았습니다. 이제는 C++에서 구현한 기능을 Python 환경에서도 그대로 불러와 사용할 수 있다면 어떨까요? 이렇게 하면 C++ 코드 기반의 성능과 최적화를 유지하면서도, Python 환경이 제공하는 편리한 스크립팅과 풍부한 생태계를 활용할 수 있습니다.이때 pybind11 라이브러리를 이용하면 C++ 함수를 Python 모듈로 손쉽게 노출할 수 있습니다. Python 개발자는 마치 파이썬 함수처럼 C++ 함수를 호출할 수 있으며, 이는 C++/Python 혼합 워크플로우를 매우 유연하게 만들어줍니다. 이번 글에서는 pybind11을 사용하여 간단한 C++ 함수를 Python에서 호..
지난 글에서 우리는 파이썬의 range, enumerate를 C++20/23 스타일로 구현해보며 파이썬스러운 간결성과 C++의 성능을 결합하는 방법을 살펴보았습니다. 이번 글에서는 파이썬에서 자주 사용하는 또 하나의 유용한 함수 zip을 다뤄보겠습니다.파이썬의 zip은 여러 이터러블(리스트, 튜플 등)을 병렬로 순회하며 각 원소를 튜플로 묶어 돌려줍니다. 예를 들어:for x, y in zip([1,2,3], ['a','b','c']): print(x, y)이렇게 하면 (1, 'a'), (2, 'b'), (3, 'c') 순으로 받을 수 있습니다. C++에서 이와 비슷한 기능을 구현하려면 어떻게 할까요? C++17 이전에는 주로 인덱스를 수동 관리하거나, Boost 라이브러리를 쓰거나, 범위 기반 f..
많은 개발자와 연구자들이 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와..
앞선 글들에서 우리는 러스트의 기본 문법, 소유권 및 빌림 규칙, 컬렉션과 이터레이터를 다루며 러스트의 전반적인 프로그래밍 감각을 익혀왔습니다. 이제 조금 더 러스트다운 코드를 작성하기 위해 러스트에서의 구조체(Struct), 열거형(Enum), 그리고 C++와는 다른 문맥에서 강력한 기능을 제공하는 패턴 매칭(Pattern Matching), 마지막으로 모듈(Module)과 크레이트(Crate)를 통한 프로젝트 구조화 방법을 살펴보겠습니다. C++에 익숙하다면 클래스, enum, 네임스페이스(namespace), 헤더/소스 파일 구조와 비교하며 러스트에서는 어떤 식으로 코드 조직과 타입 정의를 하는지 감을 잡을 수 있을 것입니다.구조체(Struct) 정의하기C++에서 class나 struct를 사용해 ..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.