Part 5: 服务入口层

Part 5: vLLM 服务入口层架构分析

源码路径:vllm/entrypoints/(154文件, ~34K行)
核心模块:openai(OpenAI兼容API)、serve(服务管理)、cli(命令行入口)、pooling(嵌入/分类)、sagemaker(SageMaker适配)


目录

  1. 整体架构概览
  2. OpenAI兼容API服务架构
  3. Chat Completion请求处理完整流程
  4. Completion与Responses端点
  5. 服务管理子系统
  6. 多模态与实时推理端点
  7. Pooling子模块(嵌入/分类/评分/重排)
  8. Anthropic兼容层与MCP工具服务
  9. CLI命令行入口
  10. 引擎客户端构建与生命周期
  11. 协议层与数据模型
  12. 中间件与安全机制
  13. 可观测性(监控/健康/指标)
  14. 关键设计模式总结

1. 整体架构概览

vLLM的服务入口层是连接外部请求与推理引擎的核心桥梁。它采用FastAPI + Uvicorn + uvloop技术栈,提供了从OpenAI兼容REST API到gRPC、从CLI交互到批量推理的多种接入方式。

其他兼容层

serve 服务管理

openai 兼容层

entrypoints 层

客户端入口

CLI命令行
vllm serve / bench / chat

REST API客户端
curl / openai SDK

gRPC客户端

WebSocket客户端
Realtime API

api_server.py
FastAPI主应用

grpc_server.py
gRPC服务

llm.py
离线LLM入口

chat_completion/
Chat完成

completion/
文本完成

responses/
Responses API

speech_to_text/
语音转文本

realtime/
实时WebSocket

generative_scoring/
生成式评分

lora/
LoRA动态管理

cache/
缓存管理

disagg/
分离式推理

rlhf/
RLHF权重热更新

elastic_ep/
弹性并行

sleep/
睡眠/唤醒

profile/
性能分析

rpc/
集群RPC

tokenize/
分词/反分词

render/
预渲染

anthropic/
Anthropic Messages

sagemaker/
SageMaker适配

pooling/
嵌入/分类/评分

入口层目录结构

vllm/entrypoints/
├── __init__.py
├── api_server.py          # 旧版API服务器入口(兼容层)
├── chat_utils.py          # 聊天模板/消息工具函数
├── constants.py           # 常量定义
├── grpc_server.py         # gRPC服务器(200行)
├── launcher.py            # HTTP服务启动器(serve_http)
├── llm.py                 # 离线LLM推理入口(1957行)
├── logger.py              # 请求日志器
├── ssl.py                 # SSL证书刷新
├── utils.py               # 通用工具函数
│
├── openai/                # ★ OpenAI兼容API(核心)
│   ├── api_server.py      #   FastAPI主应用构建(733行)
│   ├── cli_args.py        #   CLI参数解析
│   ├── fingerprint.py     #   system_fingerprint生成
│   ├── orca_metrics.py    #   端点负载指标
│   ├── run_batch.py       #   批量推理
│   ├── server_utils.py    #   中间件/异常处理/认证
│   ├── utils.py           #   请求验证工具
│   ├── chat_completion/   #   Chat Completion端点
│   ├── completion/        #   Completion端点
│   ├── responses/         #   Responses API端点
│   ├── speech_to_text/    #   语音转文本端点
│   ├── realtime/          #   实时WebSocket端点
│   ├── generate/          #   生成路由聚合
│   ├── generative_scoring/ #  生成式评分端点
│   ├── models/            #   模型列表/管理
│   ├── engine/            #   引擎协议与基础Serving类
│   └── parser/            #   Harmony解析器工具
│
├── anthropic/             # Anthropic兼容层
├── cli/                   # CLI子命令
├── mcp/                   # MCP工具服务
├── pooling/               # 嵌入/分类/评分/重排
├── sagemaker/             # SageMaker适配
└── serve/                 # ★ 服务管理子系统
    ├── __init__.py        #   路由注册中心
    ├── cache/             #   缓存管理
    ├── disagg/            #   分离式推理
    ├── elastic_ep/        #   弹性并行
    ├── instrumentator/    #   监控/健康/指标
    ├── lora/              #   LoRA动态管理
    ├── profile/           #   性能分析
    ├── render/            #   预渲染服务
    ├── rlhf/              #   RLHF权重更新
    ├── rpc/               #   集群RPC
    ├── sleep/             #   睡眠/唤醒
    └── tokenize/          #   分词/反分词

