cuBLAS는 NVIDIA가 제공하는 고성능 GPU 가속 선형대수(Liner Algebra) 라이브러리로, BLAS(Basic Linear Algebra Subprograms) 표준을 GPU에서 빠르게 실행할 수 있도록 구현한 라이브러리이다. 행렬-벡터 곱, 행렬-행렬 곱(GEMM), 벡터 연산 등 딥러닝과 과학 계산의 핵심 연산을 효율적으로 처리하기 위해 최고의 성능을 제공한다.
개요
cuBLAS는 CPU에서 실행되는 BLAS를 GPU로 이식한 것이 아니라, NVIDIA GPU 아키텍처 특성을 적극 활용하여 재설계한 고성능 라이브러리이다. 딥러닝 프레임워크(PyTorch, TensorFlow), HPC(고성능 컴퓨팅), 시뮬레이션, 공학 계산 등 다양한 분야에서 핵심 연산 엔진으로 사용된다.
주요 기능
행렬-행렬 곱 (GEMM)
GEMM은 "General Matrix-Matrix Multiplication"의 약자로, cuBLAS의 핵심이며 다음과 같은 연산을 GPU에서 매우 빠르게 수행한다:
C = α * A * B + β * C
GEMM 연산은 신경망의:
- Linear layer (Fully Connected Layer)
- Attention(QKᵀ, QKᵀV)
- Transformer의 projection layer
- CNN의 im2col 기반 convolution
등에서 가장 많이 사용된다.
행렬-벡터 곱 (GEMV) 및 벡터 연산
- GEMV: Matrix-Vector Multiplication
- DOT: dot product
- AXPY: Y ← αX + Y
- SCAL: scaling
- ASUM, NRM2 등 다양한 BLAS Level-1/2 연산 지원
cuBLAS는 일반 수학 및 물리 계산에서도 널리 쓰인다.
Mixed Precision 지원
현대 GPU의 Tensor Core를 활용해 다음 정밀도의 고속 연산을 지원한다:
- FP32
- FP16
- BF16
- TF32
특히 딥러닝에서는 FP16/BF16 기반 연산이 표준이며 cuBLAS는 이를 최적화하여 매우 높은 throughput을 제공한다.
cuDNN과의 관계
cuBLAS는 일반 선형대수 연산을 담당하고, cuDNN은 딥러닝 전용 연산을 담당하는 구조이다.
| 항목 | cuBLAS | cuDNN |
|---|---|---|
| 목적 | 선형대수(행렬, 벡터 연산) | 딥러닝 특화 연산(Conv, RNN, Norm 등) |
| 대표 기능 | GEMM, DOT, AXPY, SCAL | Conv, Pool, BatchNorm, RNN |
| 딥러닝에서의 역할 | Dense layer / Attention 가속 | CNN / RNN 가속 |
예를 들어 Transformer 모델은 대부분의 연산이 GEMM 기반이므로 cuBLAS 의존도가 크다.
성능 특징
고성능 연산 최적화
- NVIDIA GPU 아키텍처(SM, Warp, Tensor Core)에 맞춘 최적화
- Strided memory access 최적화
- Fused-multiply-accumulate(FMA) 활용
Tensor Core 가속
- Ampere, Hopper 등의 아키텍처에서 Mixed Precision 기반 연산을 극적으로 가속
- FP16/BF16 기반 연산은 cuBLAS가 가장 빠른 matmul 성능을 제공
대규모 HPC 및 ML 워크로드 기반
다중 GPU, 분산 처리 환경에서 성능을 최대로 끌어올릴 수 있도록 설계되었다.
딥러닝 프레임워크와의 통합
cuBLAS는 다음 프레임워크에서 내부적으로 자동 사용된다:
PyTorch
- `torch.matmul`, `nn.Linear`, `attention` 연산은 cuBLAS 기반
- 대부분의 Tensor Core matmul은 cuBLASLt backend 사용
TensorFlow
- Dense layer (MatMul), attention, projection layer에서 활용
- XLA를 통한 fused matmul도 cuBLAS 기반
JAX
- XLA 내부에서 cuBLAS를 호출해 matmul을 가속
cuBLASLt
NVIDIA는 matmul 최적화를 더 강화한 cuBLASLt 라이브러리를 제공한다:
- 튜닝 가능한 high-performance GEMM
- 다양한 layout 지원
- 자동 kernel selection
- 더 강력한 Tensor Core 활용
PyTorch와 TensorFlow는 대형 모델에서 cuBLAS 대신 cuBLASLt를 활용하는 경우가 많다.
아키텍처
cuBLAS는 다음 구성 요소로 이루어진다:
- GPU kernel 라이브러리
- 고성능 GEMM 알고리즘
- Tensor Core acceleration engine
- 메모리/stride layout 최적화
장점
- GPU에서 가장 빠른 범용 선형대수 성능 제공
- 딥러닝, HPC, 물리 시뮬레이션 등 폭넓은 활용
- Tensor Core 최적화와 mixed precision 지원
- 프레임워크에서 자동 사용 → 사용자 설정 불필요
한계
- NVIDIA GPU 전용
- 딥러닝 특화 연산(Conv, RNN 등)은 cuDNN 필요
- 사용자 정의 커널에는 Triton 또는 CUDA 필요
함께 보기
참고 문헌
- Dongarra, Jack J., et al. A Proposed Standard for Basic Linear Algebra Subprograms. (BLAS specification)