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)。

0 浏览
Back to Blog

相关文章

阅读更多 »

不糟糕的语义失效

缓存问题 如果你在 Web 应用上工作了一段时间,你就会了解缓存的情况。你加入缓存,一切都变快了,然后有人……