CUDACUDA
Compute Unified Device Architecture
쉽게 이해하기
CUDA는 NVIDIA GPU에서 병렬 계산을 실행하기 위한 플랫폼입니다. 원래 GPU는 그래픽 처리를 위해 발전했지만, 딥러닝처럼 같은 종류의 계산을 대량으로 반복하는 작업에도 매우 잘 맞습니다. CUDA는 개발자가 이런 GPU 계산 능력을 직접 활용할 수 있게 해줍니다.
딥러닝 프레임워크를 쓰는 대부분의 사용자는 CUDA 코드를 직접 작성하지 않습니다. PyTorch나 TensorFlow가 내부에서 CUDA kernel과 라이브러리를 호출합니다. 그래도 GPU 오류, driver 호환성, batch size, memory 부족을 이해하려면 CUDA 개념을 알아야 합니다.
비유와 예시
CPU는 숙련된 직원 몇 명이 다양한 일을 처리하는 사무실에 가깝고, GPU는 많은 작업자가 같은 형태의 일을 동시에 처리하는 생산 라인에 가깝습니다. CUDA는 이 생산 라인에 작업을 배치하고 결과를 가져오는 운영 규칙입니다.
예를 들어 행렬 곱, convolution, attention 연산은 많은 숫자 계산을 병렬로 수행합니다. CUDA는 이런 계산을 수천 개의 thread로 나누어 GPU에서 실행하게 합니다.
한눈에 비교
| 구분 | 역할 | AI에서의 의미 |
|---|---|---|
| GPU | 병렬 계산 하드웨어 | 학습과 추론 가속 |
| CUDA | NVIDIA GPU 프로그래밍 플랫폼 | kernel 실행, memory 관리, runtime 제공 |
| cuDNN | 딥러닝 연산 라이브러리 | convolution, attention 등 고성능 primitive |
| TensorRT | 추론 최적화 런타임 | 배포 시 latency와 throughput 개선 |
어디서 왜 중요한가
CUDA는 NVIDIA GPU 생태계의 중심입니다. 많은 딥러닝 라이브러리, kernel optimization, profiling 도구가 CUDA를 기준으로 만들어져 있습니다. 그래서 같은 GPU 성능이라도 CUDA 소프트웨어 스택을 활용할 수 있는지가 실제 생산성에 큰 영향을 줍니다.
AI 인프라에서 CUDA 호환성은 모델을 어디서 실행할 수 있는지를 좌우합니다. 어떤 라이브러리가 "CUDA 필요"라고 말하면 보통 NVIDIA GPU와 맞는 driver, toolkit, runtime 조합이 필요하다는 뜻입니다.
자주 하는 오해
CUDA는 GPU 자체가 아닙니다. GPU는 하드웨어이고, CUDA는 그 GPU를 프로그래밍하고 실행하는 소프트웨어 플랫폼입니다.
CUDA를 안다고 해서 반드시 모든 딥러닝 코드를 직접 kernel로 작성해야 하는 것은 아닙니다. 대부분은 PyTorch 같은 프레임워크가 대신 처리합니다. 다만 성능 병목을 분석하거나 custom operation을 만들 때 CUDA 지식이 필요합니다.
CUDA는 모든 GPU에서 동작하지 않습니다. NVIDIA GPU 생태계에 묶여 있으며, AMD나 Apple GPU는 다른 스택을 사용합니다.
대화에서는 이렇게
"이 서버는 CUDA driver와 PyTorch build 버전이 안 맞아서 GPU를 못 잡고 있어요."
"병목이 Python이 아니라 CUDA kernel launch와 memory transfer 쪽인지 profiling해보죠."
"NVIDIA GPU가 아니면 CUDA dependency가 있는 라이브러리를 그대로 쓰기 어렵습니다."
함께 읽으면 좋은 용어
참고 자료
- CUDA C++ Programming GuideNVIDIA Docs
CUDA 프로그래밍 모델, kernel, thread hierarchy를 설명하는 공식 문서.
- CUDA Runtime APINVIDIA Docs
메모리 할당, kernel launch, stream 등 runtime API 공식 문서.
- CUDA C++ Best Practices GuideNVIDIA Docs
성능 최적화, 메모리 접근, occupancy 관련 실무 가이드.
- CUDA ToolkitNVIDIA Developer
CUDA Toolkit 구성 요소와 개발 환경을 설명하는 공식 페이지.