TokenRouter:面向 token 级 LLM 路由的服务引擎
TokenRouter: A serving engine for token-level LLM routing
TokenRouter 是一个面向 token 级 LLM 路由的服务引擎,让小模型与大模型在同一次回复内按 token 或 span 切换协作。它提供 route(batch, result) 等三个编程接口,运行时负责批处理、模型交接与 KV cache 状态管理,KV cache 保留在各模型本地,仅传递 token 后缀与路由状态。
一个用于
token 级 LLM 路由的服务引擎。
机遇
一个响应。
不同模型。
Token 级路由让小模型和大模型在单个响应内协作。服务引擎必须跟上每一次切换。
路由发生在哪里?
三种粒度的模型分配
第 1 轮 · 第 1 个 token
在单个响应内切换模型,粒度为一个 token 或一个片段。
小模型大模型
独立推进。
快速模型应继续解码,而较慢的同伴处理路由的 token。
有效批次。
不规则的 token 到达需要一个调度器,在合适的时机将请求汇聚在一起。
简单的接口。
路由策略描述单个请求。运行时管理批处理、交接和缓存状态。
引擎
每个模型以
自己的节奏推进。
以请求为中心的编程。
以模型为中心的执行。
一个服务端点请求准入与流式传输
S
小模型
入口子服务器
调度器LLM 运行器路由器
解码中
ABC
步骤 1
本地 KV 缓存请求 A · 运行中A
发送 / 接收
Token 后缀
+ 路由状态
L
大模型
对等子服务器
调度器LLM 运行器路由器
解码中
空闲
—
本地 KV 缓存独立模型状态
解码本地批次。
小模型在一个批次中推进请求 A、B 和 C。
解码
客户端–服务器循环
准入请求并流式传输已完成的 token。
解码循环
调度本地批次并执行模型步骤。
模型间循环
发送、接收并恢复路由的请求。
恢复而无需重新开始。
待处理的请求保留其服务状态和 KV 槽位。返回的 token 被追加,无需重复前缀匹配或 KV 分配。
运行中待处理运行中或已完成
编程接口
三个函数。
一个路由策略。
描述请求何时切换模型、随请求传递什么,以及解码如何恢复。
route(batch, result)
选择下一个模型。
每次前向传播后,为每个请求返回一个模型名称。返回当前模型名称则继续本地解码。现有的双模型调度器也接受布尔决策。
R-Stitch 示例:True 委托给唯一的对等方;False 保持本地解码。
R-Stitch 摘自已发布的实现。配置和周围的类定义已省略。
五个评估策略,同一个接口
| 策略 | 模型 | 路由决策 |
|---|---|---|
| CITER | 2 | 低置信度时路由到对等方生成一个 token。 |
| R2R | 2 | 学习到的路由器预测模型何时会产生分歧。 |
| R-Stitch | 2 | 熵控制双向切换。 |
| Co-LLM | 2 | 学习到的延迟信号请求对等方生成一个 token。 |
| ME | 2+ | 使用集成权重逐 token 选择模型。 |
发布的代码还包括 GlimpRouter、查询级路由和一个随机基线。参见支持的调度器。
快速开始
从源码安装并启动一个使用 Qwen3 0.6B / 32B 配置的 R2R 服务器。
git clone https://github.com/thu-nics/TokenRouter.git
cd TokenRouter
conda create -n tokenrouter python=3.10
conda activate tokenrouter
pip install -e .
python -m tokenrouter.launch_server \
--config_path config/r2r/Qwen3-0.6B_Qwen3-32B.yaml服务器运行后,使用 OpenAI 客户端示例 或 requests 示例。Python 引擎示例 可直接运行,无需单独的 HTTP 服务器。
README 涵盖多节点服务;复现指南 包含配置、工作负载和基准测试命令。
延迟批处理
稍作等待。
更优批次。
立即启动可能会让下一个到达的请求等待整个解码步骤。短暂且受控的等待可将路由的请求归入同一批次。
相同 token。不同调度。
三个请求 · 每个请求五个 token
t = 0.0
小模型
就绪
大模型
空闲
已完成
3 个请求中的 0 个
—平均完成时间
小模型 · 1 单位大模型 · 3.5 单位
示意性调度,非基准测试
实测阈值扫描
阈值很重要。
更大的批次有用,直到等待导致在途工作过少。最佳阈值取决于并发和路由行为。
吞吐量 · 输出 token/秒
阈值如何选择?
离散时间马尔可夫链为每个子服务器建模排队请求、活动批次和剩余执行时间。给定并发、路由概率和模型步骤延迟,TokenRouter 在可行阈值中搜索最高预期吞吐量。
B* = arg maxB E[已提交 token] / E[已用时间]
条件 ∑i(Bi − 1) < N 避免所有请求都在队列中等待的状态。分析模型假设平稳路由概率和固定的每步模型延迟;它并未建模所有非平稳路由模式。
服务效率
路由增益。
以每秒 token 数交付。
五种算法、三种工作负载和两个基线。TokenRouter 加速执行路由策略的系统。
并发
指标
高投入推理
并发 4 · 输出 token/秒 · 越高越好
官方代码标准服务TokenRouter
此选择的精确值 模型、工作负载和测量设置
模型与硬件
CITER、R2R、R-Stitch 和 Co-LLM 使用 Qwen3-0.6B / 32B。ME 增加 Qwen3-8B,权重为 0.5 / 0.3 / 0.2。
实验使用 8 × A100-80GB 主机。双模型运行通过 CUDA MPS 共享两个 GPU:小模型使用 TP1,大模型使用 TP2。ME 将每个模型放在一个 GPU 上。
工作负载
低投入:AIME2024,约 100 token 输入和 2,048 token 输出上限。
高投入:选定的 AIME2024 问题,约 100 token 输入和 8,192 token 输出上限。
智能体:多轮 SWE-Smith 轨迹,约 8,192 输入 token 和 1,024 token 输出上限。
基线与指标
官方代码:算法发布的实现。不可用条目显示为 N/A。
标准服务:每个模型一个 SGLang 服务器,每次调用向外部调度器返回一个 token。
吞吐量是生成的总输出 token 数除以耗时。延迟是端到端请求完成时间。TokenRouter 基于 SGLang 0.5.1 构建。
扩展并发
更高吞吐量。
响应式生成。
随着并发增长,异步执行将更多在途请求转化为有用的模型工作。
生成速度与总吞吐量
R2R · 并发 1–16
TokenRouterR2R 官方
8
18.58×
在每用户速度相当的情况下的吞吐量。
TokenRouter 在并发 16 时达到 630.57 tokens/s,每用户 39.41 tokens/s。R2R 官方在并发 1 时达到 33.94 tokens/s,每用户 34.87 tokens/s。此比较使用了不同的并发水平。
收益从何而来
运行时在
每一步都至关重要。
CUDA graph 支持、异步执行和延迟批处理层层叠加。
累积系统优化
R2R · 并发 8
输出 tokens/s
扩展 CUDA graph。
捕获被路由请求恢复时遇到的更广泛的扩展长度范围。
保持路由本地化。
将路由器与模型一起运行,避免每个 token 都进行单独的 IPC 往返。
保留服务状态。
保留待处理请求,并协调共置模型之间的 KV 预算。
不同的小/大模型组合
| 小/大模型 | R2R 官方 | TokenRouter | 提升 |
|---|---|---|---|
| 0.6B / 8B | 105.10 | 336.98 | 3.21× |
| 0.6B / 32B | 77.08 | 197.40 | 2.56× |
| 1.7B / 8B | 103.37 | 285.41 | 2.76× |
| 4B / 8B | 106.67 | 211.81 | 1.99× |
跨节点,使用相同的模型资源
Qwen3-0.6B 使用一块 GPU,Qwen3-32B 使用两块 GPU(TP2),无 GPU 重叠。模型部署在一到两个节点上,通过 3.7 GB/s RoCE 连接。以下测量使用低强度推理。
| 并发 | 部署 | R-Stitch | R2R | CITER |
|---|---|---|---|---|
| 1 | 单节点 | 47.53 | 74.90 | 108.65 |
| 双节点 | 46.19 | 69.92 | 93.99 | |
| 4 | 单节点 | 116.14 | 228.94 | 308.36 |
| 双节点 | 104.20 | 202.43 | 277.56 |
算法在其原始模型和任务设置下
| 算法 / 原始设置 | 实现 | 吞吐量 | TTFT | 延迟 |
|---|---|---|---|---|
| R2RDeepSeek-R1-Distill-Qwen 1.5B / 32B AIME | 仅 LLM | 145.30 | 0.13 | 411.98 |
| 官方代码 | 89.62 | 0.11 | 751.15 | |
| TokenRouter | 244.56 | 0.11 | 270.19 | |
| CITERQwen2 1.5B / 72B CommonsenseQA | 仅 LLM | 123.72 | 0.083 | 2.68 |
| 官方代码 | 17.16 | 0.036 | 7.64 | |
| TokenRouter | 149.31 | 0.036 | 0.48 | |
| Co-LLMTuned LLaMA2 7B / 70B GSM8K | 仅 LLM | 134.79 | 0.069 | 13.39 |
| 官方代码 | 3.46 | 1.14 | 247.61 | |
| TokenRouter | 76.02 | 0.067 | 11.46 | |
| R-StitchL1-1.5B-short / QwQ-32B AIME · 官方代码不可用 | 仅 LLM | 150.41 | 0.15 | 360.76 |
| TokenRouter | 140.58 | 0.067 | 151.30 |
团队
认识研究人员。
*同等贡献†通讯作者
引用
引用我们的工作。
@article{fu2026tokenrouter,
title={TokenRouter: Efficient Serving System for Token-Level LLM Routing},
author={Tianyu Fu and Tengxuan Liu and Ruoxi Wang and Yixin Dong and Yi Ge and Yichen You and Yu Wang},
journal={arXiv preprint arXiv:2610.12242},
year={2026},
}
来源:Hacker News · fuvty.github.io