绑定手机号
获取验证码
确认绑定
提问
0/255
提问
订阅开课提醒需关注服务号
回答成功
知道了
扫码关注智猩猩服务号登录
请使用微信扫描二维码
扫描二维码分享给微信好友
您已订阅成功,有新课程,我们将第一时间提醒您。
知道了
发送提问成功
回答可在
“我的——我的提问”中查看
知道了
失败
欢迎来智东西
关注我们
智东西
车东西
芯东西
智猩猩
0
0
为什么用Rust从头开始写一个推理引擎
分类: AI技术解析
2026-03-03 19:30:00

作者:SuSun

地址:https://zhuanlan.zhihu.com/p/2007192791210534069

经授权发布,如需转载请联系原作者

现如今,vLLM, sglang等基于 python 的推理框架已经占据大部分推理服务的市场,逐步稳定,成熟。所以为什么不是 vLLM, sglang,为什么用Rust从头开始写一个推理引擎?

原因分为两方面

去年至今,我也有幸给上述两个框架贡献过一些代码,也参与了一些模块的设计,包括会有一些对两者的运维经验。在这个过程中,我发现 python 极大限制了我去追求一些高性能,更加复杂的逻辑,都是因为 GIL,”我们要控制对 CPU 的使用”,”python 处理不了这么多”的话,反复被提及,包括因为 GIL带来的一些长尾,我不禁想,大家都说 GPU 是千亿的生意,这是千亿 infra 想象中的样子吗?另一方面也来自语言, 应该没有比 python 更加灵活的语言了, 错误没处理,状态没有完全匹配, leak(逻辑问题),我珍贵的时间,不应该浪费这些编译器本能解决的问题。

另一方面, 由于我主要做 kv cache 和路由的,过去一年也更多的专注在引擎的 kv cache 相关模块,有时候听不懂其他做框架或者算子同事聊的东西,为我的 kv cache system 演化加上了一些阻碍,理解推理框架的优化,行为,非常重要,未来也需要需要 co design,而不是独立的单机推理引擎。 怎么理解一个事物呢,我想起费曼的那句话,”What I cannot create, I do not understand.”

基于上述两个原因, 我早在去年还在北京的时候就尝试过用 C++ (stdexec)写一个, 不知道为什么,总感觉别扭,彼时 LLM 能力和我驾驭 LLM 的能力也较差,不了了之。后续在 vibe 了我的第一个稍微成熟的开源的 rust llm kv cache 后,我意识到,Rust 就是我的编程语言的母语,就像此刻我在用中文写博客一样,我写 Rust 的时候流畅很多, 在深思 vibe coding 与我后,我突然找到了 vibe 的正确方式(关于我如何与 LLM 协作工作和学习,之后会单独写一篇),我觉得是时候把这个东西捡起来了,是时候了。

所以有了 pegainfer,依旧100% 的代码由 opus 4.6 high 生成,我没有手写,除了算子我没有全部扫过,框架层面我都扫了一遍。

Pegainfer 的现状, Rust 写框架,cuda 写算子,同一时刻只支持处理一个请求,没有前缀缓存,没有 Sampler,也没有调度器,也不支持 cuda graph,算子也没有细致优化过。在我的 5070ti 上,运行 Qwen3 4B 大概能稳定 70token/s 的吞吐,精度对齐hugging face(这个精度是 opus 自己对的,过程还蛮有意思)。

所以 pegainfer 现阶段,高情商”百废待兴”,低情商”要啥啥没有”。这样的留白是我刻意为之,原本我计划把上面”没有”的东西都支持完再写一篇博客介绍,显得正式一些。但是我发现,我和 LLM 一起学习,探索,支持新 feat 的过程反而更有价值,也更有意思。写完再介绍,无非又是一个推理引擎,那些老掉牙的优化技术。

所以用 Rust 写推理引擎体验怎么样?比预期中的好很多,不知道是不是因为 opus 4.6 的进化,代码编写,测试,压测等体验都非常棒。cargo run -r即可编译启动, cargo test -r 即可快速测试,也包括一些 e2e 的测试。同时 Rust 的生态体验非常好,以下是 pegainfer 依赖的一些重要的库:

  • cudarc — Rust 的 CUDA 绑定,提供对 CUDA runtime 和 cuBLAS 的安全封装,是整个 GPU 计算的基础

  • axum + tokio — 异步 HTTP 框架,提供 OpenAI 兼容的 API 服务,几行代码就能起一个高性能服务器

  • safetensors — HuggingFace 的模型权重格式,零拷贝加载,比 pickle 安全得多

  • tokenizers — HuggingFace 的分词器,Rust 原生实现,速度极快

  • fastrace — 分布式追踪库,输出 Chrome Trace JSON 格式,可以直接在 Perfetto UI 里看每个算子的耗时(这个比较有意思,pegainfer 独家,之后介绍)

  • logforth — 结构化日志库,支持过滤、着色、多输出

  • half — BF16/FP16 类型支持,配合 cudarc 完成半精度存储

  • anyhow — 错误处理,省心

最重要的,我不用再担心 GIL,也不用担心生命周期,错误没处理。日志,metrics, traces,开箱即用。