Slime Router#
Slime 提供一个可选的 SlimeRouter,用于 rollout / data generation 阶段。它是一个轻量级的 HTTP router/proxy,位于一个或多个 SGLang worker server 前,补齐一些 training-oriented 能力——这些并不是 serving-focused router 的主要目标。
1. 什么是 SlimeRouter?#
SlimeRouter 是一个小型 FastAPI 服务,主要能力包括:
注册 worker(SGLang HTTP server)到本地池
路由请求到选定的 worker(简单的 least-inflight load balancing)
代理任意路径到选定的 worker(例如
/generate)定期 health checks,并隔离不健康的 worker
支持 middleware plugins(通过
--slime-router-middleware-paths)实现 rollout 特定处理(例如 caching、request/response transform)
在 slime 架构中,router 是 rollout 系统("SGLang + router")的一部分:负责生成样本并将其推入数据缓冲区。
启动方式#
在分布式训练中,当未提供 --sglang-router-ip 时,slime 会自动启动一个 router:
如果设置了
--use-slime-router,slime 启动 SlimeRouter否则,slime 启动 SGLang Model Gateway
2. 为什么需要 SlimeRouter#
与 production inference 不同,RL rollout 往往需要捕获用于训练的额外 metadata:token-level logprobs、loss masks,以及(对 MoE 模型)expert routing decisions。SlimeRouter 通过 middleware system 和 passthrough proxy 设计提供这些能力。
2.1 Radix-tree cache(透明的 token 管理)#
当你的 rollout 流程是 text-in/text-out、并且很难可靠地保存 token IDs 时,适合用 radix-tree cache;如果你已经能自己控制 token-in/token-out(例如 search r1、multiturn VLM 这些 example),通常不需要 radix-tree cache。
text-in text-out 接口可能导致 token retokenization mismatches:训练阶段重新 tokenize 文本,得到的 token 序列可能与 rollout 阶段不同,从而破坏 PPO/GRPO 这类方法所需的 per-token alignment。
radix-tree cache 可以透明地解决这个问题:它拦截 text-based request,对其进行 tokenize,并将 trajectory(text、token IDs、logprobs、loss masks)按文本前缀作为 key 存储。rollout 结束后,调用 /retrieve_from_text 就能取回与 rollout 完全一致的 token 序列及其对齐的 metadata,无需修改现有 rollout 代码。
实现上,radix-tree cache 会做几件事:
接收 text 以及 tokens/metadata,并写入 radix tree
通过 longest-prefix matching 复用已缓存的 token 序列(使后续流程可以走 token-in/token-out)
rollout 过程中持续插入新的 text continuation(同一 prompt 下可有多条 trajectory,例如 GRPO)
定期清理 stale nodes,控制内存占用
当你有 text-based rollout 代码、想获得 token-level 精度但又不想重写,或者在 GRPO 场景中多个 trajectory 共享相同 prompt 前缀时,建议使用 radix-tree cache。
2.2 Rollout routing replay (R3) for MoE#
对 MoE 模型,slime 支持 rollout routing replay (R3):在 rollout 期间记录 expert routing decisions,并在训练期间 replay,以提升训练稳定性。
SGLang 端#
SGLang 侧通过以下机制提供 expert routing capture:
--enable-return-routed-experts:启用路由捕获的服务器参数RoutedExpertsCapturer:在前向传播期间捕获每个 MoE 层的topk_ids(选定的专家 ID)return_routed_experts:检索路由数据的请求参数在响应
meta_info中返回routed_experts:一个形状为[seq_len - 1, num_layers, top_k]的 expert ID tensor
Slime 端#
Slime 侧消费路由数据,并在训练中完成 replay:
--use-slime-router --use-rollout-routing-replay:启用 R3 需要同时设置这两个标志Rollout 发送
return_routed_experts=True并将结果存储在sample.rollout_routed_experts中训练调用
fill_routing_replay()将路由数据加载到RoutingReplay对象中forward pass 期间,直接 replay 记录的 routing decisions,而不是重新计算
为什么需要 SlimeRouter#
我们需要 SlimeRouter,是因为当请求设置 return_routed_experts=true 时,SGLang worker 会在响应里返回路由信息(meta_info.routed_experts),而 SlimeRouter 会端到端保留这个字段。SGLang Model Gateway 会用固定 schema 重建响应,可能会丢掉这类额外 metadata(细节见第 3 节)。
3. 与 SGLang Model Gateway 的区别#
SlimeRouter 与 SGLang Model Gateway 都能将请求路由到 worker,但它们面向的目标不同、优化方向也不同。
主要区别#
SlimeRouter 是一个轻量级的 Python/FastAPI proxy,作为 SGLang worker 的 passthrough proxy。这种 passthrough 设计使得 RL 特定功能成为可能,例如 radix-tree trajectory caching 和 R3(需要保留原始 response metadata,如 routed_experts)。
SGLang Model Gateway 是一个高性能 Rust router,面向大规模 inference 优化:async non-blocking routing、高级 fault tolerance(retries、circuit breakers)、多种 load balancing policy(包括 cache-aware routing),以及 PD disaggregation 支持。但它会用固定 schema 重建响应,因此不保留 slime 的 R3 流程所需 metadata。
更多关于 SGLang Model Gateway 的信息,请参阅官方文档。
如何选择#
当你需要 R3 或 radix-tree cache 时,使用 SlimeRouter
其他情况使用 SGLang Model Gateway(推荐默认选项)
4. 多轮 Agent 的会话亲和性路由#
当使用 SGLang Model Gateway 的一致性哈希路由策略时,slime 会自动为每个 rollout session 分配唯一的 session ID,并将其作为路由键来实现会话亲和性。
什么是会话亲和性?#
会话亲和性(Session Affinity,也称为粘性会话)确保属于同一对话或 agent session 的所有请求都被路由到相同的后端 worker。这对以下场景有益:
多轮对话:保持相同 worker 可以提高前缀缓存命中率
多 agent 系统:确保 agent 状态一致性和更好的资源局部性
调试:更容易追踪和调试特定会话
工作原理#
当 rollout 系统生成样本时,每个样本都会被分配一个唯一的 session_id。这个 ID 会:
使用 UUID 为每个样本自动生成
存储在
sample.session_id字段中当 router policy 为
consistent_hashing时,作为X-SMG-Routing-Keyheader 传递
SGLang Model Gateway 的一致性哈希策略会使用这个路由键,确定性地为所有具有相同 session ID 的请求选择相同的 worker。
配置方法#
启用会话亲和性路由只需在 slime 中配置 router policy 参数:
--sglang-router-policy consistent_hashing
Slime 会自动启动 SGLang Model Gateway 并使用一致性哈希策略。
注意:如果遇到
consistent_hashingpolicy 不可用的错误,请升级 sglang-router:pip install -U sglang-router
注意事项#
每个样本都有自己独立的 session ID
同一 group 中的不同样本可能会被路由到不同的 worker
同一样本的后续轮次会保持相同的 session ID
目前该功能只适用于 SGLang Model Gateway