2. OpenAI兼容API服务架构

2.1 服务器启动流程

vLLM的API服务器通过api_server.py构建,启动流程如下:

serve_http() init_app_state() build_app() build_async_engine_client() setup_server() CLI (vllm serve) serve_http() init_app_state() build_app() build_async_engine_client() setup_server() CLI (vllm serve) 1. 解析参数 & 验证 2. 绑定端口(提前绑定避免竞争) 3. 设置ulimit & 信号处理器 4. 创建AsyncLLM引擎客户端 5. 创建EngineConfig → AsyncLLM.from_vllm_config() 6. engine_client就绪 7. 查询supported_tasks 8. 返回任务类型元组 9. build_app(args, tasks, model_config) 10. 注册所有API路由 11. 添加CORS/认证/缩放中间件 12. init_app_state(engine, state, args, tasks) 13. 初始化各Serving实例 14. serve_http(app, sock, ...) 15. uvloop + uvicorn启动

关键函数说明:

函数 文件 职责
run_server() api_server.py 单Worker服务器入口
run_server_worker() api_server.py 单Worker运行逻辑
setup_server() api_server.py 验证参数、绑定端口、设信号
build_async_engine_client() api_server.py 创建AsyncLLM引擎客户端
build_app() api_server.py 构建FastAPI应用+注册路由+中间件
init_app_state() api_server.py 初始化所有Serving实例到app.state
build_and_serve() api_server.py 组装App→初始化状态→启动HTTP
serve_http() launcher.py Uvicorn启动封装

2.2 FastAPI应用构建(build_app)

build_app()函数是路由注册的核心,它根据supported_tasks动态挂载不同的API路由:

Yes

Yes

Yes

Yes

Yes

generate' or 'render'

Yes

Yes

Yes

build_app(args, supported_tasks, model_config)

FastAPI(lifespan=lifespan)

register_vllm_serve_api_routers
serve/下所有管理路由

register_models_api_router
/v1/models

register_sagemaker_api_router
SageMaker适配路由

'generate' in tasks?

register_generate_api_routers

register_chat_api_router
/v1/chat/completions

register_responses_api_router
/v1/responses

register_completion_api_router
/v1/completions

register_anthropic_api_router
/v1/messages

attach_disagg_router
/inference/v1/generate

attach_rlhf_router
/pause /resume /update_weights

elastic_ep_attach_router
/scale_elastic_ep

register_generative_scoring_api_router
/generative_scoring

attach_render_router
/v1/.../render

'transcription' in tasks?

register_speech_to_text_api_router
/v1/audio/transcriptions
/v1/audio/translations

'realtime' in tasks?

register_realtime_api_router
/v1/realtime (WebSocket)

any pooling task?

register_pooling_api_routers
/v1/embeddings etc.

添加中间件

CORSMiddleware

AuthenticationMiddleware
(api_key验证)

XRequestIdMiddleware

ScalingMiddleware
(弹性缩放503拦截)

WebSocketMetricsMiddleware
(realtime专用)

2.3 应用状态初始化(init_app_state)

init_app_state()将所有Serving实例挂载到app.state,这些实例在请求处理时被路由处理器引用:

# app.state 关键属性
state.engine_client = engine_client           # 引擎客户端
state.vllm_config = vllm_config               # 全局配置
state.openai_serving_models = ...             # 模型管理(含LoRA)
state.openai_serving_render = ...             # 预渲染服务
state.openai_serving_tokenization = ...       # 分词/反分词服务
state.openai_serving_chat = ...               # Chat Completion服务
state.openai_serving_chat_batch = ...         # 批量Chat服务
state.openai_serving_completion = ...         # Completion服务
state.openai_serving_responses = ...          # Responses服务
state.anthropic_serving_messages = ...        # Anthropic Messages服务
state.serving_tokens = ...                    # 分离式推理Tokens服务
state.serving_generative_scoring = ...        # 生成式评分服务
state.server_load_metrics = 0                 # 服务器负载指标

3. Chat Completion请求处理完整流程

Chat Completion是vLLM最核心的API端点,对应OpenAI的/v1/chat/completions

3.1 请求处理链路

