跳转到正文

研究动机

同一次回答,多个模型协作。

token 级路由让大小模型共同生成一次回答。每次模型切换,都需要推理服务系统高效衔接。

在什么粒度上选择模型?

三种路由粒度

第 1 轮 · token 1

在一次回答中,按 token 或片段切换模型。

小模型大模型
示意同一会话中三轮交互的模型分配,并非实测生成轨迹。

独立推进计算。

较慢的模型处理转入的 token 时,较快的模型仍应继续解码其他请求。

让批处理更有效。

token 到达的时间不规则,调度器需要在合适的时机将请求组成批次。

接口保持简单。

路由策略只描述单个请求的行为,批处理、模型切换和缓存状态交给运行时管理。

系统架构

每个模型独立推进计算。

以请求为中心编程,以模型为中心执行。

统一服务入口接收请求与流式输出
S

小模型

入口子服务

调度器模型执行器路由器
解码中
ABC
第 1 步
本地 KV Cache请求 A · 运行中A
send / receive新增 token 与路由状态
L

大模型

协作子服务

调度器模型执行器路由器
解码中
空闲
—
本地 KV Cache模型状态独立保存

执行本地批次。

小模型在同一个批次中推进请求 A、B、C。

解码
模型切换示意,动画速度不代表实际延迟。各子服务独立解码,只传输新增 token 和路由状态,KV cache 留在模型本地。这一架构也支持两个以上的模型。
客户端与服务端循环

接收请求,并以流式方式返回已生成的 token。

解码循环

调度本地批次,执行模型计算。

模型间通信循环

发送、接收并恢复跨模型路由的请求。

恢复请求,无需从头开始。

等待协作模型时,请求保留服务状态和 KV 存储位置。收到返回的 token 后直接追加,无需重复匹配前缀或分配 KV 存储。

运行中等待返回运行中或结束

编程接口

三个函数,定义路由策略。

描述请求何时切换模型、传递哪些信息,以及如何恢复解码。

route(batch, result)

选择下一个模型。

每次前向计算后,为批次中的每个请求返回一个模型名。返回当前模型名表示继续本地解码;现有双模型调度器也支持布尔值决策。

R-Stitch 示例:True 表示交给唯一的协作模型,False 表示继续本地解码。

R-Stitch 代码摘自公开实现,省略配置和外围类定义。

五种评估策略,共用同一接口
策略模型数路由依据
CITER2置信度低时,交给协作模型生成一个 token。
R2R2通过训练得到的路由器预测模型何时会出现推理分歧。
R-Stitch2根据熵在两个模型之间双向切换。
Co-LLM2通过学习得到的转交信号,请求协作模型生成一个 token。
ME2+每生成一个 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
小模型

就绪

大模型

空闲

已完成

0 / 3 个请求

—平均完成时间
小模型 · 1 单位时间大模型 · 3.5 单位时间
调度示意,非性能测试
采用论文调度示例中的固定路由序列与延迟。每个方块表示一个 token,同时开始的方块属于同一批次。延迟批处理的阈值为 Bsmall = 1、Blarge = 2。

阈值扫描实验

等待阈值决定效率。

增大批次可以提高效率,但等待过久也会使正在执行的工作减少。最优阈值取决于并发数和路由行为。

吞吐量 · 输出 token/秒

R2R · Qwen3-0.6B / 32B · AIME2024,采用阈值扫描实验的实测数据。
如何选择阈值?

我们用离散时间马尔可夫链描述各子服务的排队请求、执行批次和剩余计算时间。给定并发数、路由概率和模型单步延迟,TokenRouter 在可行范围内搜索期望吞吐量最高的阈值。

B* = arg maxB   E[committed tokens] / E[elapsed time]

条件 ∑i(Bi − 1) < N 可避免所有请求都滞留队列。分析模型假设路由概率平稳、各模型的单步延迟固定,因此不涵盖所有随时间变化的路由模式。

推理服务效率

将路由收益转化为吞吐量。

在五种算法、三类工作负载上对比两种基线。TokenRouter 优化的是执行路由策略的服务系统。

并发数
指标

高推理量

并发数 4 · 输出 token/秒 · 越高越好

Official CodeStd. ServingTokenRouter
每种算法均与其较强的可用基线比较,所有柱形共用从零开始的线性坐标。

