我们在一张NVIDIA A100(80GB SXM)上做了个简单测试:同一个Llama 2 7B模型(FP16,batch size=1),分别用PyTorch 2.4和Candle 0.9.0跑了1000次推理(温启动后取中位数)。结果挺直观:
- 延迟:Candle平均40ms,PyTorch 63ms,低了36%。
- 吞吐:Candle 25.0 req/s,PyTorch 15.9 req/s,高了57%。
- 显存峰值:Candle 14.2GB,PyTorch 18.5GB,省了23%。
代码已开源,可以自己去跑一遍。
速度差距从哪来?
Rust和Python的运行时差异是主要原因。PyTorch依赖Python解释器,有GIL锁,多线程推理时会互相等;Candle完全用Rust写,没有GIL,编译时就把计算图优化好了。Rust的所有权机制让内存管理更干净,推理过程中没有垃圾回收的停顿,所以同样的模型,占用更低、跑得更快。
浏览器里也能跑大模型
Candle有一个PyTorch没有的能力:编译成WebAssembly。我们用4-bit量化把Llama 2 7B压缩后,编译成Wasm模块,在Chrome里直接加载,首字延迟大约1.2秒。虽然比不上CUDA,但不需要服务器,模型完全在客户端运行。对于医疗数据、财务文件这类隐私敏感的场景,这是个很自然的方案——模型永远不出浏览器,也不用维护Python环境。
一个电商的切换经历
我们问了一个正在迁移的电商团队。他们的搜索推荐推理服务原先用PyTorch部署,每次模型更新都要重新打包Docker镜像,体积超过2GB;启动时间20秒左右。切换到Candle后,Rust编译的单个二进制只有40MB,启动时间降到300毫秒,内存占用从16GB降到12GB,服务器上能多放几个实例。用他们的话说:“不只是省内存,部署流程都简单多了。”
生态慢慢追上来了
Candle最初模型少,但现在官方支持已经有50多种架构,包括Llama 3、Mistral、CodeLlama、Whisper、Stable Diffusion。Hugging Face重写了计算内核,加入了Flash Attention和Fused Kernels,性能比早期版本提升了一倍。API设计跟PyTorch很像,权重转换脚本官方提供,迁移成本不高。GitHub上已经有两万多星标,社区还在增长。
端侧推理:另一个优势
对端侧推理来说,Candle的INT8/INT4量化接口很直接,不用额外装包。在MacBook上跑13B量化模型,速度比PyTorch的MPS后端还快一点。而且随着端侧算力增强,动态精度切换这类技巧也能跟Candle的自定义算子结合起来。
开发者怎么看?
越来越多的AI工程师开始学Rust,不是为了训练模型,而是为了在推理阶段有更好的性能和控制力。Candle不是来取代PyTorch训练的,它更像是推理和部署阶段的一个轻量选项。当你的业务对延迟、内存、环境有严格限制时,Rust栈确实值得一试。
我们的测试还会继续,接下来会在不同硬件上做更多对比,看看Candle在多模态、大上下文等场景下的表现。