chat_completion_stream_generator EngineClient(AsyncLLM) OpenAIServingRender OpenAIServingChat load_aware_call with_cancellation validate_json_request chat_completion/api_router.py 客户端 chat_completion_stream_generator EngineClient(AsyncLLM) OpenAIServingRender OpenAIServingChat load_aware_call with_cancellation validate_json_request chat_completion/api_router.py 客户端 loop [每个token块] alt [流式请求 (stream=true)] [非流式请求 (stream=false)] POST /v1/chat/completions JSON格式验证 注册请求取消回调 负载感知检查 create_chat_completion(request, raw_request) 初始化reasoning_parser render_chat_request(request) 解析chat模板 + 工具定义 构建Harmony消息 → Tokenize (conversation, engine_inputs) 提取LoRA适配器 计算max_tokens & sampling_params engine_client.generate(engine_input, sampling_params, ...) result_generator (AsyncGenerator[RequestOutput]) chat_completion_stream_generator(...) 解析delta_text tool_parser/reasoning_parser处理 构造SSE chunk data: {chunk_json}\n\n data: [DONE]\n\n chat_completion_full_generator(...) 收集所有output 构造完整ChatCompletionResponse JSONResponse

3.2 关键类与文件

OpenAIServing

+engine_client: EngineClient

+models: OpenAIServingModels

+model_config: ModelConfig

+renderer: Renderer

+system_fingerprint: str

+beam_search()

+_check_model()

+_get_trace_headers()

+_log_inputs()

+_maybe_get_adapters()

OpenAIServingChat

+openai_serving_render: OpenAIServingRender

+response_role: str

+chat_template: str

+reasoning_parser_cls: type

+tool_parser: ToolParser

+parser_cls: type

+create_chat_completion()

+render_chat_request()

+chat_completion_stream_generator()

+chat_completion_full_generator()

+get_chat_request_role()

ChatCompletionRequest

+model: str

+messages: list

+temperature: float

+max_tokens: int

+stream: bool

+tools: list

+tool_choice: str|object

+response_format: object

+logprobs: bool

+n: int

+seed: int

+to_sampling_params()

+to_beam_search_params()

ChatCompletionResponse

+id: str

+object: str

+created: int

+model: str

+choices: list

+usage: UsageInfo

+system_fingerprint: str

ChatCompletionStreamResponse

+id: str

+object: str

+choices: list<ChatCompletionResponseStreamChoice>

3.3 流式输出处理详解

流式输出是Chat Completion最复杂的部分,涉及Harmony协议解析、工具调用流式检测、推理内容分离等:

Yes

Yes

No

Yes

No

Yes

No

有finish

无finish

Yes

No

async for res in result_generator

有output?

首次迭代?

发送role chunk
(含num_prompt_tokens)

解析delta_text

use_harmony?

Harmony解析路径

delta_text = output.text

遍历token_ids
构建TokenState列表
(channel, recipient, text)

extract_harmony_streaming_delta()
提取DeltaMessage

有parser?

parser.extract_tool_calls_streaming()
解析工具调用流

构造简单DeltaMessage

finish_reason?

发送finish_reason chunk
+ usage信息

发送delta chunk
data: {json}

include_usage?

发送usage chunk

data: [DONE]

3.4 Harmony协议与流式解析

vLLM集成了OpenAI的Harmony协议用于统一的流式输出解析:

  • stream_harmony.pyextract_harmony_streaming_delta()函数,从StreamableParser状态中提取DeltaMessage
  • TokenState:命名元组(channel, recipient, text),跟踪每个token的通道状态
  • 通道系统:区分最终文本(final)、工具调用、推理内容等不同通道
  • recipient切换检测:检测工具调用之间的recipient变化,触发工具调用流式输出

3.5 工具调用处理

vLLM支持多种工具调用解析器,通过ToolParserManagerParserManager动态注册:

# 工具解析器初始化(在OpenAIServingChat.__init__中)
self.tool_parser = ParserManager.get_tool_parser(
    tool_parser_name=tool_parser,
    enable_auto_tools=enable_auto_tools,
    model_name=self.model_config.model,
)
self.parser_cls = ParserManager.get_parser(
    tool_parser_name=tool_parser,
    reasoning_parser_name=reasoning_parser,
    enable_auto_tools=enable_auto_tools,
    model_name=self.model_config.model,
)

工具调用选择模式:

  • auto:自动决定是否使用工具
  • required:必须使用工具
  • none:禁止工具使用(可配置是否从模板排除工具)
  • 指定函数ChatCompletionNamedToolChoiceParam

