numr 0.5.0:不需要你做出选择的 Rust 数值计算库

发布: (2026年3月15日 GMT+8 04:15)
9 分钟阅读
原文: Dev.to

Source: Dev.to

Rust 的基础数值计算

numr 提供 n 维张量、线性代数、FFT、统计以及自动微分——在 CPUCUDAWebGPU 后端上实现原生 GPU 加速。
它是“Rust 版 NumPy”,但从第一天起就内置了梯度、GPU 支持和现代数据类型。

numr 是什么

  • 一个 基础库 – 为更高级别的库和应用提供数学构建块。

numr 不是

  • 不仅仅是一个 张量库(比如 NumPy 的 ndarray)。
  • 不是一个 深度学习框架
  • 不是一个 高级机器学习 API
  • 不是一套 特定领域 工具的集合。

核心特性

功能描述
Tensor libraryN 维张量(类似 NumPy 的 ndarray)。
Linear algebra分解、求解器等。
FFT, statistics, random distributions完备的科学计算原语。
Automatic differentiation内置 numr::autograd
Native GPU supportCUDA + WebGPU 后端,支持自动求导。
Cross‑platform GPU在 NVIDIA、AMD、Intel、Apple silicon(通过 WebGPU)上均可运行。
FP8 & quantized kernelsFP8 矩阵乘、i8×i8→i32 矩阵乘、2:4 结构化稀疏。
Fused kernelsGEMM + 偏置 + 激活、激活‑乘、加‑归一化 等。
CUDA‑specific improvements缓存分配器、图捕获、GEMV 快速路径、流水线 D2H 拷贝。

对于等价于 SciPy 的功能(优化、ODE、插值、信号处理),请参阅配套的 crate [solvr]

为什么选择 numr? – 与 NumPy 的比较

功能NumPynumr
N 维张量
线性代数、FFT、统计
自动微分✗ (需要 JAX/PyTorch)✓ (内置 numr::autograd)
GPU 加速✗ (需要 CuPy/JAX)✓ (原生 CUDA + WebGPU)
非 NVIDIA GPU✓ (AMD、Intel、Apple 通过 WebGPU)
FP8 支持✓ (E4M3 与 E5M2)
2:4 结构化稀疏✓ (所有后端)
量化矩阵乘 (i8×i8→i32)✓ (CPU)
融合内核 (GEMM 结尾、激活‑乘、加‑归一化)✓ (CPU、CUDA、WebGPU)
完备的自动求导(二阶)✓ (卷积、softmax、rms_norm、layer_norm、SiLU、softplus、SwiGLU、dropout、dtype 转换、narrow、cat、gather、…)

我们解决的问题

  • 碎片化:现有的 Rust crate 各自解决单一问题(例如 ndarray 用于张量,nalgebra 用于线性代数,rustfft 用于 FFT)。没有提供 GPU 支持或自动求导,并且它们使用不兼容的类型和惯例。
  • 开发者负担:你最终需要编写适配层、提交上游 issue,并在多个后端之间切换,仅仅是为了让一个简单的数值流水线在 GPU 上运行。

numr 消除了这些负担:

一个库,一个张量类型,一个 API —— 张量、线性代数、FFT、统计、自动求导、GPU。

一次编写代码,即可在以下平台运行:

  • CPU(AVX‑512 等)
  • NVIDIA(原生 CUDA 内核)
  • AMD / Intel / Apple silicon(通过 WebGPU)

相同的代码,相同的结果。

Release 0.5.0 亮点

性能关键的融合内核

内核功能收益
GEMM epiloguematmul + bias + activation 在一次启动中完成2‑3× 加速神经网络内部循环(前向 & 反向)
Activation‑mul为门控结构(如 SwiGLU)提供融合乘法只读一次而不是三次
Add‑norm残差连接 + 归一化融合每个 transformer 层只读一次

所有内核均可在 CPUCUDAWebGPU 上运行,并且每个内核都有正确的反向传播。

