Python 개발자를 위한 C++ 및 CUDA 스타터 키트
요약
본 프로젝트는 Python으로 프로토타이핑한 알고리즘을 C++ 및 CUDA로 효율적으로 포팅할 수 있도록 사전 구성된 환경을 제공합니다. `setup.py`와 `requirements-{cpu,gpu}.txt`를 사용하여 빌드 프로세스를 관리하며, OpenMP(CPU)와 CUDA(GPU)를 모두 지원하여 개발 편의성을 높였습니다.
핵심 포인트
- Python 프로토타이핑 후 C++/CUDA 포팅 워크플로우 제공
- OpenMP 및 CUDA를 통합 지원하는 환경 구성
- Thrust/CUB 등 CCCL 라이브러리를 포함하여 코드 간소화
Python 개발자를 위한 C++ 및 CUDA 스타터 키트

고성능 컴퓨팅(HPC)에서 가장 일반적인 워크플로우 중 하나는 1️⃣ 파이썬(Python)으로 알고리즘을 프로토타입 제작한 다음, 2️⃣ 이를 C++ 및 CUDA로 포팅하는 것입니다.
이는 아이디어를 빠르고 쉽게 프로토타입 제작하고 테스트할 수 있는 간단한 방법이지만, 이러한 이종 코드(heterogenous code) + 이종 하드웨어(heterogeneous hardware) 프로젝트의 빌드 도구 설정은 매우 까다롭고, 종종 CMake의 오류가 발생하기 쉬운 구문 때문에 어려움이 가중됩니다.
본 프로젝트는 이러한 워크플로우를 위한 사전 구성된 환경을 제공합니다...
setup.py와requirements-{cpu,gpu}.txt만을 사용하여 빌드 프로세스를 관리하고,- CPU의 병렬 처리를 위해 OpenMP를, GPU를 위해 CUDA를 지원하며,
- 코드 간소화를 위해 Thrust 및 CUB과 같은 CCCL 라이브러리를 포함합니다.
예시로, 이 저장소는 단지 2가지 연산(배열 누적 및 행렬 곱셈)만을 구현하고 테스트하며 벤치마킹합니다.
기본 파이썬 + Numba 구현은 starter_kit_baseline.py에 배치되어 있으며, 최적화된 CUDA 및 OpenMP 구현은 starter_kit.cu에 배치되어 있습니다.
만약 CUDA 지원 장치가 발견되지 않으면, 해당 파일은 CPU 전용 C++ 구현으로 처리됩니다.
VSCode를 사용하는 경우, tasks.json 파일에는 파이썬과 C++ 코드 모두에 대한 디버거가 구성되어 있습니다.
.clang-format은 LLVM 기본 스타일로 구성되었으며, 넓은 화면을 위해 조정하여 라인당 120자를 허용합니다.
설치
본인은 자체 프로젝트를 위해 저장소를 포크(fork)하는 것을 추천하지만, 직접 클론(clone)할 수도 있습니다:
git clone https://github.com/ashvardanian/PyBindToGPUs.git
cd PyBindToGPUs
다운로드한 후에는 uv를 사용하여 프로젝트를 빌드하고 실행할 수 있습니다:
git submodule update --init --recursive # CCCL 라이브러리 가져오기
uv pip install -e .[gpu] # 또는 비(非)CUDA 장치의 경우 `.[cpu]`
uv run pytest test.py -s -x # 첫 실패까지 빌드 및 테스트
또는 일반적인 파이썬 환경과 의존성 관리 도구를 사용하여 할 수 있습니다:
git submodule update --init --recursive # CCCL 라이브러리 가져오기
pip install -r requirements-gpu.txt # 또는 requirements-cpu.txt
pip install -e . # 현재 플랫폼에 맞게 컴파일하기
...
워크플로우 (Workflow)
이 프로젝트는 다음의 워크플로우를 통해 최대한 간단하게 설계되었습니다:
- 저장소를 포크(Fork)하거나 다운로드합니다.
starter_kit_baseline.py에 기준선 알고리즘을 구현합니다.starter_kit.cu에 최적화된 알고리즘을 구현합니다.
참고 자료 (Reading Materials)
초급 GPGPU:
- 고수준 개념: nvidia.com
- Nvidia CuPy UDFs: cupy.dev
- Numba를 사용한 Python의 CUDA: numba/nvidia-cuda-tutorial
- GPU에서의 C++ STL 병렬 처리: nvidia.com
고급 GPGPU:
- CUDA 수학 내장 함수 (math intrinsics): nvidia.com
- Nvidia 하드웨어 문제 해결: stas00/ml-engineering
- SM89 및 SM90 코드를 사용한 Nvidia ISA 생성기: kuterd/nv_isa_solver
- 다중 GPU 예제: nvidia/multi-gpu-programming-models
커뮤니티:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기