BIM 칼럼니스트 강태욱의 이슈 & 토크
이번 호에서는 GPU CUDA(쿠다) 병렬처리를 지원하는 넘바(Numba) 라이브러리를 간략히 소개한다. CUDA는 현재 딥러닝 기술의 기반처럼 사용되며, 사실상 산업 표준이다. 딥러닝은 모든 연산이 텐서 행렬 계산이므로, 엔비디아 GPU에 내장된 수많은 계산 유닛(실수 계산에 특화된 CPU)들을 사용한다. CUDA의 강력한 수치해석 데이터 병렬처리 기능은 딥러닝뿐 아니라 디지털 트윈의 핵심인 시뮬레이션, 모델 해석 등에 필수적인 수치계산 엔진으로 사용된다.
■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
페이스북 | www.facebook.com/laputa999
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | http://www.facebook.com/groups/digestpodcast
CUDA는 내장된 수많은 계산 유닛에 입력 데이터를 할당하고, 행렬연산을 하여 출력된 데이터를 CPU 메모리가 접근할 수 있도록 데이터 고속 전송/교환하는 역할을 한다. 그러므로, 딥러닝 모델 학습 성능은 GPU CUDA 성능에 직접적 영향을 받는다. 이벙 호에서는 파이썬(Python)에서 CUDA를 이용해 수치해석 등 계산 성능을 극대화할 수 있는 방법과 간단한 예제를 살펴본다.
그림 1. CUDA 아키텍처(출처 : Multi-Process Service : GPU Deployment and Management Documentation)
GPU CUDA 소개
CUDA는 게임 화면에 렌더링되는 3차원 이미지를 2차원 픽셀에 매핑하기 위한 수많은 행렬을 실시간 처리할 수 있도록 개발되어 왔다. 이런 이유로, 행렬 고속 연산이 필요한 딥러닝 학습에 적극 사용된 것이다.
그림 2. CUDA 기반 실시간 텐서 행렬 연산 결과
CUDA는 오랫동안 개발자의 요구사항을 반영해 발전되어, 개발 플랫폼으로서 탄탄한 생태계를 구축했다.
그림 3. 엔비디아 개발자 사이트
그림 4. CUDA 기반 레이트레이싱 렌더링 결과(출처 : Ray Tracey's blog : GPU path tracing tutorial 3 : GPU)
사실, 많은 스타트업이 이런 기능을 지원하는 딥러닝용 AI 칩을 FPGA 기법 등을 이용해 개발, 홍보하고 있으나, 이런 개발자 지원도구와 플랫폼 생태계 없다면 산업계에서는 의미가 없다고 볼 수 있다.
넘바 소개
넘바는 파이썬 기반 CUDA GPU 프로그래밍을 지원한다. 넘바는 컴파일 기술을 지원하여 CPU와 GPU 모드에서 코딩되는 데이터 구조, 함수 호출을 추상화한다. 넘바는 엔비디아의 CUDA 함수와 설정을 래핑한 고수준의 함수 API를 제공한다. 이를 통해 개발자가 CUDA의 세부 설정에 신경쓸 필요 없이, 데이터 병렬 처리 개발에만 집중할 수 있다.
개발 환경
넘바의 개발 환경은 다음과 같다.
- NVIDIA Compute Capability 5.0 이상 CUDA 지원 GPU 장착 PC(2023년 12월 시점)
- NVIDIA CUDA 11.2 이상
- NVIDIA TX1, TX2, 자비에, 젯슨 나노
- GTX 9, 10, 16 시리즈. RTX 20, 30, 40 시리즈. H100 시리즈
CONDA 환경의 경우, 다음과 같이 터미널을 이용해 CUDA 툴킷을 자동 설치할 수 있다.
conda install cudatoolkit
넘바는 cuda python을 이용해 엔비디아 GPU CUDA와 바인딩한다.
conda install nvidia::cuda-python
설치 방법은 다음과 같다.
conda install numba
■ 상세한 기사 내용은 PDF로 제공됩니다.