FP8 与量化

  • FP8 矩阵乘(E4M3 & E5M2)在所有后端上支持——对于在显存中容纳大型模型至关重要。
  • i8×i8→i32 量化矩阵乘 在 CPU 上实现——无需 GPU 即可进行高效推理。

结构化稀疏

  • 在所有后端上支持 2:4 稀疏
  • 在 CUDA 上走硬件快速路径;在 CPU/WebGPU 上使用优化的稀疏内核。

Autograd 扩展

以下所有操作现已支持求导(包括二阶导数):

conv1d, conv2d, softmax, rms_norm, layer_norm, SiLU, softplus, SwiGLU, dropout, fused GEMM epilogue, fused add‑norm, dtype cast, narrow, cat, gather, …

其他特性:

  • 激活检查点——用计算换取内存。
  • 反向钩子——在反向传播期间触发分布式梯度同步。

不是 一个机器学习框架;它是可以基于其构建框架的 autograd 引擎

CUDA 专用改进

  • 缓存分配器——在 Rust 端复用内存块,显著降低分配开销。
  • 图捕获——一次记录内核启动序列并零开销重放(对高吞吐量推理至关重要)。
  • GEMV 快速路径——针对矩阵某一维度极小的常见情况(如 batch‑size 1 推理)提供专用内核。
  • 流水线式 D2H 拷贝——实现 GPU 计算与主机侧数据传输的重叠。

这些升级将 numr 从“有趣的基础”提升为 生产就绪 的库。

入门

# Cargo.toml
[dependencies]
numr = "0.5"
use numr::{Tensor, autograd::grad};

fn main() {
    // Example: fused GEMM + bias + activation on the GPU
    let a = Tensor::randn([128, 256], Device::Cuda);
    let b = Tensor::randn([256, 512], Device::Cuda);
    let bias = Tensor::zeros([512], Device::Cuda);

    // Forward pass (fused)
    let y = (a @ b + bias).relu();

    // Backward pass
    let grads = grad(&y, &[a, b, bias]);
    println!("Gradients computed!");
}

完整教程请参见 [GitHub repository]

愿景

  • 统一的 Rust 科学计算栈,可与 Python 生态系统相媲美,却没有其碎片化问题。
  • 零拷贝、零开销 的 GPU 管线,兼容所有现代 GPU。
  • 可扩展的基础,用于构建更高级的机器学习库、仿真工具等。

如果你厌倦了拼凑不兼容的 crate,试试 numr 吧。一次编写,处处运行。

概览

numr 0.5.0 是一个科学计算库,提供:

  • 优化例程
  • 常微分方程(ODE)求解器
  • 插值工具

它是其他 Rust crate 的基础:

  • solvr – 基于 numr 0.5.0 构建并运行,提供科学计算功能(优化、ODE 求解器、插值)。
  • boostr – 一个包含注意力、混合专家(Mixture‑of‑Experts,MoE)和 Mamba 块的机器学习框架,同样基于 numr 0.5.0。

这两个下游库都支持端到端的 LLM 推理和嵌入生成。

关键优势

  • 融合内核 – 消除不必要的性能开销。
  • 完整的 autograd 覆盖 – 使得在真实计算图中进行微分成为可能。
  • CUDA 基础设施 – 确保 GPU 工作负载高效运行。
  • 跨平台一致性 – 相同代码可在 CPU、CUDA 和 WebGPU 后端运行。

发布亮点

版本亮点
0.5.0解锁 solvr(科学计算)和 boostr(机器学习框架)的新版本发布,两者均基于 numr
0.6.0专注于硬化:清理错误处理,审计 API 稳定性,并为最终的 1.0 版本做准备。
0.7.0+ (roadmap)通过 ROCm 添加原生 AMD GPU 支持。

依赖

[dependencies]
numr = "0.5.0"

带 GPU 支持

# CUDA support
numr = { version = "0.5.0", features = ["cuda"] }

# WebGPU (wgpu) support
numr = { version = "0.5.0", features = ["wgpu"] }

项目链接

  • GitHub:
  • crates.io:

License

numrApache‑2.0 许可证下发布。欢迎贡献。

0 浏览
Back to Blog

相关文章

阅读更多 »