nabla — 纯 Rust GPU 数学引擎:类似 PyTorch 的 API,零 C++ 依赖,4 个后端
发布: (2026年3月2日 GMT+8 09:36)
2 分钟阅读
原文: Dev.to
Source: Dev.to
介绍
我厌倦了通过 bindgen FFI 手动接线 cuBLAS 并自行推导梯度来在 Rust 中进行 GPU 数学运算,于是我创建了 nabla。
特性
-
线性代数原语:矩阵乘法 (
a * &b)、求解线性方程组 (a.solve(&b)?)、奇异值分解 (a.svd()) 等。 -
内核融合:
fuse!(x.sin().powf(2.0); x)多个操作会合并为单个 GPU 内核。
-
爱因斯坦求和:
einsum!(c[i,j] = a[i,k] * b[k,j]) -
反向模式自动微分(类似 PyTorch):
loss.backward(); w.grad(); -
四种互斥的后端(在构建时选择):CPU、wgpu、CUDA、HIP。
nabla 不是一个框架——它没有模型库或预训练权重。每个数学上固定的原语(矩阵乘、卷积、softmax、交叉熵,……)都针对 CPU/GPU 进行了优化,使用者自行组合它们。
后端
- CPU – 纯 Rust 实现,无外部 BLAS/LAPACK。
- wgpu – 跨平台 GPU 后端(Vulkan、Metal、DX12,……)。
- CUDA – NVIDIA GPU。
- HIP – AMD GPU。
每次构建只能启用一个后端。
基准测试(GH200)
- 即时模式:在 MLP 训练中,nabla 比 PyTorch 快 4–6 倍。
- CUDA Graph:当批量大小 ≥ 128 时,nabla 获胜。
- 矩阵乘(4096 × 4096,TF32):比 PyTorch 快 7.5 倍。
可复现性
cd benchmarks && bash run.sh
基准测试脚本是确定性的,可重复运行以验证结果。
测试
nabla 是一个纯 Rust 库,拥有 293 个测试,且 没有 C++ 依赖(没有 LAPACK,也没有 BLAS)。