3.6 批量Chat Completion

/v1/chat/completions/batch端点支持批量请求处理,由OpenAIServingChatBatch处理:

@router.post("/v1/chat/completions/batch")
@with_cancellation
@load_aware_call
async def create_batch_chat_completion(
    request: BatchChatCompletionRequest, raw_request: Request
):
    handler = batch_chat(raw_request)
    result = await handler.create_batch_chat_completion(request, raw_request)

4. Completion与Responses端点

4.1 Completion端点 (/v1/completions)

结构类似Chat Completion,但处理纯文本补全:

组件 文件 职责
api_router.py 路由定义 + 请求分发
protocol.py CompletionRequest/CompletionResponse协议
serving.py OpenAIServingCompletion处理逻辑

关键区别:Completion请求直接传递prompt字符串而非messages数组,使用render_for_completion()进行预渲染。

4.2 Responses端点 (/v1/responses)

OpenAI的新式Responses API,支持更丰富的交互模式:

Responses子模块

api_router.py
/v1/responses

protocol.py
ResponsesRequest/Response

serving.py
OpenAIServingResponses

context.py
请求上下文

harmony.py
Harmony集成

streaming_events.py
SSE事件

utils.py
工具函数

客户端

responses/api_router.py

OpenAIServingResponses

OpenAIServingRender

ToolServer
(MCP/Demo)

EngineClient