当前选择的详细数值
模型、工作负载与测量设置

模型与硬件

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。

高推理量:选取 Qwen3-32B 解答超过 8,192 个 token 的 AIME2024 题目,输入约 100 个 token,评估时输出上限为 8,192 个 token。

智能体任务:SWE-Smith 多轮交互轨迹,输入约 8,192 个 token,输出上限为 1,024 个 token。

基线与指标

Official Code:算法的公开实现,未提供的测量项记为 N/A。

Std. Serving:每个模型运行独立的 SGLang 服务,每次调用返回一个 token,由外部调度程序进行路由。

吞吐量为生成的输出 token 总数除以经过时间;延迟为请求从开始到完成的端到端耗时。TokenRouter 基于 SGLang 0.5.1 构建。

并发扩展

提高总吞吐量,兼顾单用户速度。

随着并发数增加,异步执行将更多并行请求转化为有效的模型计算。

单用户生成速度与总吞吐量

R2R · 并发数 1–16

TokenRouterR2R official
总吞吐量与单用户生成速度TokenRouter 与 R2R 官方实现,在并发数 1 至 16 下的表现。
8
每个点对应一个实测并发设置,连线按并发数排列。生成速度按单个用户计算,吞吐量汇总所有请求。
18.58×

兼顾吞吐量与单用户速度。

TokenRouter 在并发数 16 时,总吞吐量为 630.57 token/秒,单用户速度为 39.41 token/秒。R2R 官方实现在并发数 1 时,分别为 33.94 和 34.87 token/秒。这一比较采用了不同的并发数。

系统分析

加速的来源

CUDA graph 支持、异步执行与延迟批处理逐步叠加,改善服务效率。

逐步叠加系统优化

R2R · 并发数 8

输出 token/秒
每一行均包含此前的优化。R2R 官方实现达到 134.89 token/秒,完整引擎达到 372.48 token/秒(2.76×)。这是逐步叠加的消融实验,各项收益不能视为独立增量。

扩展 CUDA graph 覆盖范围。

缓存更多 extend 长度的执行图,适应请求路由返回时的不同输入长度。

让路由与模型一起执行。

路由器与模型协同运行,避免每个 token 都增加一次独立的进程间通信。

保留推理服务状态。

保留等待返回的请求,并协调共置模型之间的 KV 存储预算。

不同的大小模型组合
R2R · 不同 Qwen3 模型组合的吞吐量(输出 token/秒)
小模型 / 大模型R2R officialTokenRouter加速比
0.6B / 8B105.10336.983.21×
0.6B / 32B77.08197.402.56×
1.7B / 8B103.37285.412.76×
4B / 8B106.67211.811.99×
模型资源相同的跨节点部署

Qwen3-0.6B 使用一张 GPU,Qwen3-32B 使用两张 GPU(TP2),彼此不共享 GPU。模型部署在一个或两个节点上,节点间通过 3.7 GB/s RoCE 连接。以下测量采用低推理量工作负载。

吞吐量单位为输出 token/秒 · 独立部署实验
并发数部署方式R-StitchR2RCITER
1单节点47.5374.90108.65
双节点46.1969.9293.99
4单节点116.14228.94308.36
双节点104.20202.43277.56
各算法原始模型与任务设置
并发数 4 · 延迟单位为秒 · 吞吐量单位为输出 token/秒
算法 / 原始设置实现吞吐量TTFT延迟
R2RDeepSeek-R1-Distill-Qwen 1.5B / 32B
AIME
仅大模型145.300.13411.98
Official Code89.620.11751.15
TokenRouter244.560.11270.19
CITERQwen2 1.5B / 72B
CommonsenseQA
仅大模型123.720.0832.68
Official Code17.160.0367.64
TokenRouter149.310.0360.48
Co-LLM微调后的 LLaMA2 7B / 70B
GSM8K
仅大模型134.790.06913.39
Official Code3.461.14247.61
TokenRouter76.020.06711.46
R-StitchL1-1.5B-short / QwQ-32B
AIME · 官方代码未公开
仅大模型150.410.15360.76
TokenRouter140.580.067151.30

研究团队

团队成员

*同等贡献 · †通讯作者

引用

引用本研究

BibTeX
@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},
}