【Rust日报】2026-10-07 Burn 0.22:改模型后重编译降到 1 秒

💡 原文中文,约4300字,阅读约需11分钟。
📝

内容提要

Burn 0.22 移除模型 Backend 泛型,改由 Device 选择后端,重编译时间从 28 秒降至 4.6 秒,Transformer 降至 1 秒,训练吞吐提升 80%。gccrs 编译 core 从 42 分钟降至 3 分钟。eros 库用类型元组组合错误集合。

🔎

延伸解读

Burn 0.22 性能提升的实测条件

Burn 0.22 的重编译时间与训练吞吐数据基于特定硬件和配置:NVIDIA GeForce RTX 4050 Laptop GPU、CUDA、FP32,每版测 3 次,50 步预热、500 步测量。CNN 训练步从 38.0 ms 降至 21.1 ms,Transformer 从 201.0 ms 降至 193.8 ms。显存数字不含 CubeCL 启动时探测带宽的临时分配。读者需注意这些结果可能因硬件、后端和模型结构而异。

Rust 职位市场:高级为主,初级机会少

统计显示,203 个 Rust 职位中 Senior 占 58%,Mid-level 31%,初级合计仅 10 个。109 条写明年限的职位中位数是 5 年。作者指出,常见路径是先以 C++、Python 或 Go 入职,再转到 Rust 团队。美国职位薪资中位数 19.3 万美元,公布薪资区间的比例 61%,欧洲仅 26%。行业集中在加密、数据库、交易和 AI 基础设施。

gccrs 进展与限制

gccrs 编译 core 从 42 分钟降至 3 分钟,但仍无法编译 Linux 内核。名字解析和宏展开交错做到定点的工作耗时近三年。Drop 支持已覆盖常见情况,但非线性控制流、部分移动、泛型和临时值仍会出错。项目对齐 rustc 1.49 和旧内核,还需处理 trait upcasting、新 use 语法等。cfi_encoding 相关补丁尚未合入。

eros 错误处理的设计取舍

eros 用类型元组表示可能返回的错误集合,例如 eros::Result<u16, (io::Error, ParseIntError)>。.union() 将普通 Result 的错误放入 ErrorUnion,.widen() 扩展集合,.recover() 处理并移除指定错误。全部处理后集合变为 (),.into_value() 才能取值。不写元组时默认 AnyError。与 Zig 的 error set 相比,eros 的元组可携带具体错误类型。

❓

Q&A

Burn 0.22 如何将模型重编译时间从 28 秒降到 1 秒?

Burn 0.22 移除了模型中的 Backend 泛型,模型从 Model<B: Backend> 改为普通结构体,Tensor<B, 2> 改为 Tensor<2>。执行位置由 Device 选择,如 Device::cuda(0)。操作路径为 Tensor、Bridge、Dispatch、Backend,Bridge 将具体后端类型挡在应用代码外,因此修改模型时编译器无需重编整个后端依赖链,从而大幅降低重编译时间。

Burn 0.22 在训练吞吐和显存占用上有哪些改进?

在 NVIDIA GeForce RTX 4050 Laptop GPU 上使用 CUDA、FP32 训练,CNN 训练步从 38.0 ms 降到 21.1 ms,训练吞吐提高 80%;Transformer 训练步从 201.0 ms 降到 193.8 ms。预热后 CNN 峰值显存从 956 MiB 降到 486 MiB,Transformer 从 3,486 MiB 降到 2,868 MiB。

gccrs 编译 core 的时间从 42 分钟降到 3 分钟,是如何实现的?

gccrs 通过给重复的名字解析调用加缓存,将编译 core 的时间从大约 42 分钟降到 3 分钟。core 大约 8.5 万行,rustc 编译它需要 30 秒。

eros 库如何用类型元组表示错误集合?

eros 用类型元组表示函数可能返回的错误集合,例如 eros::Result<u16, (io::Error, ParseIntError)>。eros::Result<T, E> 是 Result<T, ErrorUnion<E>> 的别名,元组列出可能的错误类型,实际只存放其中一个。通过 .union() 将普通 Result 的错误放入 ErrorUnion,.widen() 扩展错误集合,.recover::<E, _>() 处理并移除指定错误,全部处理后集合变为 (),再用 .into_value() 取出值。

根据 203 个 Rust 职位的统计,Rust 岗位的薪资和级别分布如何?

统计显示,Senior 占 58%,Mid-level 31%,Staff/Principal/Lead 7%,Junior 加 Intern 5%。有薪资区间的职位年薪中位数为 17.1 万美元,美国为 19.3 万美元,美国 Senior 为 19.8 万美元,美国 Mid-level 为 16.5 万美元。从美国 Mid-level 到 Senior,中位数相差约 3.2 万美元。

Rust 职位描述中最常要求哪些编程语言和技术关键词?

职位描述中提到的语言:C++ 35%,Python 30%,C 20%,Go 18%,TypeScript 14%。技术关键词:分布式系统 32%,Linux 28%,Kubernetes 20%,AWS 17%,Tokio/async 15%,gRPC/tonic 9%,WASM 4%,axum 4%,actix 3%。

🏷️

标签

➡️

继续阅读