特点:

  • 支持SSE流式输出(StreamingResponsesResponse
  • 集成MCP工具服务器(ToolServer接口 → MCPToolServer/DemoToolServer
  • 使用Harmony协议进行输出解析
  • 支持enable_prompt_tokens_detailsenable_force_include_usage

5. 服务管理子系统

vllm/entrypoints/serve/是vLLM的服务管理核心,通过register_vllm_serve_api_routers()统一注册到FastAPI应用。

5.1 路由注册中心

register_vllm_serve_api_routers(app)

attach_lora_router
LoRA动态管理

attach_profile_router
性能分析

attach_sleep_router
睡眠/唤醒

attach_rpc_router
集群RPC

attach_cache_router
缓存管理

attach_tokenize_router
分词/反分词

register_instrumentator_api_routers

basic router
/v1 /version /load

health router
/health /ping

metrics
/metrics (Prometheus)

offline_docs
离线文档

server_info
/server_info (dev模式)

5.2 LoRA动态管理

端点: /v1/load_lora_adapter/v1/unload_lora_adapter

EngineClient OpenAIServingModels lora/api_router.py 客户端 EngineClient OpenAIServingModels lora/api_router.py 客户端 检查VLLM_ALLOW_RUNTIME_LORA_UPDATING POST /v1/load_lora_adapter load_lora_adapter(request) 验证lora_name/lora_path 加载LoRA权重 成功/ErrorResponse 200 OK / 错误 POST /v1/unload_lora_adapter unload_lora_adapter(request) 卸载LoRA权重 200 OK / 错误

安全限制: LoRA动态加载仅在VLLM_ALLOW_RUNTIME_LORA_UPDATING=true时启用,且仅建议本地开发使用。

LoRA适配器还在服务启动时通过process_lora_modules()处理静态LoRA模块,并合并default_mm_loras(来自lora_config)。

5.3 缓存管理

端点 方法 功能
/reset_prefix_cache POST 重置前缀缓存(支持reset_external参数重置外部缓存)
/reset_mm_cache POST 重置多模态缓存

5.4 分离式推理(Disaggregated Serving)

分离式推理将预填充(prefill)与解码(decode)分离到不同服务:

解码服务

预填充服务

KV Cache传输

disagg模块

api_router.py
/inference/v1/generate

serving.py
ServingTokens

protocol.py
GenerateRequest/Response

mm_serde.py
多模态序列化

/inference/v1/generate
接收请求 → Tokenize → 预填充

OpenAIServingRender
消息渲染

/inference/v1/generate
接收Tokens → 解码 → 返回

客户端

核心类: ServingTokens继承自OpenAIServing,提供"Tokens IN → Tokens OUT"功能,接收tokenized输入而非原始文本。

多模态支持: mm_serde.py处理多模态数据的编码/解码,支持在分离式推理中传递多模态特征。

5.5 RLHF权重热更新

端点: /pause/resume/update_weights

EngineClient rlhf/api_router.py 训练框架 EngineClient rlhf/api_router.py 训练框架 传输权重更新请求 POST /pause?mode=abort pause_generation(mode="abort") 已暂停 {"status": "paused"} POST /update_weights update_weights(...) 更新完成 200 OK POST /resume resume_generation() 已恢复 {"status": "resumed"}

暂停模式:

  • abort:立即中止所有进行中的请求
  • wait:等待进行中的请求完成
  • keep:冻结队列中的请求,resume后继续

5.6 弹性专家并行(Elastic EP)

端点: /scale_elastic_ep

动态调整数据并行度(data parallel size),适用于MoE模型的弹性专家并行:

@router.post("/scale_elastic_ep")
async def scale_elastic_ep(raw_request: Request):
    new_data_parallel_size = body.get("new_data_parallel_size")
    drain_timeout = body.get("drain_timeout", 120)
    # 设置全局缩放状态 → ScalingMiddleware拦截新请求(503)
    # 排空现有请求 → 调整并行度 → 恢复服务

ScalingMiddleware:全局中间件,当_scaling_elastic_ep=True时对所有HTTP请求返回503 Service Unavailable。

5.7 睡眠/唤醒机制

端点 方法 功能
/sleep POST 让引擎进入睡眠状态(释放GPU资源),支持level参数和abort/wait/keep模式
/wake_up POST 唤醒引擎,支持tags参数选择性唤醒
/is_sleeping GET 查询引擎睡眠状态

5.8 性能分析

端点 方法 功能
/start_profile POST 启动Profiler
/stop_profile POST 停止Profiler

仅在profiler_config配置了profiler时注册路由。

5.9 集群RPC

端点: /collective_rpc

允许通过HTTP API调用引擎的分布式集体RPC方法,用于调试和管理:

@router.post("/collective_rpc")
async def collective_rpc(raw_request: Request):
    method = body.get("method")     # RPC方法名
    args = body.get("args", [])     # 序列化参数
    kwargs = body.get("kwargs", {}) # 序列化关键字参数
    results = await engine.collective_rpc(method, timeout, args, kwargs)

5.10 分词/反分词

端点 方法 功能
/tokenize POST 将文本分词为token IDs
/detokenize POST 将token IDs反分词为文本

5.11 预渲染服务(Render)

OpenAIServingRender是一个关键组件,负责将Chat/Completion请求渲染为引擎输入:

OpenAIServingRender

渲染流程

应用Chat模板
Jinja2渲染

构建Harmony消息
parse_chat_inputs_to_harmony_messages

Tokenize
text → token_ids

多模态处理
图像/音频/视频嵌入

构建EngineInput
prompt + mm_data + params

render_chat_request()
Chat请求渲染

render_completion_request()
Completion请求渲染

初始化
model_config + renderer
+ model_registry

重要特性:

  • CPU-only模式:支持仅预渲染的无引擎模式(build_and_serve_renderer()),用于分离式推理的预填充节点
  • 工具定义注入:根据tool_choice自动注入工具定义到chat模板
  • 自定义模板:支持--chat-template--trust-request-chat-template
  • 多模态序列化encode_mm_kwargs_item()/decode_mm_kwargs_item()处理多模态数据

6. 多模态与实时推理端点

6.1 语音转文本 (speech_to_text/)

端点 方法 功能
/v1/audio/transcriptions POST 音频转录(支持流式输出)
/v1/audio/translations POST 音频翻译(支持流式输出)

关键类:

  • OpenAIServingTranscription:音频转录处理
  • OpenAIServingTranslation:音频翻译处理
  • 使用Form解析器处理multipart上传(音频文件)

6.2 实时WebSocket (realtime/)

端点: /v1/realtime(WebSocket)

OpenAIServingRealtime RealtimeConnection realtime/api_router.py 客户端 OpenAIServingRealtime RealtimeConnection realtime/api_router.py 客户端 loop [音频处理] WebSocket连接 ws://host/v1/realtime 创建RealtimeConnection session.created事件 session.update(可选,设置模型/参数) input_audio_buffer.append(base64 PCM16音频块) input_audio_buffer.commit 处理音频输入 transcription.delta事件 transcription.done + usage 断开连接

子模块:

  • connection.py:WebSocket连接管理
  • serving.pyOpenAIServingRealtime实时推理服务
  • metrics.py:WebSocket指标中间件
  • protocol.py:实时协议消息定义

7. Pooling子模块(嵌入/分类/评分/重排)

pooling/子模块为非生成式任务提供API端点,采用工厂模式根据模型task类型动态注册:

每个子模块的结构

pooling/factories.py
register_pooling_api_routers()

embed/
/v1/embeddings
文本嵌入

classify/
/classify
文本分类

scoring/
/score /v1/score
相关性评分

scoring/
/rerank /v1/rerank /v2/rerank
重排序

pooling/
/pooling
通用池化

api_router.py
路由定义

serving.py
Serving类

io_processor.py
输入/输出处理

protocol.py
协议定义

统一基类:

  • PoolingBaseServingbase/serving.py):通用池化服务基类
  • PoolingIOProcessorbase/io_processor.py):输入输出处理器
  • PoolingRequest/PoolingResponsebase/protocol.py):协议定义

