# 从零开始认识 Burn:新一代深度学习框架的完整指南
写给所有想用 Rust 做深度学习的人
Burn
## 为什么又出现了“新框架”?
过去几年,深度学习框架层出不穷:PyTorch 动态图灵活、TensorFlow 生态庞大、JAX 把函数式推向极致。但它们都绕不开三件事:
-
训练时 Python,部署时 C++/CUDA,两套代码来回折腾。 -
想跑在手机、浏览器、嵌入式,又要重写一堆算子。 -
真正想榨干硬件性能,得自己写内核,门槛高到劝退。
Burn 想一次性解决这三个痛点。
一句话总结:Burn 是一个完全用 Rust 写的深度学习框架,训练、部署、跨平台都用同一套代码,性能还不打折。
## Burn 到底是什么?
关键词 | 一句话解释 |
---|---|
Rust | 系统级语言,零成本抽象 + 内存安全 |
后端可插拔 | CUDA、Metal、Vulkan、WGPU、CPU……随时换 |
自动微分 | tensor.backward() 一键求梯度 |
内核融合 | 多个算子自动合并成一条 GPU kernel |
WebAssembly | 浏览器里直接跑模型,无需服务器 |
no_std |
嵌入式裸机也能推理 |
## 性能到底怎么样?六张图看懂
Burn 把性能拆成 6 块,每一块都有真凭实据。
### 1. 自动内核融合(Automatic kernel fusion)
写高阶代码,跑时生成 GPU kernel。
示例:自己写的 GELU 激活函数
fn gelu_custom<B: Backend, const D: usize>(x: Tensor<B, D>) -> Tensor<B, D> {
let x = x.clone() * ((x / SQRT_2).erf() + 1);
x / 2
}
运行期自动编译成 60 行 WGSL,性能≈手写 CUDA。你只管写逻辑,优化留给框架。
### 2. 异步执行(Asynchronous execution)
计算不阻塞主线程;框架开销 ≈ 0。
官方博客实测:同样模型,Burn 比 PyTorch 快 1.2 ~ 1.8 倍,CPU 利用率更高。
### 3. 线程安全
Rust 的所有权系统天然线程安全。
多卡训练:把模型 clone 一份丢给新线程,梯度算完再聚合,无需额外锁。
### 4. 智能内存管理
-
内存池复用,减少 malloc/free。 -
借用检查器判断“能否原地修改”,省显存。
### 5. 自动内核选择
矩阵乘法有上百种 tile 配置。Burn 先跑微基准,再把最优配置缓存下来。第一次慢,后面飞快。
### 6. 硬件专属特性
硬件 | 专属优化 | 支持情况 |
---|---|---|
NVIDIA GPU | Tensor Cores | ✅ |
Apple GPU | Metal Performance Shaders | ✅ |
手机 AI 芯片 | 等待 WGSL 扩展 | 🚧 |
## 后端大观园:一张表看懂支持哪些设备
后端 | 适用设备 | 谁维护 | 备注 |
---|---|---|---|
CUDA | NVIDIA GPU | 官方 | Tensor Core 已支持 |
ROCm | AMD GPU | 官方 | |
Metal | Apple GPU | 官方 | macOS/iOS |
Vulkan | Linux/Windows 多数 GPU | 官方 | |
Wgpu | 通用 GPU | 官方 | 还能编译到 WebAssembly |
NdArray | 通用 CPU | 社区 | no_std 可用 |
LibTorch | 多数 GPU & CPU | 社区 | 兼容 PyTorch 算子 |
Candle | NVIDIA / Apple / CPU | 社区 | HuggingFace 出品 |
>
想同时用 CPU 和 GPU?Burn 提供了 Router 装饰器,一行代码搞定多设备混合计算。
## 训练 & 推理:从笔记本到浏览器,一条龙
### 训练仪表盘长什么样?
-
终端里跑 TUI(基于 Ratatui),实时滚动 loss、acc。 -
按 ↑↓ 键查看历史曲线,Ctrl+C 安全退出,自动保存 checkpoint。
动图演示:
### 模型怎么“搬家”?
来源 | 搬家方式 | 一句话教程 |
---|---|---|
ONNX | burn-import 直接读 |
文档 |
PyTorch | 权重转 .safetensors 再读 |
文档 |
Safetensors | 同上 | 文档 |
### 部署到哪里?
-
浏览器
WGPU → WebAssembly → 在线 Demo:-
MNIST 手写数字识别(试玩) -
图像分类上传即跑
-
-
嵌入式
no_std
关掉标准库,NdArray 后端可在 Cortex-M 跑推理。 -
服务器
Rust 二进制一键docker run
,无 Python 运行时,镜像 < 50 MB。
## 五分钟上手:写第一个网络
### 步骤 1:装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
### 步骤 2:新建工程
cargo new hello_burn && cd hello_burn
cargo add burn --features wgpu
### 步骤 3:写模型
use burn::nn;
use burn::module::Module;
use burn::tensor::backend::Backend;
#[derive(Module, Debug)]
pub struct Mlp<B: Backend> {
linear1: nn::Linear<B>,
linear2: nn::Linear<B>,
activation: nn::Relu,
}
impl<B: Backend> Mlp<B> {
pub fn forward<const D: usize>(&self, x: Tensor<B, D>) -> Tensor<B, D> {
let x = self.linear1.forward(x);
let x = self.activation.forward(x);
self.linear2.forward(x)
}
}
### 步骤 4:训练
直接跑官方示例:
git clone https://github.com/tracel-ai/burn
cd burn/examples/mnist
cargo run --release
第一次会跑内核选择微基准,耐心等待 1-2 分钟,后面飞快。
## 常见疑问 FAQ
### Q1:Rust 难学吗?
A:语法 3 天能上手,所有权概念 1 周可掌握。Burn 把底层封装得很好,日常写模型就是拼接 Module
,心智负担 ≈ PyTorch。
### Q2:Windows 能跑吗?
A:Vulkan / WGPU / CUDA 后端都支持 Windows,官方 CI 每日自动测试。
### Q3:显卡驱动有要求?
A:
-
CUDA 后端:驱动 ≥ 515 -
Vulkan 后端:只要显卡支持 Vulkan 1.2 -
Apple:macOS 12+ 即可
### Q4:模型保存后版本升级怎么办?
A:
-
0.14-0.16 版本需启用 record-backward-compat
feature 才能加载旧记录。 -
加载后立刻用新版本保存,即可永久解决。 -
二进制格式不向前兼容,推荐用 NamedMpkFileRecorder
这种自描述格式。
### Q5:想写自定义 GPU kernel?
A:
-
参考示例 custom-wgpu-kernel。 -
用 WGSL 写 60 行 shader,框架帮你接进计算图。
## 真实案例速览
示例名 | 场景 | 亮点 |
---|---|---|
MNIST 训练 | 手写数字识别 | 10 行代码训练 CNN |
文本分类 | AG News 新闻分类 | Transformer 完整实现 |
WGAN-MNIST | 手写数字生成 | Wasserstein GAN |
浏览器推理 | WebAssembly | 无需服务器,纯前端 |
自定义 CSV 数据集 | 房价回归 | 轻松接入任意表格数据 |
全部示例都在 examples/
目录,直接 cargo run
就能复现。
## 如何继续深入?
-
读《Burn Book》
https://burn.dev/books/burn/
从张量、模块、优化器到自定义后端,章节短平快。 -
加入 Discord
https://discord.gg/uPEBbYYDB6
作者在线答疑,社区氛围友好。 -
## 许可证
Burn 采用 MIT + Apache 2.0 双许可证,闭源商用也没问题。提交 PR 即默认同意该条款。
## 写在最后
如果你厌倦了“训练 Python、部署 C++、调试两周”的循环,Burn 提供了一条新路:
一份 Rust 代码,训练、推理、跨平台全搞定,性能还更好。
现在就把示例跑起来,体验“写完即上线”的快乐吧!