inner_sglang_router.py — 这个文件使用 sglang(一个高性能 LLM 推理框架)自带的路由器实现来做负载均衡¶
文件路径:
verl/experimental/reward_loop/router/inner_sglang_router.py
文件概述¶
这个文件使用 sglang(一个高性能 LLM 推理框架)自带的路由器实现来做负载均衡。与 NaiveRouter 相比,它使用了 sglang 原生的路由能力,通常在使用 sglang 作为推理后端时性能更好。
关键代码¶
路由器配置与启动¶
from sglang_router import RouterArgs, launch_router
def launch_sglang_router(worker_urls: list[str], port: int, ...):
"""使用 sglang 原生路由器"""
router_args = RouterArgs(
worker_urls=worker_urls,
port=port,
...
)
# 启动路由器(带健康检查)
router = launch_router(router_args)
# 等待所有 worker 就绪
_wait_for_healthy(worker_urls)
return router
健康检查¶
与 NaiveRouter 不同,sglang 路由器内置了健康检查机制:
def _wait_for_healthy(worker_urls: list[str], timeout: int = 300):
"""等待所有 worker 健康就绪"""
for url in worker_urls:
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(f"{url}/health")
if response.status_code == 200:
break
except Exception:
time.sleep(1)
NaiveRouter vs sglang Router 对比¶
| 特性 | NaiveRouter | sglang Router |
|---|---|---|
| 实现方式 | 自己用 FastAPI 写的 | 使用 sglang 原生实现 |
| 负载均衡策略 | 最低负载 | sglang 内部优化策略 |
| 健康检查 | 无 | 内置 |
| 依赖 | FastAPI + uvicorn | sglang_router 包 |
| 适用场景 | 通用 | 使用 sglang 推理后端时 |
核心类/函数列表¶
| 名称 | 类型 | 说明 |
|---|---|---|
launch_sglang_router |
函数 | 启动 sglang 原生路由器 |
_wait_for_healthy |
函数 | 等待 worker 健康就绪 |
与其他模块的关系¶
- 被
RewardModelManager(reward_model.py)使用 - 与
naive_router.py是可互换的路由器实现 - 依赖
sglang_router包
小结¶
当你使用 sglang 作为 LLM 推理后端时,优先使用这个路由器,因为它与 sglang 的内部机制配合更好。如果使用其他推理后端(如 vLLM),则使用 NaiveRouter。