跳转至

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。