所有Pooling端点都通过register_pooling_api_routers(app, supported_tasks, model_config)在应用启动时根据模型支持的任务类型动态注册。


8. Anthropic兼容层与MCP工具服务

8.1 Anthropic兼容层

/v1/messages端点提供Anthropic Messages API兼容:

/v1/messages

/v1/messages/count_tokens

Anthropic SDK

anthropic/api_router.py

translate_error_response()
OpenAI错误→Anthropic格式

AnthropicServingMessages

OpenAIServingRender

EngineClient

Messages

CountTokens

错误转换: translate_error_response()将vLLM的ErrorResponse转换为Anthropic格式的AnthropicErrorResponse

8.2 MCP工具服务

mcp/子模块实现MCP(Model Context Protocol)工具服务器,为Responses API提供工具调用能力:

# 工具服务器类型
class ToolServer(Protocol):
    async def list_tools(self) -> list[Tool]
    async def call_tool(self, name: str, arguments: dict) -> Any

# 实现类
class MCPToolServer(ToolServer):     # MCP协议工具服务器
    async def add_tool_server(self, url: str)

class DemoToolServer(ToolServer):    # 演示用工具服务器
    async def init_and_validate(self)

配置方式:

  • --tool-server demo:启用演示工具服务器
  • --tool-server <url>:连接MCP工具服务器

9. CLI命令行入口

9.1 CLI架构

vllm.entrypoints.cli.main
main()

CMD_MODULES列表

openai
交互式Chat CLI

serve
启动API服务器

launch
启动组件

bench
性能基准测试

collect_env
环境信息收集

run_batch
批量推理

latency
延迟测试

throughput
吞吐测试

serve
服务端测试

startup
启动时间测试

sweep
参数扫描

mm_processor
多模态处理器测试

render
CPU-only预渲染服务

9.2 各子命令详解

子命令 模块 功能
vllm serve <model> cli/serve.py 启动OpenAI兼容API服务器(核心命令)
vllm chat <url> cli/openai.py 交互式Chat客户端,连接已运行的API
vllm launch render cli/launch.py 启动CPU-only预渲染组件
vllm bench * cli/benchmark/ 性能基准测试套件
vllm collect-env cli/collect_env.py 收集运行环境信息(调试用)
vllm run-batch cli/run_batch.py 批量推理

9.3 Serve子命令流程

run_server_worker() APIServerProcessManager CoreEngineProcManager setup_server() ServeSubcommand 用户 run_server_worker() APIServerProcessManager CoreEngineProcManager setup_server() ServeSubcommand 用户 启动引擎核心进程 启动API Server Worker进程 alt [gRPC模式] [HTTP模式] vllm serve Qwen3-0.6B 解析参数 → validate_parsed_serve_args grpc=True → serve_grpc() setup_server(args) (listen_address, sock) launch_core_engines() APIServerProcessManager(args) run_server_worker() build_async_engine_client() build_and_serve()

9.4 Chat交互式客户端

vllm chat提供类似ChatGPT的交互式命令行:

def _interactive_cli(args):
    openai_client = OpenAI(api_key=api_key, base_url=base_url)
    # 自动获取可用模型
    model_name = openai_client.models.list().data[0].id
    # 流式输出
    for chunk in stream:
        delta = chunk.choices[0].delta
        # 实时打印

10. 引擎客户端构建与生命周期

10.1 AsyncLLM引擎客户端

Yes

No

build_async_engine_client(args)

AsyncEngineArgs.from_cli_args(args)

engine_args.create_engine_config()

