跳转至

vllm_async_server.py — vLLM HTTP 服务器

文件概述

vLLM 推理 HTTP 服务器的实现(约 960 行),是一个完整的 OpenAI 兼容推理服务。

核心类

vLLMHttpServer

class vLLMHttpServer:
    """等价于命令行 `vllm serve --tensor-parallel-size=8 ...`"""

    def __init__(self, config, model_config, rollout_mode, workers, ...):
        self._server_address = ray.util.get_node_ip_address()
        self._server_port = None

    async def launch_server(self, master_address=None, ...):
        """启动 vLLM 推理服务

        流程:
        1. 构建 CLI 参数(与 vllm serve 命令等价)
        2. 创建 AsyncLLM 引擎
        3. 构建 OpenAI 兼容的 HTTP 应用
        4. 启动 Uvicorn 服务器
        """

    async def generate(self, prompt_ids, sampling_params, request_id, ...):
        """生成序列"""
        prompt = TokensPrompt(prompt_token_ids=prompt_ids, ...)
        sampling_params = SamplingParams(max_tokens=max_tokens, ...)
        async for output in self.engine.generate(prompt, sampling_params, request_id):
            final_res = output
        return TokenOutput(token_ids=final_res.outputs[0].token_ids, ...)

    async def sleep(self):
        """释放显存"""
        if self.rollout_mode == RolloutMode.HYBRID:
            await self.engine.collective_rpc("sleep", kwargs={"level": sleep_level})
        elif self.rollout_mode == RolloutMode.COLOCATED:
            await self.engine.sleep(level=1)

    async def wake_up(self):
        """恢复显存"""
        await self.engine.wake_up(tags=["kv_cache", "weights"])

    async def abort_all_requests(self):
        """中止所有正在进行的请求"""
        # vLLM >= 0.12.0: 使用 pause_generation
        # vLLM < 0.12.0: 手动 abort 每个请求

支持的特性

  • LoRA 动态加载: 支持在推理时加载/卸载 LoRA adapter
  • FP8 量化: 支持在线 FP8 量化推理
  • QAT: 支持量化感知训练模型推理
  • 专家并行: 支持 MoE 模型的 EP 推理
  • 多节点: 支持跨节点的 TP/EP 推理
  • Router Replay: 支持记录路由决策用于训练
  • Profiling: 集成 torch profiler

与其他模块的关系

  • 被 vllm_rollout.py 的 vLLMReplica 创建和管理
  • 使用 vLLM 的 AsyncLLM 引擎
  • 使用 rollout/utils.py 的 run_uvicorn 启动服务

小结

vLLMHttpServer 是一个功能完整的 vLLM 推理服务器,通过 Ray actor 部署,支持 Hybrid Engine 的显存管理和权重热更新。