nabla — 순수 Rust GPU 수학 엔진: PyTorch 친화적 API, C++ 의존성 제로, 4개 백엔드
Source: Dev.to
Introduction
cuBLAS를 bindgen FFI로 연결하고 직접 미분을 구현하는 데 지쳐서, Rust에서 GPU 수학을 수행하기 위해 nabla를 만들었습니다.
Features
-
Linear algebra primitives: 행렬 곱셈 (
a * &b), 선형 시스템 풀이 (a.solve(&b)?), 특이값 분해 (a.svd()), 등. -
Kernel fusion:
fuse!(x.sin().powf(2.0); x)여러 연산을 하나의 GPU 커널로 결합합니다.
-
Einstein summation:
einsum!(c[i,j] = a[i,k] * b[k,j]) -
Reverse‑mode autodiff (PyTorch‑style):
loss.backward(); w.grad(); -
Four mutually exclusive backends (chosen at build time): CPU, wgpu, CUDA, HIP.
nabla는 프레임워크가 아닙니다—모델 저장소나 사전 학습된 가중치가 없습니다. 모든 수학적으로 고정된 원시 연산(행렬 곱, 컨볼루션, 소프트맥스, 교차 엔트로피 등)은 CPU/GPU에 최적화되어 있으며, 사용자가 직접 조합합니다.
Backends
- CPU – 순수 Rust 구현, 외부 BLAS/LAPACK 없음.
- wgpu – 크로스‑플랫폼 GPU 백엔드(Vulkan, Metal, DX12 등).
- CUDA – NVIDIA GPU.
- HIP – AMD GPU.
빌드당 하나의 백엔드만 활성화할 수 있습니다.
Benchmarks (GH200)
- Eager mode: nabla는 MLP 학습에서 PyTorch보다 4–6배 빠릅니다.
- CUDA Graph: 배치 크기가 ≥ 128일 때 nabla가 우위에 있습니다.
- Matmul (4096 × 4096, TF32): PyTorch보다 7.5배 빠릅니다.
Reproducibility
cd benchmarks && bash run.sh
벤치마크 스크립트는 결정적이며, 결과를 검증하기 위해 다시 실행할 수 있습니다.
Tests
nabla는 순수 Rust 라이브러리로 293개의 테스트와 C++ 의존성 없음(LAPACK, BLAS 없음)을 가지고 있습니다.