高性能的 SGLang Rust 运行时

一句话:pagoda 是一个只用 Rust 标准库的 LLM 推理运行时框架。没有 tokio,没有 candle,没有 ndarray。cargo build --release 离线一次通过,产出 17.9MB 单二进制。

设计目标是三件事:易用、性能、可靠。

易用性

  • 部署只需要一个文件 :17.9MB 单二进制,不依赖 Python、CUDA 运行时;内网、离线环境、CI 里 cargo build --release 直接出产物
  • OpenAI 兼容 API:现有客户端改一个 base_url 即可接入
  • 结构化生成内置 :gen / select / fork 同构 DSL,不需要额外框架
  • 机制即配置:radix 前缀缓存与块级 APC 缓存做进同一个引擎,一行配置切换,可直接 A/B
  • 87 项测试 cargo test --offline 全过,不依赖网络和外部资源

性能

共享开发机(i5-12500 / RTX 3050 8GB,测试时有其他负载)上的指示性数据,三方同条件测量,脚本和原始数据都在仓库里。

vs SGLang 0.5.10:

对比项 pagoda SGLang
tiny 模型 warm 延迟 14.3 ms 153.9 ms(10.8x 框架开销差距)
tiny batch-8 吞吐 3103 tok/s 680 tok/s(4.6x)
1.1B batch-8 吞吐 4.0 tok/s 23.0 tok/s(输 5.8 倍)
CPU-only 运行 全链路可跑 scheduler 硬依赖 CUDA,拒绝启动

vs Python 参考实现(同一模型快照、同一输入,5 次预热 + 50 次迭代):

指标 pagoda Python 参考实现
GPU 单次延迟 605.9 ms 690.9 ms(pagoda 为全 f32,对方为 fp16 autocast)
冷启动加载 1.4--1.6 s 7.9--9.4 s
峰值内存(GPU) 1850 MB 2954 MB
交付形态 17.9 MB 单二进制 5.3 GB / 39 个包的 venv

机制 A/B(同一引擎内开 vs 关):

机制 实测效果
增量 KV 会话 16 步生成 216→21 token,模型计算省 10.3 倍
张量级前缀嫁接 134-token prompt 的 warm prefill 归零
批量解码 物理调用收缩 6.24 倍
KV checkpoint 分支 100% 前缀命中,创建 6→1 token

可靠性

  • 跨设备确定性:CPU 与 GPU 输出 argmax 逐位一致(概率差约 52 ULP)。风控、路由这类阈值敏感场景,跨硬件可复现是硬保障
  • 故障面小 :无 async 运行时------HTTP 服务基于 std::net,调度器是裸 thread + channel
  • 网关模式:与生成引擎共部署时 pagoda 守门(健康检查、指标、KV checkpoint),上游进程崩溃时网关回 502,自身不挂
  • 缓存免疫:KV checkpoint 不受 LRU 淘汰影响,任意分支 100% 前缀命中接入

边界

  • CPU 纯算力落后 torch 约 2.25 倍(没有 BLAS 库;路线图是自带 BLAS / int8 内核)
  • 只做推理,不带训练;数据中心级批量吞吐交给大引擎,pagoda 以网关共部署
  • CUDA Graph、融合 kernel 尚未实现,GPU 通路目前是数值正确优先

链接

基准脚本全部开源,数字可复现。

相关推荐
Ramble_Naylor17 小时前
async/await:让一个线程同时等很多件事
开发语言·rust
Source.Liu1 天前
【A11】近期实现架构:面向 EPC 工作流企业 QQ 化的第一阶段
windows·架构·rust
geovindu2 天前
rust: Composite Pattern
开发语言·后端·设计模式·rust·组合模式
喵了几个咪2 天前
RushWind Admin — 契约驱动:203 条路由零手写的工程化拆解
微服务·rust·开源·admin
Ramble_Naylor2 天前
闭包与迭代器:函数式写法
rust
喵了几个咪2 天前
Go 写业务,Rust 扛底盘:一套可落地的混合架构
微服务·架构·golang·rust·多租户·gowind·rushwind
对象存储与RustFS3 天前
升级 RustFS 二进制不停机:一条一条换,留一条退路
后端·rust·开源
感谢地心引力3 天前
来试试我做的音乐播放器吧
ai·rust·音乐·navidrome·music·tarui