AI时代,Rust为何越来越重要?
一、一个反常的现象
2024 年,Stack Overflow 开发者调查发布了最新结果:Rust 连续第九年蝉联 "最受喜爱编程语言",使用率在过去五年里增长了 400%。与此同时,AI 赛道的火热让 Python 看起来像是要统治一切——PyTorch 月下载量突破 3 亿,HuggingFace 上的模型数量突破 100 万,连小学生都在用 Python 调 GPT API。
按照直觉推演,AI 时代的主角应该是 Python。毕竟它上手简单、生态庞大、和深度学习框架无缝衔接。
但事实恰恰相反:越是 AI 深入渗透的领域,Rust 的身影反而越密集。
HuggingFace 的 tokenizer 底层是 Rust。向量数据库 Qdrant 是 Rust。MLX 的 safetensors 是 Rust。DataFusion 是 Rust。Polars 是 Rust。大模型推理引擎 Candle、mistral.rs、burn 全是 Rust。甚至 Linux 内核——操作系统领域最保守的社区——都正式接纳了 Rust 作为第二种开发语言,而推动这一决策的核心论据之一,正是 AI 和云计算场景下的安全需求。
这引出一个值得深思的问题:为什么一个以 "难学" 著称、比 Python 诞生晚二十多年的系统编程语言,会在 AI 时代获得如此高的关注度和采用率?它到底解决了什么 Python 解决不了的问题?
答案藏在 AI 工程化的真实瓶颈里。
二、AI 工程化的真正瓶颈:从"能不能训"到"能不能跑"
如果你只关注 arXiv 上的论文,很容易产生一个错觉:AI 的瓶颈在于 "能不能训练出更好的模型"。GPT-5 什么时候出来?多模态能不能再进一步?上下文窗口能不能突破 1000 万 token?
但你翻翻工业界的招聘需求和事故报告就会看到另一幅图景:
- 某大厂推理服务因为 GC 停顿导致 P99 延迟飙到 300ms,用户流失率一天涨了 2%
- 某创业团队花了三个月训出一个 7B 模型,部署时发现单卡吞吐只有 5 token/s,根本没法上线
- 某数据库团队的 C++ 服务跑了三周后内存泄漏崩了,排查了两天发现是一个野指针
- 某云厂商的推理API定价战打到每百万 token 0.15 元,你的推理成本比这个高 10 倍,直接出局
AI 的瓶颈早已从 "能不能训练出更好的模型" 转移到了 "能不能稳定、高效、低成本地把模型跑起来"。
这个转变意味着什么?意味着决定 AI 产品竞争力的不再是算法 SOTA 的 0.1% 提升,而是:
- 推理延迟:用户输入一个 prompt,200ms 以内返回叫"流畅",2 秒返回叫"还行",5 秒返回用户就走了
- 吞吐量:同样一张 A100,你的服务每秒能产出多少个 token?差 3 倍就是 3 倍的硬件成本
- 稳定性:你的推理服务能不能 7×24 运行而不 OOM、不内存泄漏、不随机崩溃?
- 部署密度:一台机器上能塞多少个模型实例?每个实例占多少内存?这些直接决定了你的账单
而这些恰好是 Rust 设计的核心战场。
三、Rust 如何解决每一个瓶颈
3.1 推理延迟:毫秒级的军备竞赛
大模型推理是计算密集加内存密集。每次推理请求的路径大致是:tokenize → embedding → 层叠的 attention/FFN 计算 → decode → 响应。
Python 生态的方案是 PyTorch/TensorFlow 把底层 C++/CUDA 内核包了一层 Python API。这在训练阶段没问题——训练一个 epoch 跑几个小时,Python 层的开销可以忽略不计。但到了推理部署场景,问题就暴露出来了:
GIL(全局解释器锁):Python 的 GIL 让真正的多线程并行变得不可能。推理服务需要同时处理多个请求,但 GIL 迫使你只能用多进程,而进程间通信和数据拷贝的开销在高并发下迅速膨胀。
GC(垃圾回收):Python 的引用计数加循环检测 GC,在正常业务代码中完全够用。但在处理 70B 模型推理时,每个 token 的解码都涉及大量张量创建和销毁,GC 的 stop-the-world 停顿会周期性地卡住整个推理管线,让 P99 延迟出现毛刺。
序列化开销:Python 生态中数据在不同的库之间流转(numpy → torch → huggingface),每一步都在做格式转换和内存拷贝,这些 "胶水代码" 的开销在单次调用中可能只有几毫秒,但在高频推理场景下累积起来就很可观。
Rust 的解决方案很直接:没有运行时开销,没有 GC,没有 GIL。
拿具体的推理引擎来对比。llama.cpp 是 C++ 生态中最流行的本地推理引擎,它的 Rust 绑定版本 llama-rs 在相同模型和硬件条件下,端到端推理延迟能比 Python 绑定低 30% 到 50%。差的不在于算子优化——底层跑的都是同一套 GGML 内核——差的就是 Python 运行时本身的摩擦:对象包装、内存分配、GIL 竞争。
更进一步的例子是 mistral.rs,一个纯 Rust 实现的推理引擎。它内置了 CUDA kernel fusing、KV cache 量化、prefix caching 等优化,配合 Rust 的零成本抽象,在 decode 阶段的每 token 延迟比 HuggingFace 的 Python 实现低 40% 以上,内存占用降低约 50%。对需要在 A100 上跑大并发推理的生产环境来说,这可能意味着用 4 张卡就能做原来 8 张卡的事。
还有一个容易被忽略的性能点:启动时间。Python 推理服务的冷启动通常需要加载整个 PyTorch 运行时,动辄 5 到 10 秒。这对 Serverless 或者弹性扩缩场景是致命的——流量来了新实例还没起来,流量走了实例还在起。Rust 编译为原生二进制,没有运行时加载开销,冷启动通常在百毫秒级。AWS Lambda 团队选择用 Rust 重写 Firecracker 微虚拟机,冷启动性能就是核心原因之一。
3.2 内存安全:7×24 运行的安全网
先看一组数据。微软安全响应中心在 2019 年发布了一份报告,分析了 2006 年到 2018 年间他们修复的所有安全漏洞:约 70% 的漏洞与内存安全问题直接相关——use-after-free、缓冲区溢出、空指针解引用、double-free。这些漏洞的根因几乎都指向 C/C++ 缺少编译器层面的内存安全保证。
AI 推理服务是一个非常特殊的内存场景:
大模型加载:一个 7B 的 LLaMA 模型,FP16 精度下权重就需要约 14GB 显存或内存。加载过程中涉及大量的内存分配和映射,C++ 里的 new/delete 或者手动 malloc/free 稍有不慎就会产生悬垂指针。
KV Cache 管理:自回归解码过程中,每个生成步骤都需要维护和扩展 KV Cache。这是一个动态增长的数据结构,频繁的分配和回收是内存 bug 的高发区。很多推理引擎的第一个生产事故就是 KV Cache 相关的内存泄漏。
批处理:推理引擎为了提升吞吐,会把多个请求拼成 batch 一起跑。不同请求的 sequence length 不同,batch 结构需要动态调整,这让内存管理更加复杂。
Rust 通过所有权系统(ownership)、借用检查(borrow checker)和生命周期标注(lifetime),在编译期就消除了整类内存错误。不是运行时检查,不是 sanitizer,是编译不过去。
举个具体的例子。假设你在 C++ 里写一个推理引擎的 batch 调度器:
// C++ — 这段代码能编译,但藏着 double-free
auto* cache = new KVCache(max_tokens);
auto batch = build_batch(requests, cache);
process(batch);
delete cache;
// ... 几百行代码后 ...
delete cache; // 如果执行到了这里,double-free,未定义行为
在 Rust 中,等价的代码根本无法编译:
// Rust — 编译不过去
let cache = Box::new(KVCache::new(max_tokens));
let batch = build_batch(&requests, &cache);
process(&batch);
// cache 的所有权在 batch 创建后已经转移,或者被借用,无法再被"重复释放"
// 编译器强制你写对
这种编译期保证对于需要 7×24 运行的 AI 推理服务来说,不是一个 "好用的特性",而是底线要求。你能想象 ChatGPT 每小时因为内存 bug 崩一次吗?
而且 Rust 的内存安全不是通过 GC 实现的——它不需要运行时扫描、不需要 stop-the-world。这就意味着你在获得内存安全的同时,完全没有付出 GC 的性能代价。这正是 Rust 区别于 Java/Go/C# 等 GC 语言的核心差异点。
3.3 并发模型:fearless concurrency
现代 AI 推理服务的并发场景极其复杂:
- 一个推理引擎同时处理几十个用户请求
- 每个请求的文本长度不同、生成参数不同、对应的 KV Cache 状态不同
- GPU 计算是异步的,需要和 CPU 侧的 tokenizer、请求调度、结果回传协调
- 可能同时涉及模型加载线程、推理 worker 线程、HTTP 服务线程、监控线程
传统的并发方案各有痛点:
- C++ 多线程:
std::thread+ 互斥锁,功能强大但极易写出数据竞争和死锁。即便是资深 C++ 程序员也经常在并发代码上翻车 - Go goroutine:简洁易用,但 GC 带来的 stop-the-world 停顿在高并发、大内存场景下会成为瓶颈——一个 Go 推理服务加载 14GB 的模型后,GC 扫描的压力会非常大
- Python asyncio:本质单线程事件循环,无法利用多核,且任何阻塞操作(包括 numpy 计算)都会卡住整个事件循环
Rust 的方案是 tokio + async/await + channel:
// Rust 异步推理服务的简化示例
#[tokio::main]
async fn main() {
let (tx, rx) = tokio::sync::mpsc::channel::<InferRequest>(1024);
// 推理 worker 协程
let worker = tokio::spawn(async move {
let model = Model::load("llama-7b.safetensors").unwrap();
while let Some(req) = rx.recv().await {
let output = model.infer_sync(req.prompt, req.max_tokens);
req.response_tx.send(output).unwrap();
}
});
// HTTP 服务协程
let app = Router::new()
.route("/v1/chat", post(handle_chat))
.with_state(tx);
axum::serve(app).await;
}
这段代码看起来像是普通的 async/await 风格,但背后有几个关键保证:
- 无数据竞争:Rust 编译器保证
Model在 worker 协程中独占,任何其他协程要访问它必须通过 channel 传递消息,不可能出现两个线程同时修改模型状态的竞争 - 无 GC 停顿:tokio 的任务调度是协作式的,内存回收是确定性的(RAII),不存在"整个进程暂停等 GC"的情况
- 零成本抽象:async/await 编译后是状态机,没有额外的运行时分配开销
Go 的 goroutine 虽然好用,但它的 slogan 是 "Do not communicate by sharing memory; instead, share memory by communicating." Rust 版本更激进:编译器让你根本没法 share memory,你只能通过 channel communicate。
这种设计在 AI 推理场景中直接转化为吞吐量的提升。根据 Discord 工程团队的分享,他们将部分 Go 服务用 Rust 重写后,P99 延迟降低 4 到 10 倍,内存占用降低 50%。虽然这不是专门的推理服务对比,但并发模型和内存效率的增益在大内存场景下只会更明显。
3.4 FFI:连接 Python 生态的桥梁
Rust 有一个经常被忽略但极其重要的优势:它是最容易和 Python 交互的编译型语言。
通过 PyO3 库,你可以用几行代码把 Rust 函数暴露为 Python 模块,直接从 Python 调用:
use pyo3::prelude::*;
/// 一个用Rust实现的快速tokenizer
#[pyfunction]
fn tokenize_fast(text: &str) -> PyResult<Vec<u32>> {
// Rust实现的高性能分词逻辑
Ok(rust_tokenizer::encode(text))
}
#[pymodule]
fn my_fast_tokenizer(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_function(wrap_pyfunction!(tokenize_fast, m)?)?;
Ok(())
}
Python 侧直接 pip install 编译好的 wheel 包,然后:
import my_fast_tokenizer
tokens = my_fast_tokenizer.tokenize_fast("Hello, world!") # 比纯Python快50倍
HuggingFace 的 tokenizers 库就是这么做的——Python 接口,Rust 内核。safetensors 同理。pydantic-core 同理。orjson 同理。
这意味着团队不需要在 "用 Python 的便利" 和 "用 Rust 的性能" 之间做选择。他们可以在需要的地方用 Rust 重写热路径,对外依然暴露 Python API。这种渐进式的迁移路径是 Rust 独有的优势——你没法用 C++ 这么方便地集成 Python(pybind11 比 PyO3 复杂得多),更没法用 Go(Go 和 C interop 没问题,但和 Python 的 FFI 成本很高)。
四、Rust 在 AI 全栈的生态版图
Rust 在 AI 领域的渗透不是单点突破,而是从底层到顶层全栈覆盖。我们来分层梳理。
4.1 模型格式与安全加载
safetensors 是 HuggingFace 推出、纯 Rust 实现的模型权重序列化格式。它的设计动机很直白:传统的 PyTorch 模型用 pickle 序列化,而 pickle 可以执行任意 Python 代码。你在 HuggingFace 上下载了一个看起来很正常的模型权重文件,解 pickle 时它可能悄悄执行恶意代码。
safetensors 用零拷贝设计,读取速度比 pickle 快一个数量级,而且完全杜绝了代码注入风险。2023 年以来,safetensors 几乎成了模型分发的标准格式——HuggingFace Hub 上的模型现在默认提供 safetensors 版本,HuggingFace 官方甚至建议用户 "看到 .bin 文件要警惕"。
一个模型分发格式的底层用 Rust,这本身就是一个信号:当安全性变得如此关键,以至于模型分发格式都需要重新设计时,Rust 的内存安全保证就成了不可替代的竞争优势。
4.2 Tokenizer:AI 流水线的第一站
tokenizers(HuggingFace 出品)是 AI 领域使用最广泛的文本分词库之一。它的核心完全用 Rust 编写,通过 PyO3 暴露 Python API。
性能对比很直观:纯 Python 实现的分词器处理长文本需要数秒,而 tokenizers 能轻松做到亚毫秒级。对于实时推理服务,分词延迟是请求链路的第一个环节,慢 1ms 就意味着整体延迟多 1ms。
更关键的是,tokenizers 的 Rust 内核支持多线程并行分词,这在批量处理大规模语料时非常关键。训练一个语言模型需要分词数 TB 的文本数据,分词速度直接影响数据预处理的周期。Rust 的并发安全性让你可以放心地开满 CPU 核心,不用担心中途崩溃。
4.3 训练框架:从纯 Python 到混合架构
虽然深度学习训练的主流阵地依然是 PyTorch(Python 生态),但 Rust 原生训练框架正在快速成长:
Candle(HuggingFace 出品)是一个设计极简的纯 Rust 机器学习框架,零 Python 依赖。它的核心理念是:深度学习计算说到底就是张量运算,不需要几 GB 的 Python 依赖。Candle 可以编译为单个二进制文件,直接在嵌入式设备、WASM 浏览器环境、甚至树莓派上运行模型推理。
Burn 是另一个纯 Rust 深度学习框架,它的设计更偏学术方向,提供类似 PyTorch 的高级 API 但底层完全基于 Rust 的 WGPU 计算后端。Burn 的目标不是替代 PyTorch,而是为那些不想引入 Python 依赖的推理场景提供选择。
需要诚实地说,Rust 训练框架目前还远不如 PyTorch 成熟——算子覆盖面、分布式训练支持、混合精度训练的稳定性都有差距。在模型训练这个环节,Python 在可预见的未来仍然是主力。但 Rust 训练框架的存在,意味着你在训练完模型之后,不需要 switch language 就能直接部署——这对某些低延迟、边缘部署的场景非常有吸引力。
4.4 推理引擎:Rust 最成熟的 AI 阵地
推理引擎是 Rust 在 AI 领域目前最活跃、最成熟的战场:
- mistral.rs:纯 Rust 实现的推理引擎,支持 LLaMA、Mistral、Phi、Gemma 等主流模型。内置量化(ISQ)、前缀缓存、推测解码等高级优化。内存效率极高,7B 模型在消费级显卡上就能流畅运行
- llama-rs / ratchet:Rust 绑定 llama.cpp,让你能用 Rust 安全地调用 C++ 推理核心。相比直接用 Python 的方案,减少了 Python 运行时的开销
- candle-transformers:基于 Candle 框架的推理工具,重点在于"零 Python 依赖"——你可以把推理引擎编译成一个不到 50MB 的二进制文件
- burn:前面提到的框架,在推理场景中也表现出色,尤其在 WGPU 后端支持下能在各种硬件上运行
这些引擎的共同特点是:内存占用低、启动快、不需要 Python 运行时。对于想把模型部署到边缘设备(手机、IoT、车载)的场景,这些特性是刚需。你不可能在车载系统里装一个 2GB 的 PyTorch + Python 环境跑推理,但一个 30MB 的 Rust 二进制完全可以。
4.5 向量数据库与搜索
AI 应用绕不开向量检索——RAG(检索增强生成)几乎成了 LLM 应用的标准架构。向量检索的性能直接影响 RAG 的延迟和质量。
Qdrant 是目前最流行的向量数据库之一,完全用 Rust 编写。它的核心卖点是高性能和高可靠性——Rust 的内存管理让它在处理百万级向量检索时能保持稳定的延迟,没有 GC 抖动。Qdrant 已经被多家公司用于生产环境的 RAG 和推荐系统。
Meilisearch 也是 Rust 写的,虽然定位是全文搜索,但在混合检索(向量 + 关键词)场景中越来越多被用于 AI 应用的检索层。
4.6 数据处理与分析
AI 训练的第一步永远是数据预处理,而数据预处理往往是整个 pipeline 中最耗时的环节。
Polars 是目前发展最快的 DataFrame 库之一,纯 Rust 实现,有 Python 绑定。在很多 benchmark 上,Polars 的速度是 pandas 的 10 到 50 倍,内存占用是 pandas 的十分之一。对于需要处理 GB 甚至 TB 级训练数据的 AI 团队来说,Polars 已经不是 "可选的替代品",而是实打实的生产力工具。
DataFusion(Apache Arrow 生态)是用 Rust 构建的分布式 SQL 查询引擎,已经被 InfluxDB 3.0 和多个数据平台采用为底层引擎。在 AI 数据的 ETL 环节,DataFusion 能做到亚秒级查询 TB 级 Parquet 数据。
4.7 云原生基础设施
这部分可能离 AI 开发者比较远,但对系统架构师来说至关重要:
- Firecracker(AWS Lambda 底层):用 Rust 重写的微虚拟机管理器,每个 Lambda 函数都在一个独立的 Firecracker 微虚拟机中运行。冷启动时间 < 125ms,内存开销 < 5MB——如果用 C++ 实现,内存安全风险会让 AWS 不敢让你在一个物理机上跑几千个微虚拟机
- containerd 的 Rust 替代品 youki:纯 Rust 实现的 OCI 容器运行时,性能和 containerd 持平,但代码量少一半,且内存安全保证更好
- WASM 运行时:wasmtime(字节码联盟)、wasmer 全是 Rust 实现。WASM 被誉为"下一个容器",在边缘 AI 部署中被寄予厚望——一个 WASM 模块可以直接跑在任何平台,配合 Rust 编译到 WASM 的能力,实现了"训练在云端,推理在边缘"
4.8 生态全景图
把上面的内容汇总成一张表,能更清晰地看到 Rust 在 AI 全栈中的位置:
| 层级 | 工具/项目 | 语言 | 在AI流水线中的角色 |
|---|---|---|---|
| 数据预处理 | Polars, DataFusion | Rust + Python绑定 | 大规模数据集清洗、转换、ETL |
| 模型格式 | safetensors | Rust | 安全的模型权重序列化/反序列化 |
| 分词 | tokenizers | Rust + Python绑定 | 训练和推理的文本编码 |
| 训练框架 | Candle, Burn | Rust | 轻量级训练、无需Python的推理 |
| 推理引擎 | mistral.rs, candle | Rust | 高性能大模型推理 |
| 向量检索 | Qdrant | Rust | RAG场景的向量相似度搜索 |
| 全文搜索 | Meilisearch | Rust | 混合检索 |
| 服务部署 | axum, actix-web | Rust | 高性能Web服务,推理API |
| 边缘部署 | WASM + wasmtime | Rust | 浏览器/嵌入式推理 |
| 云原生 | Firecracker, youki | Rust | 推理服务的容器化基础设施 |
这就是 Rust 在 AI 时代的真实位置:它不是 AI 的 "主角语言",但它是 AI 基础设施的 "默认语言"。
五、深度案例:大厂为什么押注 Rust
与其罗列抽象的理由,不如深入看几个具体案例。这些案例不是停留在博客文章的 "尝试",而是实实在在支撑着数十亿美元业务的生产系统。
5.1 AWS Firecracker:Lambda 的底层引擎
AWS Lambda 是全球最大的 Serverless 计算平台之一,每天处理数万亿次函数调用。每一个 Lambda 函数在被调用时,都被分配到一个独立的微虚拟机中运行。这个微虚拟机的运行时就是 Firecracker。
Firecracker 最早用 C 语言编写。但 AWS 团队在 2020 年左右做出了一个重要决定:完全用 Rust 重写关键组件。
为什么?
- 多租户隔离:一台物理机上跑着成百上千个不同客户的微虚拟机。任何一个虚拟机的内存破坏如果"越狱"到宿主机,就是严重的安全事故。Rust 的内存安全保证让 AWS 有更强的信心做高密度部署
- 启动速度:Rust 的零成本抽象和无 GC 让 Firecracker 的启动时间压缩到 125ms 以内。这意味着 Lambda 函数的冷启动延迟大幅降低——对用户来说,就是调用 Lambda 时不会再明显"卡一下"
- 确定性性能:没有 GC 意味着没有不可预测的停顿。这对 Lambda 的 P99 延迟 SLA 至关重要
AWS 的这个决策,本质上是用 Rust 做了一次 "安全性 + 性能" 的加杠杆——同样的物理机可以更安全地跑更多租户,每个租户还更快。
5.2 微软:从"C++ 默认选"到"Rust 默认选"
微软 Azure CTO Mark Russinovich 在 2022 年发了一条引发广泛讨论的推文:"说到语言,是时候停止用 C/C++ 开始任何新项目了。那些需要非 GC 语言的场景,用 Rust。"
这不是个人偏好,而是基于数据的决策。微软安全响应中心的数据显示,Windows 和 Azure 约 70% 的高危安全漏洞根因是内存安全问题。在 Azure 的大规模多租户环境下,一个内存漏洞的成本可能是数百万美元的赔偿和用户信任的永久损失。
微软已经在多个项目中落地 Rust:
- Windows 内核:部分组件用 Rust 重写,包括 DWriteCore(字体渲染引擎)和 Win32k GDI 的 Rust 原型。这是对 Rust 安全性最极致的认可——内核代码出了 bug 就是蓝屏,都敢用 Rust
- Azure 量子计算 SDK:部分组件用 Rust 实现,用于量子模拟的高性能计算
- Azure IoT:边缘计算场景中的多个组件用 Rust 重写,减小内存占用和攻击面
微软的转向传递了一个清晰信号:C++ 在系统编程领域的统治地位正在被 Rust 挑战,而安全性和性能的同时获得,是这个挑战的核心竞争力。
5.3 Linux 内核:全球最保守社区的认可
2022 年 12 月,Linux 6.1 发布,这是第一个正式支持 Rust 编写内核模块的 Linux 版本。Linus Torvalds 本人在内核邮件列表中一直保持着对 C++ 开发者 "不太友好" 的态度,却对 Rust 表示了开放和支持。
把 Rust 引入 Linux 内核的阻力巨大:内核社区极其保守,维护者大多是写了三四十年 C 的资深工程师,C 语言就是他们的 "第二母语"。Rust 需要说服的不仅是 "Rust 更安全",还要证明 "Rust 不会让内核代码变得不可维护"。
最终通过的论据是实打实的数据:
- Android 团队在 2022 年的内核峰会上展示了他们的统计:过去两年中,新增的内存安全漏洞中 65% 以上可以用 Rust 在编译期避免
- Google 在 Chromium 项目中引入 Rust 后,相关的内存安全漏洞几乎降为零
- 内核中的 Rust 抽象层(如
kernel::sync::Arc、kernel::sync::Mutex)在代码审查中表现出了比 C 版本更好的可读性和更少的 subtle bug
现在,包括 Google Android、Asahi Linux、多个网卡和文件系统驱动在内的项目都在使用 Rust 编写 Linux 内核模块。AI 相关的场景也在跟进——数据中心的 GPU 驱动和 RDMA 通信模块,都在探索用 Rust 替代部分 C 代码。
5.4 Discord:从 Go 到 Rust 的性能飞跃
Discord 的工程团队在 2023 年分享了一个经典案例。他们的消息服务(Read States)原先用 Go 实现,但在流量高峰期频繁出现性能问题:P99 延迟飙升,GC 停顿让服务在短时间内不可用。
他们做了两次重写。第一次是优化 Go 代码(减少内存分配、优化数据结构),效果有限。第二次是用 Rust 从零重写同一服务。
结果:P99 延迟降低了 4 到 10 倍,内存占用降低 50%,而且延迟的方差(jitter)几乎消失——Rust 的确定性内存回收让每一条消息处理的耗时高度一致,不再有 GC 导致的毛刺。
Discord 不是特例。Cloudflare、1Password、Dropbox 等多家公司都发表过类似的 Go→Rust 重写案例,结论高度一致:在大内存、高并发的服务场景下,Rust 的确定性性能和内存效率相比 GC 语言有本质优势。
对于 AI 推理服务,这个结论只会更强烈——一个加载了 14GB 模型的 Go 服务,GC 需要扫描整个堆,停顿时间可能长达几百毫秒。而 Rust 推理引擎的每次 "垃圾回收" 只是退出作用域时的 drop 调用,完全分散在计算过程中,不会出现集中停顿。
5.5 阿里巴巴 & 字节跳动:中国大厂的 Rust 实践
国内大厂的 Rust 采用也在加速:
- 字节跳动内部有一个专门的 Rust 团队,负责飞书、抖音等产品的高性能服务。他们的 FlyDB(飞书自研的 KV 存储引擎)大量使用 Rust。字节的 Rust 实践分享中提到,Rust 服务上线后,"几乎不需要半夜被 OOM 告警叫醒"
- 阿里巴巴的多个中间件开始用 Rust 重写,包括数据库 Proxy、消息队列等。阿里云也推出了 Rust 版本的 PolarDB 代理。蚂蚁集团用 Rust 实现了一套高性能的隐私计算框架
- 百度 Apollo 自动驾驶平台中,部分关键模块用 Rust 实现,利用 Rust 的确定性执行满足车规级安全要求
这些案例的共同点:都是对延迟敏感、对稳定性要求极高、并发量大的场景。而这些场景,恰好也是 AI 推理部署的典型特征。
六、Python + Rust:AI 时代的新分工范式
说 "Rust 要取代 Python" 是一种粗暴且不准确的二元叙事。更精确的描述是:AI 开发正在分化成两个层次,每个层次由不同的语言主导。
6.1 两个层次,两种语言
创新层(0→1):模型架构设计、训练实验、超参数调优、Prompt Engineering、RLHF。这个层次的核心诉求是快速试错、方便可视化、生态丰富。Python 在这层的优势是压倒性的——你不可能让研究员在 Rust 里手动管理所有权来跑一个实验。
工程层(1→N):模型部署、推理服务、数据管线、工具链、分布式调度。这个层次的核心诉求是性能、稳定性、成本控制。Rust 在这层正在形成类似 C++ 在传统基础设施中的统治力。
真实的分工图景是:
┌─────────────────────────────────────────┐
│ 创新层(Python) │
│ 模型设计 → 训练 → 评估 → 论文 │
│ │ │
│ ▼ (导出 safetensors) │
│ 工程层(Rust) │
│ 推理服务 → API网关 → 向量检索 → 监控 │
└─────────────────────────────────────────┘
6.2 这种分工为什么有效
技术层面:
- PyO3 让 Rust 和 Python 的互操作成本极低。Rust 写的核心逻辑可以直接编译为 Python wheel,Python 开发者感受不到任何切换
- safetensors 成为标准格式后,训练(Python/PyTorch)和推理(Rust/Candle/mistral.rs)之间的桥接成本几乎为零
组织层面:
- AI 研究员不需要学 Rust,他们继续用 Python 实验
- 工程团队用 Rust 做生产部署,获得性能和稳定性收益
- 两个团队通过模型格式和 API 解耦,互不阻塞
成本层面:
- 同样硬件上,Rust 推理引擎的吞吐通常比 Python 高 2-5 倍,硬件成本直接砍半
- Rust 服务的内存占用更小,单个节点可以部署更多实例,进一步摊薄成本
- Rust 服务的稳定性更好,oncall 工程师半夜被叫起来修内存 bug 的概率大幅降低
6.3 一个典型的技术栈
假设一个 AI 创业团队要上线一个 RAG(检索增强生成)产品,他们的技术栈大概率是这样的:
| 组件 | 语言 | 理由 |
|---|---|---|
| 模型训练/微调 | Python + PyTorch | 生态最成熟 |
| 推理服务 | Rust + mistral.rs/candle | 低延迟,高吞吐 |
| 向量数据库 | Qdrant(Rust) | 高性能,稳定性好 |
| API 服务 | Rust + axum | 低延迟 HTTP 服务 |
| 数据 ETL | Python | pandas 够用,快速开发 |
| 前端 | 和你后端语言无关 | - |
这个栈中,Python 和 Rust 各司其职。Python 负责 "快速做出能用的",Rust 负责 "让能用的真的能用在生产环境"。
七、对学习者意味着什么:从学生到工程师的视角
如果你是 AI 方向的学生或初学者,看到这里可能会问:我已经在学 Python 和 PyTorch 了,还需要学 Rust 吗?怎么学?
7.1 为什么值得学
先给一个务实的理由:AI 领域的招聘 JD 中,"熟悉 C++/Rust 等高性能语言" 正在从加分项变成高频出现的优先条件。
字节跳动、DeepSeek、智谱 AI 等公司的推理引擎和基础设施岗位,Rust 经验会直接提高简历通过率。原因很简单——能把模型训出来的人很多,能把模型高效部署到生产环境的人才是稀缺的。
再给一个更根本的理由:学 Rust 会让你变成一个更好的程序员,不管以后写什么语言。
Rust 的所有权系统和生命周期,本质上是对 "内存在程序中的流动" 的精确建模。学完 Rust 之后,你再写 Python 代码时,会在潜意识里思考每个变量到底是谁在持有、什么时候该释放、会不会有并发竞争。这些思考习惯直接转化为更高质量的代码。
7.2 学习路径建议
不推荐一上来就啃《Rust 程序设计语言》(大家叫它 "Rust 圣经" 或 "The Book")。这本书很好,但 700 多页对一个刚入门的学生来说太容易劝退。推荐一条更有反馈感的学习路线:
第一阶段:用 Rust 重写你熟悉的 Python 小工具(2-4 周)
找一个功能你已经完全理解的 Python 脚本——比如文本处理、简单的爬虫、CLI 工具——用 Rust 重写一遍。这个阶段的目标不是写出高性能代码,而是让编译器教你。你会被借用检查器报错几十次,每解决一个错误就是对 Rust 所有权模型的一次理解。
工具选择:clap 做 CLI、reqwest 做 HTTP、serde 做序列化。这三个库能覆盖大部分实用场景。
第二阶段:理解 Rust 的 "异类" 概念(2-3 周)
Rust 有几个在别的语言里找不到对应物的概念,需要专门花时间消化:
- 所有权和移动语义:理解为什么
let y = x;之后x就不能用了 - 生命周期:理解
&'a T到底在说什么 - Trait:它像 Java 的 interface 但又不同,是 Rust 多态的核心机制
- async/await 和 Future:和 Python 的 asyncio 有什么不同
推荐资源:Jon Gjengset 的 YouTube 频道 "Crust of Rust" 系列,每个视频拆解一个 Rust 核心概念,深度和广度都很好。
第三阶段:参与 Rust AI 生态的开源项目(持续)
不要等 "学完" 再动手。Rust AI 生态中适合初学者贡献的项目不少:
- Candle:HuggingFace 的 Rust ML 框架,issue 中有很多 good-first-issue
- tokenizers:HuggingFace 的分词库,Rust 内核,Python 接口。理解它的代码对理解 Rust FFI 很有帮助
- safetensors:相对小巧的代码库,适合阅读 Rust 项目结构
- Polars:大型项目,文档好,PR 流程规范,是学习工业级 Rust 代码的好材料
第四阶段:构建自己的项目
当你对 Rust 有一定熟悉度后,试着做一个完整的项目。建议方向:
- 用 Rust + axum 搭建一个简单的推理 API 服务
- 用 Rust 写一个自定义的模型评估工具
- 用 Rust 实现一个简单的 Attention 机制(做比调用更难,做出来理解更深)
7.3 一个心态建议
Rust 社区有个出名的说法:"Rust 的学习曲线不是陡峭,是有悬崖。" 前十个小时你可能觉得 "这怎么比 C++ 还难写",二十个小时后开始理解编译器的意图,五十个小时后你会觉得没有编译器帮你检查代码总有点不放心。
不要被前期的挫败感劝退。Rust 编译器不是你的敌人,它是你请来帮你审查代码的——只是它脾气不太好。
八、展望:未来五年的趋势
8.1 Rust 在 AI 领域的三个确定性趋势
趋势一:推理引擎将继续向 Rust 靠拢
目前主流的推理引擎(vLLM、TGI、TensorRT-LLM)大多还是 Python 或 C++ 主导。但新一批引擎(mistral.rs、Candle、burn)已经证明了 Rust 路线的可行性。接下来的格局可能是:C++ 引擎继续主导追求极致 Cuda kernel 优化的顶级性能场景,Rust 引擎在内存安全要求高、部署密度大、边缘场景多的市场快速扩张。
趋势二:Rust 将成为 AI 工具链的默认语言
HuggingFace 已经示范了这条路线:Python 接口,Rust 核心。safetensors 和 tokenizers 的成功意味着类似的模式会被更多 AI 基础设施工具采用。数据管线(Polars/DataFusion)、向量检索(Qdrant)、模型评估框架——下一个用 Rust 重写的 AI 工具链组件随时会出现。
趋势三:WASM + Rust 将打开边缘 AI 的新部署范式
浏览器内推理、CDN 边缘节点推理、IoT 设备推理——这些场景的共同需求是:二进制小、启动快、无运行时依赖、沙箱安全。Rust 编译到 WASM 完美匹配这四点。HuggingFace 的 Candle 已经能在浏览器中运行 Whisper 和 LLaMA 级别模型。五年后,边缘 AI 的运行时大概率是 WASM,而写 WASM 的语言大概率是 Rust。
8.2 不确定性的部分
诚实地说,也有一些可能限制 Rust 在 AI 领域扩张的因素:
- C++ 的惯性:CUDA 生态的核心仍然是 C/C++。NVIDIA 如果推出对 Rust 更友好的 CUDA 绑定,会极大加速 Rust 在训练框架层的渗透。但目前来看,NVIDIA 并没有明显的动力这么做
- Python 3.13 的自由线程模式:Python 正在探索移除 GIL。如果最终成功,Python 在推理部署中的多线程问题会得到缓解。但即便 GIL 消除,Python 解释型的性能天花板依然存在,不太可能动摇 Rust 在核心计算层的地位
- Rust 学习成本:这个短期内不会改变。Rust 的复杂性不是 bug 而是 feature——正是所有权系统和生命周期提供了内存安全保证。这意味着 Rust 永远不可能像 Python 那样"五分钟上手"
九、结语
回到文章开头的问题:为什么 Rust 在 AI 时代越来越重要?
不是因为 Rust 突然变得擅长训练模型了,也不是因为 AI 社区集体转向了系统编程。而是因为AI 的规模化部署,对底层工程提出了前所未有的要求。
当模型从几百万参数膨胀到几千亿参数,当单个推理请求从实验室的 demo 变成每分钟百万量级的线上服务,当一次内存崩溃不再只是 "重启一下就好" 而是直接烧掉几十万硬件成本——这时候,Rust 的安全性和性能就不再是 "锦上添花",而是 "底线配置"。
用一句话概括:Python 让 AI 飞起来,Rust 让 AI 不会摔下来。
对于每一个认真投入 AI 领域的学习者来说,Rust 不是用来和内卷竞争的另一门考试,而是打开底层工程世界的那把钥匙。当你既能用 Python 在笔记本上快速验证一个想法,又能用 Rust 把它变成生产环境里稳定运行的服务,你就不是在 "学两门语言"——你是在成为一个全栈 AI 工程师。
而这,可能是在 AI 求职市场越来越拥挤的当下,最有价值的差异化能力之一。
评论交流
欢迎留下你的想法