跳到正文
Hacker News· ilreb·· 9 天前AI 评分62

TokenRouter:面向 token 级 LLM 路由的服务引擎

TokenRouter: A serving engine for token-level LLM routing

AI 导读

TokenRouter 是一个面向 token 级 LLM 路由的服务引擎,让小模型与大模型在同一次回复内按 token 或 span 切换协作。它提供 route(batch, result) 等三个编程接口,运行时负责批处理、模型交接与 KV cache 状态管理,KV cache 保留在各模型本地,仅传递 token 后缀与路由状态。

正文 · AI 翻译

一个用于
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 槽位。返回的 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

小模型

就绪

大模型

空闲

已完成

3 个请求中的 0 个

—平均完成时间

小模型 · 1 单位大模型 · 3.5 单位

示意性调度,非基准测试

固定路由序列和延迟来自论文的调度示例。每个块为一个 token;共享起始时间表示一个批次。延迟批处理使用 Bsmall = 1 和 Blarge = 2。

实测阈值扫描

阈值很重要。

更大的批次有用,直到等待导致在途工作过少。最佳阈值取决于并发和路由行为。

吞吐量 · 输出 token/秒

R2R · Qwen3-0.6B / 32B · AIME2024。来自所提供阈值扫描的实测值。

阈值如何选择?

离散时间马尔可夫链为每个子服务器建模排队请求、活动批次和剩余执行时间。给定并发、路由概率和模型步骤延迟,TokenRouter 在可行阈值中搜索最高预期吞吐量。

B* = arg maxB   E[已提交 token] / E[已用时间]

条件 ∑i(Bi − 1) < N 避免所有请求都在队列中等待的状态。分析模型假设平稳路由概率和固定的每步模型延迟;它并未建模所有非平稳路由模式。

服务效率

路由增益。
以每秒 token 数交付。

五种算法、三种工作负载和两个基线。TokenRouter 加速执行路由策略的系统。

并发

指标

高投入推理

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

官方代码标准服务TokenRouter

比率将 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

每个点是一个实测的并发设置;连线按顺序连接各设置。速度是每用户 token 生成速率。吞吐量汇总所有请求。

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

每一行都包含前面的优化。官方 R2R 实现达到 134.90 tokens/s;完整引擎达到 372.48 tokens/s(2.76×)。这些是顺序消融,而非独立的叠加效应。

扩展 CUDA graph。

捕获被路由请求恢复时遇到的更广泛的扩展长度范围。

保持路由本地化。

将路由器与模型一起运行,避免每个 token 都进行单独的 IPC 往返。

保留服务状态。

保留待处理请求,并协调共置模型之间的 KV 预算。

不同的小/大模型组合

R2R · 吞吐量(输出 tokens/s)跨 Qwen3 模型组合
小/大模型R2R 官方TokenRouter提升
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 连接。以下测量使用低强度推理。

吞吐量以输出 tokens/s 计 · 独立部署实验
并发部署R-StitchR2RCITER
1单节点47.5374.90108.65
双节点46.1969.9293.99
4单节点116.14228.94308.36
双节点104.20202.43277.56

算法在其原始模型和任务设置下

并发 4 · 延迟以秒计 · 吞吐量以输出 tokens/s 计
算法 / 原始设置实现吞吐量TTFT延迟
R2RDeepSeek-R1-Distill-Qwen 1.5B / 32B
AIME
仅 LLM145.300.13411.98
官方代码89.620.11751.15
TokenRouter244.560.11270.19
CITERQwen2 1.5B / 72B
CommonsenseQA
仅 LLM123.720.0832.68
官方代码17.160.0367.64
TokenRouter149.310.0360.48
Co-LLMTuned LLaMA2 7B / 70B
GSM8K
仅 LLM134.790.06913.39
官方代码3.461.14247.61
TokenRouter76.020.06711.46
R-StitchL1-1.5B-short / QwQ-32B
AIME · 官方代码不可用
仅 LLM150.410.15360.76
TokenRouter140.580.067151.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