AsyncLLM.from_vllm_config(vllm_config)

VLLM_WORKER_MULTIPROC_METHOD
== forkserver?

设置forkserver
预导入vllm.v1.engine.async_llm

跳过

yield async_llm

服务运行中...

finally: async_llm.shutdown()

关键设计:

  • 使用@asynccontextmanager管理引擎生命周期
  • 启动后自动重置多模态缓存(reset_mm_cache()
  • 支持多客户端配置(client_count/client_index用于多API Server场景)
  • finally块确保引擎优雅关闭

10.2 多Worker模式

cli/serve.py中,ServeSubcommand.cmd()支持启动多Worker:

class ServeSubcommand(CLISubcommand):
    @staticmethod
    def cmd(args):
        # 1. 启动核心引擎进程(CoreEngineProcManager)
        # 2. 启动多个API Server Worker(APIServerProcessManager)
        # 3. 等待所有进程完成
        core_procs = launch_core_engines(vllm_config, ...)
        api_procs = APIServerProcessManager(args, ...)
        wait_for_completion_or_failure(core_procs, api_procs)

11. 协议层与数据模型

11.1 协议层次

openai/responses/protocol.py — Responses协议

openai/completion/protocol.py — Completion协议

openai/chat_completion/protocol.py — Chat协议

openai/engine/protocol.py — 基础协议

OpenAIBaseModel
Pydantic BaseModel + extra='allow'

ErrorResponse
统一错误响应

DeltaMessage
流式增量消息

ToolCall / DeltaToolCall
工具调用

FunctionCall / DeltaFunctionCall
函数调用

UsageInfo
Token使用统计

StreamOptions
流式选项

PromptTokenUsageInfo
Prompt Token详情

ChatCompletionRequest
Chat请求

ChatCompletionResponse
Chat响应

ChatMessage
消息(含audio/annotations)

ChatCompletionResponseChoice
选择项

ChatCompletionResponseStreamChoice
流式选择项

ChatCompletionStreamResponse
流式响应

ChatCompletionLogProbs
对数概率

CompletionRequest
Completion请求

CompletionResponse
Completion响应

ResponsesRequest
Responses请求

ResponsesResponse
Responses响应

StreamingResponsesResponse
流式Responses

11.2 OpenAIBaseModel设计

OpenAIBaseModel是所有协议模型的基类,关键特性:

class OpenAIBaseModel(BaseModel):
    model_config = ConfigDict(extra="allow")  # 允许额外字段(OpenAI API兼容)
    
    @model_validator(mode="wrap")
    def __log_extra_fields__(cls, data, handler):
        # 自动记录未识别的字段(调试用,不拒绝)
        ...

这种设计确保了与OpenAI API的完全兼容——即使OpenAI添加新字段,vLLM也不会报错。

11.3 system_fingerprint机制

fingerprint.py提供四种指纹模式:

模式 格式 说明
full(默认) vllm-<version>[-<tp>xpp>]-<hash8> 包含并行度+配置hash
hash vllm-<version>-<hash8> 仅版本+配置hash
custom 用户自定义字符串 通过--fingerprint-value指定
none null 不返回fingerprint

指纹在Serving类初始化时计算一次,缓存在self.system_fingerprint中,流式chunk中省略以减少开销。


12. 中间件与安全机制

12.1 中间件栈

HTTP请求

自定义中间件
(--middleware指定)

WebSocketMetricsMiddleware
(realtime模式)

ScalingMiddleware
弹性缩放503拦截

XRequestIdMiddleware
(--enable-request-id-headers)

AuthenticationMiddleware
API Key验证

CORSMiddleware
跨域资源共享

log_response
(VLLM_DEBUG_LOG_API_SERVER_RESPONSE)

FastAPI路由处理

异常处理器

http_exception_handler
HTTPException

validation_exception_handler
RequestValidationError

engine_error_handler
EngineGenerateError/DeadError

generation_error_handler
GenerationError

exception_handler
通用Exception

12.2 认证机制

# AuthenticationMiddleware (server_utils.py)
class AuthenticationMiddleware:
    def __init__(self, app, tokens):
        self.tokens = tokens  # 来自 --api-key 或 VLLM_API_KEY
    
    async def __call__(self, scope, receive, send):
        # 检查Authorization: Bearer <token>
        # 或 x-api-key header

API Key来源优先级: --api-key CLI参数 > VLLM_API_KEY 环境变量

12.3 请求生命周期装饰器

装饰器 功能
@with_cancellation 监听客户端断开,自动取消引擎请求
@load_aware_call 负载感知,跟踪GPU利用请求数
@validate_json_request FastAPI依赖,验证JSON请求体

13. 可观测性(监控/健康/指标)

13.1 监控端点

端点 类型 功能
/health GET 健康检查(引擎存活则200,否则503)
/ping GET 轻量心跳检查
/metrics GET Prometheus指标
/load GET 服务器负载指标(GPU利用请求数)
/version GET vLLM版本号
/v1 GET API根路径
/server_info GET 服务器详细信息(仅dev模式)

13.2 健康检查

@router.get("/health")
async def health(raw_request: Request):
    client = engine_client(raw_request)
    if client is None:
        # Render-only服务器没有引擎,始终健康
        return Response(status_code=200)
    try:
        await client.check_health()
        return Response(status_code=200)
    except EngineDeadError:
        return Response(status_code=503)

13.3 Prometheus指标

通过prometheus_fastapi_instrumentator集成:

Instrumentator(
    excluded_handlers=["/metrics", "/health", "/load", "/ping", "/version", "/server_info"],
    registry=registry,
).add().instrument(app).expose(app, response_class=PrometheusResponse)

排除路径避免监控端点自身的指标污染。

13.4 Orca端点负载指标

orca_metrics.py提供端点级负载指标,通过HTTP Header返回:

# 在Chat/Completion路由中
metrics_header_format = raw_request.headers.get(ENDPOINT_LOAD_METRICS_FORMAT_HEADER_LABEL)
# 返回headers中包含负载信息
return JSONResponse(content=..., headers=metrics_header(metrics_header_format))

14. 关键设计模式总结

14.1 架构模式一览

vLLM入口层
设计模式

路由聚合模式

"build_app动态注册"

按task类型条件挂载

每个子模块api_router.py

"attach_router统一接口"

Serving类层次

OpenAIServing基类

按端点类型子类化

状态挂载到app.state

依赖注入获取实例

请求处理管道

FastAPI依赖验证

with_cancellation装饰器

load_aware_call装饰器

OpenAIServing统一处理

流式输出模式

AsyncGenerator协议

SSE格式输出

Harmony流式解析

工具调用流式检测

多协议兼容

OpenAI REST API

Anthropic Messages

gRPC

"WebSocket Realtime"

SageMaker

服务管理模式

LoRA动态加载

缓存重置

睡眠/唤醒

RLHF权重更新

弹性并行缩放

14.2 核心设计决策

  1. 动态路由注册:根据supported_tasks和运行时环境决定注册哪些端点,避免无用路由
  2. Serving类分离:每个端点类型(Chat/Completion/Responses/Embed等)有独立Serving类,职责清晰
  3. Render层抽象OpenAIServingRender将请求渲染与推理执行分离,支持CPU-only预渲染模式
  4. Harmony协议集成:统一处理文本、工具调用、推理内容的流式输出
  5. 中间件管道:CORS → 认证 → 缩放检测 → 自定义中间件,可扩展
  6. graceful degradation:Render-only模式下不需要引擎客户端,健康检查始终返回200
  7. LoRA多级管理:静态LoRA(启动时加载)+ 动态LoRA(运行时API加载)+ 默认多模态LoRA
  8. 分离式推理支持ServingTokens提供Token级别接口,prefill与decode可独立部署

14.3 关键数据流

引擎层

渲染层

Serving层

处理层

请求入口

HTTP请求

WebSocket连接

gRPC调用

CLI交互

FastAPI路由

中间件栈

请求验证

OpenAIServingChat

OpenAIServingCompletion

OpenAIServingResponses

其他Serving类

OpenAIServingRender

Chat模板渲染

Harmony消息构建

Tokenize

EngineClient

AsyncLLM

generate()

beam_search()


附录:文件行数统计

文件/目录 行数 说明
openai/api_server.py 733 FastAPI主应用
openai/chat_completion/serving.py 1569 Chat Completion核心
openai/engine/serving.py ~600 OpenAIServing基类
openai/engine/protocol.py 279 基础协议定义
llm.py 1957 离线LLM入口
grpc_server.py 200 gRPC服务
entrypoints/ 总计 ~34000 全部入口层代码

基于vLLM源码 vllm/entrypoints/ 目录分析

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