# https://github.com/vllm-project/vllm 项目说明书

生成时间：2026-05-11 03:40:03 UTC

## 目录

- [项目介绍](#page-intro)
- [安装指南](#page-installation)
- [架构概览](#page-arch-overview)
- [V1 引擎架构](#page-v1-engine)
- [引擎核心模块](#page-engine-core)
- [PagedAttention 与 KV 缓存管理](#page-paged-attention)
- [注意力后端](#page-attention-backends)
- [量化支持](#page-quantization)
- [推测解码](#page-speculative-decoding)
- [分布式并行策略](#page-parallelism)

<a id='page-intro'></a>

## 项目介绍

### 相关页面

相关主题：[安装指南](#page-installation), [架构概览](#page-arch-overview)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/vllm-project/vllm/blob/main/README.md)
- [vllm/__init__.py](https://github.com/vllm-project/vllm/blob/main/vllm/__init__.py)
- [vllm/version.py](https://github.com/vllm-project/vllm/blob/main/vllm/version.py)
- [vllm/engine/arg_utils.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/arg_utils.py)
- [vllm/config.py](https://github.com/vllm-project/vllm/blob/main/vllm/config.py)
- [vllm/entrypoints/llm.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/llm.py)
- [setup.py](https://github.com/vllm-project/vllm/blob/main/setup.py)
</details>

# 项目介绍

## 1 项目概述

vLLM（Vectorized Large Language Model）是一个高性能、易于使用的**大语言模型推理和服务框架**，旨在提供高吞吐量的 LLM 推理能力。vLLM 由 UC Berkeley、UC San Diego、University of Illinois 等知名学术机构的研究人员开发和维护，是开源社区中用于生产环境 LLM 部署的主流选择之一。

vLLM 的核心目标是解决大语言模型推理过程中的**内存管理效率问题**，通过创新的 PagedAttention 技术实现 KV Cache 的高效管理，从而在有限的 GPU 显存资源下实现更高的吞吐量。资料来源：[README.md:1-20]()

### 1.1 核心价值主张

| 特性 | 描述 |
|------|------|
| 高吞吐量 | 相比传统方法提升 2-24 倍的吞吐量 |
| 显存高效 | 通过 PagedAttention 实现精细化的显存管理 |
| 易用性 | 提供简洁的 Python API 和 OpenAI 兼容接口 |
| 灵活扩展 | 支持张量并行、管道并行等多种分布式策略 |
| 广泛兼容 | 支持众多主流开源大语言模型 |

### 1.2 版本信息

当前稳定版本信息定义在 `vllm/version.py` 中，用于标识 vLLM 的发布版本号，便于依赖管理和版本追踪。资料来源：[vllm/version.py:1-15]()

## 2 技术架构

### 2.1 整体架构概览

vLLM 采用分层架构设计，从上到下分为以下几个核心层次：

```mermaid
graph TD
    A[用户接口层] --> B[LLM 入口层]
    B --> C[推理引擎层]
    C --> D[模型执行层]
    D --> E[设备抽象层]
    
    A --> A1[OpenAI 兼容 API]
    A --> A2[Python API]
    
    C --> C1[Engine Arguments]
    C --> C2[Engine Core]
    C --> C3[Async Engine]
    
    D --> D1[Model Runner]
    D --> D2[Worker]
    D --> D3[Cache Engine]
    
    E --> E1[CUDA]
    E --> E2[ROCm]
    E --> E3[CPU]
```

### 2.2 核心模块结构

`vllm/__init__.py` 文件定义了包的主要导出接口，展示了 vLLM 的模块组织方式：

| 模块路径 | 功能描述 |
|----------|----------|
| `vllm.LLM` | 主要的推理入口类 |
| `vllm.SamplingParams` | 采样参数配置 |
| `vllm.engine` | 推理引擎核心实现 |
| `vllm.worker` | 模型执行工作进程 |
| `vllm.model_executor` | 模型执行器 |
| `vllm.config` | 配置管理 |
| `vllm.attention` | 注意力机制实现 |

资料来源：[vllm/__init__.py:1-50]()

### 2.3 推理引擎架构

推理引擎是 vLLM 的核心组件，负责协调整个推理流程：

```mermaid
graph LR
    A[用户请求] --> B[Engine Arguments]
    B --> C[LLMEngine]
    C --> D[Worker Pool]
    D --> E[Model Runner]
    E --> F[Model]
    F --> G[Output]
    
    C --> H[Cache Engine]
    H --> I[KV Cache]
    
    style G fill:#90EE90
    style I fill:#87CEEB
```

**Engine Arguments** 负责解析和验证所有推理相关的配置参数，包括模型路径、采样参数、资源配置等。资料来源：[vllm/engine/arg_utils.py:1-100]()

**Configuration** 模块则统一管理 vLLM 的各类配置，包括模型配置、并行配置、调度配置等，确保各组件之间的配置一致性。资料来源：[vllm/config.py:1-150]()

## 3 主要功能特性

### 3.1 PagedAttention

PagedAttention 是 vLLM 最核心的技术创新，灵感来自操作系统的虚拟内存管理思想。它通过将 KV Cache 分页管理，避免了传统方法中连续显存分配带来的浪费问题。

```mermaid
graph LR
    A[传统方法] -->|连续分配| B[显存碎片化]
    B --> C[显存利用率低]
    
    D[PagedAttention] -->|分页管理| E[灵活分配]
    E --> F[显存利用率高]
    
    style D fill:#90EE90
```

**技术优势：**

- 将显存利用率提升至接近 100%
- 支持高效的Prefix Caching
- 减少显存碎片化
- 支持弹性批处理

### 3.2 并行推理策略

vLLM 支持多种分布式推理策略，可以根据硬件配置灵活选择：

| 并行策略 | 适用场景 | 配置参数 |
|----------|----------|----------|
| 张量并行 (TP) | 单机多卡 | `tensor_parallel_size` |
| 管道并行 (PP) | 多机多卡 | `pipeline_parallel_size` |
| 数据并行 (DP) | 多实例部署 | 启动多个进程 |
| 专家并行 (EP) | MoE 模型 | `enable_expert_parallel` |

### 3.3 模型支持

vLLM 支持众多主流的开源大语言模型，涵盖以下类别：

| 模型类别 | 代表模型 |
|----------|----------|
| Decoder-Only | Llama, GPT, Mistral, Qwen |
| Encoder-Decoder | T5, BART |
| 视觉语言模型 | LLaVA, Qwen-VL |
| Mixture of Experts | Mixtral |

资料来源：[setup.py:1-50]()

### 3.4 推理接口

vLLM 提供两类主要的推理接口：

**Python API（同步）：**

```python
from vllm import LLM, SamplingParams

llm = LLM(model="meta-llama/Llama-2-7b-hf")
outputs = llm.generate(["Hello, world!"], SamplingParams(temperature=0.8))
```

**异步 API：**

```python
from vllm import AsyncLLM

async_llm = AsyncLLM(model="meta-llama/Llama-2-7b-hf")
```

**OpenAI 兼容 API：**

vLLM 提供与 OpenAI API 格式完全兼容的推理服务，支持 `/v1/chat/completions` 和 `/v1/completions` 端点，便于现有应用无缝迁移。

资料来源：[vllm/entrypoints/llm.py:1-100]()

## 4 应用场景

### 4.1 典型使用场景

```mermaid
graph TD
    A[vLLM 部署场景] --> B[在线推理服务]
    A --> C[批量推理任务]
    A --> D[实验研究]
    A --> E[模型微调验证]
    
    B --> B1[低延迟响应]
    C --> C1[高吞吐处理]
    D --> D1[快速迭代]
    E --> E1[资源高效利用]
```

### 4.2 部署模式

| 部署模式 | 特点 | 推荐配置 |
|----------|------|----------|
| 单机单卡 | 简单部署 | 默认配置 |
| 单机多卡 | 高效利用 | TP=2/4/8 |
| 多机多卡 | 大模型推理 | TP+PP |
| 容器化部署 | 便于运维 | Docker/Kubernetes |

## 5 依赖技术栈

### 5.1 核心依赖

| 依赖库 | 用途 |
|--------|------|
| PyTorch | 深度学习框架 |
| CUDA | GPU 计算 |
| transformers | 模型加载 |
| flash-attn | 高效注意力计算 |
| ray | 分布式计算 |

### 5.2 硬件要求

- **GPU**: NVIDIA GPU（CUDA 计算能力 ≥ 7.0）
- **显存**: 取决于模型大小，通常至少 16GB
- **内存**: 至少 32GB 系统内存
- **存储**: 足够的模型权重存储空间

## 6 项目发展

### 6.1 发展历程

vLLM 项目起源于学术研究，最初由 UC Berkeley 的研究人员提出 PagedAttention 概念，并在论文中展示了其优越性能。随着开源社区的积极参与，vLLM 逐步发展成为功能完善、性能卓越的生产级推理框架。

### 6.2 社区生态

vLLM 采用 Apache License 2.0 开源许可，拥有活跃的开源社区。项目持续接收来自全球开发者的贡献，不断添加新功能和优化性能。

---

**总结**：vLLM 是一个专为大规模语言模型设计的生产级推理框架，通过创新的 PagedAttention 技术显著提升了推理效率和显存利用率。其简洁的 API 设计、丰富的模型支持和灵活的部署方式，使其成为当前最流行的 LLM 推理框架之一。

---

<a id='page-installation'></a>

## 安装指南

### 相关页面

相关主题：[项目介绍](#page-intro)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [README.md](https://github.com/vllm-project/vllm/blob/main/README.md)
- [vllm/entrypoints/cli/main.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/main.py)
- [vllm/entrypoints/cli/serve.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/serve.py)
- [vllm/entrypoints/cli/launch.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/launch.py)
- [examples/basic/offline_inference/README.md](https://github.com/vllm-project/vllm/blob/main/examples/basic/offline_inference/README.md)
</details>

# 安装指南

## 概述

vLLM 是一个高性能的大语言模型（LLM）推理和服务框架，旨在为用户提供快速、经济高效的 LLM 服务。本页面详细介绍 vLLM 的安装方法、依赖要求、环境配置以及各种部署场景的安装步骤。

vLLM 支持多种安装方式，包括 pip 安装、Docker 部署、源码编译等。用户可以根据自己的硬件环境（CUDA GPU、CPU 等）选择最适合的安装方式。框架采用模块化设计，通过灵活的参数配置支持不同的推理场景。

## 系统要求

### 硬件要求

| 组件类型 | 最低要求 | 推荐配置 |
|---------|---------|---------|
| GPU | NVIDIA GPU with CUDA support | NVIDIA A100/H100 |
| 显存 | 8GB | 24GB+ |
| 内存 | 16GB | 32GB+ |
| 存储 | 50GB SSD | 100GB+ NVMe SSD |

### 软件环境

vLLM 支持多种 Python 版本和 CUDA 版本。安装前请确保系统已安装以下软件：

- Python 3.8 - 3.11
- CUDA Toolkit 11.8 或更高版本
- cuDNN 8.x 或更高版本
- NVIDIA Driver 450.80.02 或更高版本

## 安装方式

### 方式一：使用 pip 安装（推荐）

使用 pip 是最简单快速的安装方式，适合大多数用户场景。

```bash
# 标准安装
pip install vllm

# 包含所有可选依赖的完整安装
pip install vllm[all]
```

pip 安装方式会自动处理 vLLM 的核心依赖，包括 PyTorch、Transformers 等关键库。此方式适合快速原型开发和测试环境部署。

### 方式二：Docker 安装

Docker 安装提供了隔离的运行环境，可以避免依赖冲突问题。vLLM 官方提供了预配置好的 Docker 镜像。

```bash
# 拉取最新稳定版镜像
docker pull vllm/vllm:latest

# 运行容器
docker run --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --runtime nvidia \
    -p 8000:8000 \
    vllm/vllm:latest \
    --model meta-llama/Llama-2-7b-hf
```

资料来源：[README.md:1-15]()

Docker 部署的优势在于环境一致性高，部署迁移方便，适合生产环境使用。镜像已预装所有必要的 CUDA 驱动和依赖库。

### 方式三：源码编译安装

对于需要自定义配置或参与 vLLM 开发的用户，可以选择源码编译安装。

```bash
# 克隆仓库
git clone https://github.com/vllm-project/vllm.git
cd vllm

# 安装依赖
pip install -e .

# 或使用高级构建选项
pip install -e . --verbose
```

资料来源：[vllm/entrypoints/cli/main.py:1-30]()

## CLI 命令行工具

vLLM 提供了功能丰富的命令行界面（CLI），通过 `vllm` 命令可以访问各种子命令。CLI 架构采用模块化设计，支持扩展新的命令。

```mermaid
graph TD
    A[vllm CLI] --> B[main.py 入口]
    B --> C[serve 推理服务]
    B --> D[run-batch 批处理]
    B --> E[launch 启动组件]
    C --> F[FastAPI 服务]
    C --> G[gRPC 服务]
    E --> H[FastAPI 渲染服务]
```

### 基本用法

```bash
# 查看版本信息
vllm --version

# 查看帮助信息
vllm --help

# 查看特定子命令帮助
vllm serve --help
```

### serve 子命令

`serve` 子命令用于启动 LLM 推理服务，是最常用的命令之一。

```bash
vllm serve Qwen/Qwen2.5-3B-Instruct
```

资料来源：[vllm/entrypoints/cli/serve.py:1-50]()

#### 常用参数

| 参数 | 说明 | 默认值 |
|-----|------|-------|
| `--model` | 模型名称或本地路径 | Qwen/Qwen3-0.6B |
| `--host` | 服务监听地址 | 0.0.0.0 |
| `--port` | 服务监听端口 | 8000 |
| `--gpu-memory-utilization` | GPU 显存利用率 | 0.9 |
| `--max-model-len` | 最大模型上下文长度 | 模型默认值 |
| `--tensor-parallel-size` | 张量并行大小 | 1 |

#### headless 模式

headless 模式启动时不会创建 API 服务器，适用于分布式部署场景。

```bash
vllm serve <model> --headless
```

在此模式下，`api_server_count` 参数自动设为 0，不启动任何 API 服务器。

```bash
# 错误用法：headless 模式不能指定 api-server-count
vllm serve <model> --headless --api-server-count=2
```

此配置会触发参数校验错误，提示 headless 模式与 api-server-count 参数冲突。

#### gRPC 服务模式

vLLM 支持 gRPC 协议用于高性能内部通信。

```bash
vllm serve <model> --grpc
```

启用 gRPC 模式时，框架会使用 uvloop 事件循环运行 gRPC 服务器。

```python
if args.grpc:
    from vllm.entrypoints.grpc_server import serve_grpc
    uvloop.run(serve_grpc(args))
    return
```

资料来源：[vllm/entrypoints/cli/serve.py:40-45]()

### launch 子命令

`launch` 子命令用于启动独立的组件服务。

```bash
vllm launch <component> [options]
```

可用的组件包括：

- `fastapi`：启动 FastAPI 渲染服务（无 GPU 推理）
- 其他可扩展组件

#### FastAPI 组件启动

```bash
vllm launch fastapi --host 0.0.0.0 --port 8000
```

启动流程包括以下步骤：

1. **Socket 绑定**：设置服务器监听地址
2. **构建引擎参数**：从 CLI 参数创建 AsyncEngineArgs
3. **创建模型配置**：生成 VllmConfig 配置对象
4. **清除量化配置**：渲染服务器不执行推理，跳过量化验证

```python
async def run_launch_fastapi(args: argparse.Namespace) -> None:
    listen_address, sock = setup_server(args)
    engine_args = AsyncEngineArgs.from_cli_args(args)
    model_config = engine_args.create_model_config()
    model_config.quantization = None
```

资料来源：[vllm/entrypoints/cli/launch.py:60-80]()

## 离线推理安装

vLLM 提供了 `LLM` 类用于离线推理，即不启动独立服务器直接进行模型推理。

```python
from vllm import LLM

llm = LLM(model="Qwen/Qwen2.5-3B-Instruct")
outputs = llm.generate("Hello, world!")
```

### 基本使用示例

vLLM 仓库提供了完整的离线推理示例脚本：

```bash
# 基础推理示例
python examples/basic/offline_inference/basic.py

# 聊天示例
python examples/basic/offline_inference/chat.py

# 生成示例
python examples/basic/offline_inference/generate.py
```

资料来源：[examples/basic/offline_inference/README.md:1-30]()

### 生成参数配置

离线推理支持多种采样参数，可通过命令行或代码配置：

| 参数 | 说明 | 示例值 |
|-----|------|-------|
| `max_tokens` | 最大生成 token 数 | 512 |
| `temperature` | 采样温度 | 0.7 |
| `top_p` | Top-p 采样阈值 | 0.9 |
| `top_k` | Top-k 采样大小 | 50 |

### 默认生成配置

`--generation-config` 参数指定生成配置的加载来源：

```bash
python examples/basic/offline_inference/generate.py --generation-config auto
```

- `auto`：从模型路径加载配置
- 文件夹路径：从指定路径加载配置
- 未指定：使用 vLLM 默认配置

> 注意：如果生成配置中指定了 `max_new_tokens`，则该值会对所有请求设置全局输出 token 限制。

## GGUF 模型支持

vLLM 支持加载 GGUF 量化格式的模型。使用 `repo_id:quant_type` 格式指定量化类型：

```bash
--model unsloth/Qwen3-0.6B-GGUF:Q4_K_M --tokenizer Qwen/Qwen3-0.6B
```

支持的量化类型包括 Q2_K、Q4_K_M、Q5_K_M、Q8_0 等。

## CPU 卸载功能

vLLM 支持 CPU 显存卸载功能，可以将部分模型权重卸载到 CPU 内存，从而在有限 GPU 显存条件下运行更大的模型。

```bash
--cpu-offload-gb 10
```

此参数可以视为增加虚拟 GPU 显存大小。例如，拥有 24GB GPU 显存并设置 `--cpu-offload-gb 10` 后，相当于拥有 34GB 显存，可以加载需要至少 26GB 显存的 13B BF16 模型。

> 注意：此功能需要快速的 CPU-GPU 互联带宽，因为模型需要在运行时从 CPU 内存加载到 GPU 内存。

## 验证安装

安装完成后，可通过以下方式验证 vLLM 是否正常工作：

```bash
# 检查 vLLM 版本
python -c "import vllm; print(vllm.__version__)"

# 运行基础测试
python -c "
from vllm import LLM
llm = LLM(model='facebook/opt-125m')
print('vLLM 安装成功！')
"
```

## 常见问题排查

### CUDA 版本不兼容

如果遇到 CUDA 版本相关错误，请检查系统 CUDA 版本：

```bash
nvcc --version
```

确保 CUDA 版本符合 vLLM 的要求（CUDA 11.8+）。

### GPU 显存不足

- 减小 `--gpu-memory-utilization` 参数值
- 使用更小的量化模型
- 启用 CPU 卸载功能

### 依赖冲突

推荐使用虚拟环境安装 vLLM：

```bash
python -m venv vllm-env
source vllm-env/bin/activate
pip install vllm
```

## 下一步

安装完成后，您可以：

- [快速开始](quickstart.md) - 运行您的第一个 vLLM 推理
- [服务部署](serving.md) - 启动在线推理服务
- [API 参考](../api/) - 了解详细的 API 接口
- [示例代码](../examples/) - 探索更多使用示例

---

<a id='page-arch-overview'></a>

## 架构概览

### 相关页面

相关主题：[V1 引擎架构](#page-v1-engine), [引擎核心模块](#page-engine-core)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [vllm/entrypoints/cli/main.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/main.py)
- [vllm/entrypoints/cli/serve.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/serve.py)
- [vllm/entrypoints/cli/launch.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/launch.py)
- [vllm/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/llm_engine.py)
- [vllm/engine/arg_utils.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/arg_utils.py)
- [examples/disaggregated/example_connector/README.md](https://github.com/vllm-project/vllm/blob/main/examples/disaggregated/example_connector/README.md)
- [examples/basic/offline_inference/README.md](https://github.com/vllm-project/vllm/blob/main/examples/basic/offline_inference/README.md)
- [examples/observability/opentelemetry/README.md](https://github.com/vllm-project/vllm/blob/main/examples/observability/opentelemetry/README.md)
</details>

# 架构概览

vLLM 是一个高效、易用、低成本的大语言模型（LLM）推理服务框架，其核心设计目标是通过创新的 PagedAttention 技术实现高效的显存管理和快速推理服务。本文档详细介绍 vLLM 的整体架构设计、核心组件及其交互关系。

## 系统架构总览

vLLM 采用分层架构设计，从上到下依次为：命令行入口层、服务接口层、引擎核心层和硬件适配层。这种分层设计使得各模块职责明确，便于扩展和维护。

```mermaid
graph TD
    subgraph "用户接口层"
        CLI[CLI 命令行]
        API[OpenAI 兼容 API]
        Python[Python LLM 类]
    end
    
    subgraph "服务层"
        FastAPI[FastAPI 服务器]
        GRPC[gRPC 服务]
        Launch[Launch 组件]
    end
    
    subgraph "引擎核心层"
        LLMEngine[LLM Engine]
        Scheduler[调度器]
        ModelRunner[模型运行器]
    end
    
    subgraph "硬件适配层"
        GPU[GPU 平台]
        CPU[CPU 平台]
        Quantization[量化处理]
    end
    
    CLI --> FastAPI
    API --> FastAPI
    Python --> LLMEngine
    FastAPI --> LLMEngine
    GRPC --> LLMEngine
    Launch --> FastAPI
    LLMEngine --> Scheduler
    LLMEngine --> ModelRunner
    Scheduler --> GPU
    Scheduler --> CPU
    ModelRunner --> Quantization
```

## 命令行入口架构

vLLM 提供了功能丰富的命令行接口（CLI），支持多种子命令以满足不同的使用场景。CLI 架构基于灵活的命令注册机制，各子命令模块化设计，便于扩展。

### 主入口模块

主入口模块位于 `vllm/entrypoints/cli/main.py`，负责整体命令行解析和命令分发：

```python
# vllm/entrypoints/cli/main.py (伪代码示例)
parser = FlexibleArgumentParser(description="vLLM CLI")
subparsers = parser.add_subparsers(required=False, dest="subparser")
cmds = {}
for cmd_module in CMD_MODULES:
    new_cmds = cmd_module.cmd_init()
    for cmd in new_cmds:
        cmd.subparser_init(subparsers).set_defaults(dispatch_function=cmd.cmd)
        cmds[cmd.name] = cmd
```

### CLI 命令体系

| 命令名称 | 模块路径 | 功能说明 |
|---------|---------|---------|
| `serve` | `vllm/entrypoints/cli/serve.py` | 启动 HTTP API 服务器进行在线推理服务 |
| `launch` | `vllm/entrypoints/cli/launch.py` | 启动特定组件服务（如渲染服务器） |
| 其他命令 | 各子模块 | 通过动态加载注册 |

CLI 命令初始化流程通过 `cmd_init()` 函数返回命令列表，实现动态注册机制。资料来源：[vllm/entrypoints/cli/main.py:1-40]()

## 核心引擎架构

LLM Engine 是 vLLM 的核心组件，负责管理模型加载、请求调度、KV 缓存管理和推理执行。引擎支持同步和异步两种运行模式。

### 引擎参数配置

引擎参数通过 `AsyncEngineArgs` 类进行统一管理，该类封装了所有可配置的引擎参数：

```python
# 引擎参数示例配置
engine_args = AsyncEngineArgs.from_cli_args(args)
model_config = engine_args.create_model_config()
```

关键配置参数包括：

| 参数类别 | 参数名 | 说明 |
|---------|-------|------|
| 模型配置 | `model` | 模型名称或路径 |
| 模型配置 | `tokenizer` | 分词器路径 |
| 模型配置 | `trust_remote_code` | 是否信任远程代码 |
| 推理配置 | `tensor_size` | 张量并行数 |
| 推理配置 | `gpu_memory_utilization` | GPU 显存利用率 |
| 推理配置 | `max_model_len` | 最大模型长度 |
| 量化配置 | `quantization` | 量化方法（如 AWQ、GPTQ） |
| 服务配置 | `api_server_count` | API 服务器实例数量 |

资料来源：[vllm/engine/arg_utils.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/arg_utils.py)

### 服务启动模式

vLLM 支持多种服务启动模式，以适应不同的部署场景：

```mermaid
graph LR
    A[CLI 启动] --> B{检查参数}
    B -->|grpc=True| C[gRPC 服务模式]
    B -->|headless=True| D[无头模式<br/>api_server_count=0]
    B -->|标准参数| E[FastAPI 服务模式]
    
    C --> F[uvloop 事件循环]
    D --> G[仅引擎运行]
    E --> H[FastAPI + Uvicorn]
```

#### 标准服务模式

标准模式通过 FastAPI 提供 OpenAI 兼容的 HTTP API 服务：

```python
# vllm/entrypoints/cli/serve.py
from vllm.entrypoints.grpc_server import serve_grpc

if args.headless:
    if args.api_server_count is not None and args.api_server_count > 0:
        raise ValueError(
            f"--api-server-count={args.api_server_count} cannot be "
            "used with --headless"
        )
    args.api_server_count = 0
```

#### 无头模式（Headless）

无头模式下不启动任何 API 服务器，仅运行推理引擎，适用于程序化调用场景：

- `api_server_count` 强制设为 0
- 适合批处理作业
- 减少资源开销

资料来源：[vllm/entrypoints/cli/serve.py:1-50]()

#### Launch 组件模式

Launch 模式用于启动特定功能组件，如渲染服务器：

```python
# vllm/entrypoints/cli/launch.py
async def run_launch_fastapi(args: argparse.Namespace) -> None:
    """运行在线服务层（无 GPU 推理）"""
    listen_address, sock = setup_server(args)
    engine_args = AsyncEngineArgs.from_cli_args(args)
    model_config = engine_args.create_model_config()
```

Launch 模式的特点：

- 仅进行数据预处理，不执行模型推理
- 清除量化配置以跳过量化数据类型验证
- 不分配 KV 缓存

资料来源：[vllm/entrypoints/cli/launch.py:1-60]()

## 离线推理架构

vLLM 提供离线推理能力，通过 `LLM` 类实现无需独立服务器的本地推理功能。

### LLM 类接口

`LLM` 类是离线推理的主要接口，支持：

```python
# 基本用法
from vllm import LLM

llm = LLM("meta-llama/Llama-2-7b-hf")
outputs = llm.generate("Hello, world!")
```

### 支持的功能类型

| 功能类型 | 说明 | 示例文件 |
|---------|------|---------|
| 对话生成 | Chat 格式推理 | `chat.py` |
| 文本生成 | 标准文本补全 | `generate.py` |
| 分类任务 | 文本分类 | `classify.py` |
| 嵌入向量 | 向量嵌入提取 | `embed.py` |
| 评分计算 | 文本相似度评分 | `score.py` |

### 量化模型支持

vLLM 支持 GGUF 量化格式的模型加载：

```bash
--model unsloth/Qwen3-0.6B-GGUF:Q4_K_M --tokenizer Qwen/Qwen3-0.6B
```

格式说明：`repo_id:quant_type`，其中 quant_type 包括 Q2_K、Q4_K_M、Q5_K_S、Q6_K 等。

### CPU 卸载功能

`--cpu-offload-gb` 参数允许将部分模型卸载到 CPU 内存：

```bash
--cpu-offload-gb 10  # 虚拟增加 10GB GPU 显存
```

这使得在显存较小的 GPU 上运行更大规模的模型成为可能。

资料来源：[examples/basic/offline_inference/README.md](https://github.com/vllm-project/vllm/blob/main/examples/basic/offline_inference/README.md)

## 分离式 Prefill 架构

vLLM 支持分离式 Prefill 架构，将预填充阶段和解码阶段部署在不同的实例上，以优化大规模部署的资源利用率。

### 架构设计

```mermaid
graph TD
    subgraph "Encoder 实例"
        Encoder[编码器模型]
        ECC[EC Connector]
    end
    
    subgraph "Prefill 实例"
        Prefill[Prefill 模型]
        ECC2[EC Connector]
    end
    
    subgraph "Decode 实例"
        Decode[Decode 模型]
        KVStore[KV 状态存储]
    end
    
    Encoder -->|编码缓存| ECC
    ECC -->|EC Transfer| ECC2
    ECC2 --> Prefill
    Prefill -->|KV 状态| Decode
    Decode --> KVStore
```

### EC Connector 配置

Encoder Cache (EC) Connector 用于在实例间传输编码器缓存：

```bash
# Encoder 实例配置
--ec-transfer-config '{
    "ec_connector": "ECExampleConnector",
    "ec_role": "ec_producer",
    "ec_connector_extra_config": {
        "shared_storage_path": "/path/to/storage"
    }
}'

# Prefill/Decode 实例配置
--ec-transfer-config '{
    "ec_connector": "ECExampleConnector",
    "ec_role": "ec_consumer",
    "ec_connector_extra_config": {
        "shared_storage_path": "/path/to/storage"
    }
}'
```

### 离线示例工作流

离线分离式推理示例包含两个脚本协同工作：

1. **prefill_example.py** - 仅执行预填充，保存 KV 状态和提示词
2. **decode_example.py** - 加载 KV 状态，执行解码生成

```bash
./run.sh  # 顺序执行 prefill 和 decode
```

资料来源：[examples/disaggregated/example_connector/README.md](https://github.com/vllm-project/vllm/blob/main/examples/disaggregated/example_connector/README.md)

## 可观测性架构

vLLM 提供完整的可观测性支持，包括指标采集、分布式追踪和日志记录。

### OpenTelemetry 集成

vLLM 原生支持 OpenTelemetry 标准，可与 Jaeger、Prometheus 等监控系统集成：

```bash
# 启动带追踪的 vLLM 服务
opentelemetry-instrument vllm serve facebook/opt-125m
```

### 追踪架构

```mermaid
graph LR
    A[vLLM 实例] -->|OTLP| B[Jaeger Collector]
    B --> C[Jaeger UI]
    D[Prometheus] --> E[Grafana]
    A -->|Metrics| D
```

### 集成组件

| 组件 | 类型 | 用途 |
|-----|------|------|
| opentelemetry-sdk | 追踪 SDK | 核心追踪功能 |
| opentelemetry-api | API 接口 | 标准化接口 |
| opentelemetry-exporter-otlp | 导出器 | OTLP 协议导出 |
| opentelemetry-semantic-conventions-ai | 语义约定 | AI 领域约定 |

### Jaeger 部署示例

```bash
# 启动 Jaeger
docker run --rm --name jaeger \
    -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
    -p 6831:6831/udp -p 16686:16686 \
    -p 4317:4317 -p 4318:4318 \
    jaegertracing/all-in-one:1.57

# 配置端点
export JAEGER_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' jaeger)
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=grpc://$JAEGER_IP:4317
export OTEL_SERVICE_NAME="vllm-service"
```

资料来源：[examples/observability/opentelemetry/README.md](https://github.com/vllm-project/vllm/blob/main/examples/observability/opentelemetry/README.md)

## 平台检测机制

vLLM 在启动时自动检测运行平台，并相应调整资源配置：

```python
# 平台检测逻辑（伪代码）
if platform_unspecified():
    logger.info("Unspecified platform detected, switching to CPU Platform instead.")
    switch_to_cpu_platform()
```

支持的平台：

| 平台 | 说明 | 适用场景 |
|-----|------|---------|
| CUDA | NVIDIA GPU 平台 | 生产环境高性能推理 |
| ROCm | AMD GPU 平台 | AMD 硬件部署 |
| CPU | CPU 计算平台 | 开发测试、轻量推理 |
| TPU | Google TPU 平台 | TPU 硬件部署 |

## 结构化输出支持

vLLM 支持结构化输出功能，可生成符合约束条件的 JSON、Regex 等格式的输出。

### 支持的约束类型

| 约束类型 | 说明 | 使用场景 |
|---------|------|---------|
| `json` | JSON Schema 约束 | API 响应格式化 |
| `regex` | 正则表达式约束 | 特定格式匹配 |
| `structural_tag` | 结构化标签约束 | XML/HTML 类输出 |

### 使用示例

```bash
# 启动结构化输出服务
vllm serve deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
    --reasoning-parser deepseek_r1

# 运行结构化输出测试
python structured_outputs_offline.py --constraint structural_tag regex --stream
```

## 数据并行与负载均衡

vLLM 支持多种数据并行和负载均衡模式：

### 模式类型

| 模式 | 启动参数 | 说明 |
|-----|---------|------|
| 外部负载均衡 | `--data-parallel-external-lb` | 外部 LB 分配请求 |
| 混合负载均衡 | `--data-parallel-hybrid-lb` | 内部+外部混合 |
| 数据并行 | `--data-parallel-rank` | 指定实例排名 |
| 起始排名 | `--data-parallel-start-rank` | 混合模式起始rank |

### API Server 计数配置

```python
# 默认值根据模式自动确定
if args.headless:
    args.api_server_count = 0  # 无头模式下禁用 API 服务器
```

## 总结

vLLM 的架构设计体现了以下核心设计原则：

1. **模块化设计** - 各层职责清晰，便于独立开发和测试
2. **灵活部署** - 支持在线服务、离线推理、分离式部署等多种模式
3. **资源高效** - 通过 PagedAttention 实现显存的高效利用
4. **标准兼容** - 提供 OpenAI 兼容 API，便于现有系统集成
5. **可观测性** - 内置 OpenTelemetry 支持，便于监控和调试

这些设计使得 vLLM 能够满足从研究实验到生产部署的各种需求，成为大语言模型推理服务的重要选择。

---

<a id='page-v1-engine'></a>

## V1 引擎架构

### 相关页面

相关主题：[架构概览](#page-arch-overview), [PagedAttention 与 KV 缓存管理](#page-paged-attention), [注意力后端](#page-attention-backends)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [vllm/v1/engine/core.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/engine/core.py)
- [vllm/v1/engine/async_llm.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/engine/async_llm.py)
- [vllm/v1/core/sched/scheduler.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/core/sched/scheduler.py)
- [vllm/v1/sample/sampler.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/sample/sampler.py)
- [vllm/v1/core/kv_cache_manager.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/core/kv_cache_manager.py)
- [vllm/v1/core/block_manager.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/core/block_manager.py)
- [vllm/v1/worker/worker_base.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/worker/worker_base.py)
</details>

# V1 引擎架构

## 概述

V1引擎是vLLM的全新一代推理引擎架构，采用完全异步的设计理念，实现了高性能的批量请求调度和KV缓存管理。与传统同步引擎不同，V1引擎通过异步流水线架构，能够更高效地处理并发推理请求，显著提升GPU利用率和吞吐量。

V1引擎的核心设计目标包括：

- **异步优先**：全链路异步处理，避免阻塞等待
- **高效调度**：智能批量调度，优化GPU计算资源
- **内存优化**：精细化的KV缓存管理，提高显存利用率
- **可扩展性**：模块化设计，支持多种推理策略

资料来源：[vllm/v1/engine/core.py:1-100]()

## 整体架构

### 架构组件图

```mermaid
graph TD
    Client[客户端请求] --> AsyncLLM[AsyncLLM 异步接口]
    AsyncLLM --> Core[LLMCore 核心引擎]
    Core --> Scheduler[Scheduler 调度器]
    Scheduler --> Sampler[Sampler 采样器]
    Scheduler --> KVCacheMgr[KVCacheManager KV缓存管理]
    KVCacheMgr --> BlockMgr[BlockManager 块管理器]
    Sampler --> Worker[Worker 计算单元]
    Worker --> GPU[GPU 推理执行]
    
    style AsyncLLM fill:#e1f5fe
    style Core fill:#fff3e0
    style Scheduler fill:#e8f5e9
    style KVCacheMgr fill:#fce4ec
```

### 核心组件职责

| 组件 | 文件路径 | 主要职责 |
|------|----------|----------|
| AsyncLLM | `vllm/v1/engine/async_llm.py` | 异步请求接口，事件循环管理 |
| LLMCore | `vllm/v1/engine/core.py` | 引擎核心逻辑，请求生命周期管理 |
| Scheduler | `vllm/v1/core/sched/scheduler.py` | 请求调度，批次优化 |
| Sampler | `vllm/v1/sample/sampler.py` | 词元采样，生成控制 |
| KVCacheManager | `vllm/v1/core/kv_cache_manager.py` | KV缓存分配与回收 |
| BlockManager | `vllm/v1/core/block_manager.py` | 物理块管理，显存映射 |

资料来源：[vllm/v1/engine/async_llm.py:1-50]()

## AsyncLLM 异步接口层

### 设计概述

AsyncLLM是V1引擎对外暴露的异步编程接口，采用Python asyncio事件循环驱动。它将同步的用户请求转换为异步操作，实现非阻塞的推理调用。

```mermaid
graph LR
    A[add_request] --> B[请求队列]
    C[get_output] --> D[输出队列]
    B --> E[事件循环]
    E --> D
    E --> F[后台处理任务]
```

### 核心方法

```python
class AsyncLLM:
    async def add_request(
        request_id: str,
        prompt: str,
        sampling_params: SamplingParams,
        lora_request: Optional[LoRARequest] = None
    ) -> None
    
    async def generate() -> AsyncGenerator[RequestOutput, None]
    
    async def abort_request(request_id: str) -> None
```

资料来源：[vllm/v1/engine/async_llm.py:80-150]()

## LLMCore 核心引擎

### 引擎初始化流程

LLMCore是V1引擎的核心类，负责初始化和管理整个推理引擎的生命周期。

```mermaid
flowchart TD
    A[初始化配置] --> B[创建Worker]
    B --> C[初始化KVCacheManager]
    C --> D[初始化Scheduler]
    D --> E[初始化Sampler]
    E --> F[启动事件循环]
    F --> G[引擎就绪]
```

### 核心类结构

```python
class LLMCore:
    def __init__(
        self,
        model_config: ModelConfig,
        cache_config: CacheConfig,
        parallel_config: ParallelConfig,
        scheduler_config: SchedulerConfig,
        ...
    ):
        self.worker = self._init_worker()
        self.kv_cache_manager = KVCacheManager(...)
        self.scheduler = Scheduler(...)
        self.sampler = Sampler(...)
```

资料来源：[vllm/v1/engine/core.py:100-200]()

## Scheduler 调度器

### 调度策略

Scheduler负责管理待处理请求的调度，决定何时以及如何将请求打包成批次进行推理。V1引擎的调度器采用多级队列和多策略调度算法。

```mermaid
graph TD
    A[新请求] --> B[等待队列 WaitQueue]
    B --> C{调度决策}
    C -->|可以调度| D[运行队列 RunningQueue]
    C -->|等待资源| E[阻塞队列 BlockedQueue]
    D --> F[生成完成]
    F --> G[输出队列]
    E -->|资源释放| C
```

### 调度配置参数

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| max_num_seqs | int | 256 | 单批次最大序列数 |
| max_num_batched_tokens | int | 8192 | 单批次最大词元数 |
| gpu_memory_utilization | float | 0.9 | GPU显存利用率 |
| num_scheduler_steps | int | 1 | 调度器步数 |

资料来源：[vllm/v1/core/sched/scheduler.py:50-150]()

### 调度循环

Scheduler的核心调度循环实现如下：

1. **请求入队**：新请求加入等待队列
2. **资源检查**：检查KV缓存和计算资源
3. **批次构建**：选择可调度的请求构建批次
4. **执行分发**：将批次分发给Worker执行
5. **结果收集**：收集推理结果并更新请求状态

```python
def schedule(self) -> SchedulerOutput:
    # 1. 更新已完成的请求
    self._update_completed_requests()
    
    # 2. 分配新的 KV cache 块
    self._allocate_kv_cache()
    
    # 3. 选择要调度的请求批次
    scheduled = self._select_new_batch()
    
    # 4. 生成调度输出
    return SchedulerOutput(scheduled=scheduled, ...)
```

资料来源：[vllm/v1/core/sched/scheduler.py:200-350]()

## Sampler 采样器

### 采样流程

Sampler负责从模型输出的logits中进行词元采样，是生成式推理的关键环节。

```mermaid
graph LR
    A[Logits] --> B[Temperature处理]
    B --> C[Top-K过滤]
    C --> D[Top-P过滤]
    D --> E[采样]
    E --> F[新Token]
```

### 采样配置

| 参数 | 类型 | 说明 |
|------|------|------|
| temperature | float | 温度参数，控制随机性 |
| top_p | float | Nucleus采样概率阈值 |
| top_k | int | Top-K过滤的K值 |
| max_tokens | int | 最大生成长度 |
| seed | List[int] | 随机种子 |

```python
class Sampler:
    def __init__(self, gpu_device: int, ...):
        self._setup_sampling_algorithms()
    
    def sample(
        self,
        logits: torch.Tensor,
        sampling_params: SamplingParams
    ) -> torch.Tensor:
        # 应用温度
        logits = self._apply_temperature(logits, sampling_params.temperature)
        
        # Top-K 采样
        if sampling_params.top_k != -1:
            logits = self._apply_top_k(logits, sampling_params.top_k)
        
        # Top-P 采样
        if sampling_params.top_p < 1.0:
            logits = self._apply_top_p(logits, sampling_params.top_p)
        
        # 最终采样
        return self._sample(logits, sampling_params.seed)
```

资料来源：[vllm/v1/sample/sampler.py:50-200]()

## KVCacheManager 缓存管理

### 设计原理

KVCacheManager是V1引擎的KV缓存管理器，负责高效管理和复用GPU显存中的Key-Value缓存。

```mermaid
graph TD
    A[请求到达] --> B{检查现有缓存}
    B -->|命中| C[复用已有缓存]
    B -->|未命中| D[分配新缓存块]
    C --> E[追加新Token]
    D --> E
    E --> F[更新块状态]
    F --> G[等待下次调度]
    
    style C fill:#c8e6c9
    style D fill:#ffcdd2
```

### 缓存块管理

| 块类型 | 说明 | 管理方式 |
|--------|------|----------|
| 空闲块 | 未分配的缓存块 | 空闲链表 |
| 已占用块 | 当前被请求使用的块 | 引用计数 |
| 已回收块 | 请求完成后待回收的块 | 回收队列 |

```python
class KVCacheManager:
    def __init__(self, num_blocks: int, block_size: int, ...):
        self.num_blocks = num_blocks
        self.block_size = block_size
        self._free_blocks: Deque[int] = deque(range(num_blocks))
        self._block_mapping: Dict[str, List[int]] = {}
    
    def allocate(self, request_id: str, num_tokens: int) -> List[int]:
        """为请求分配缓存块"""
        num_blocks_needed = (num_tokens + self.block_size - 1) // self.block_size
        blocks = []
        for _ in range(num_blocks_needed):
            if not self._free_blocks:
                raise OutOfMemoryError("KV cache exhausted")
            blocks.append(self._free_blocks.popleft())
        self._block_mapping[request_id] = blocks
        return blocks
    
    def free(self, request_id: str) -> None:
        """释放请求的缓存块"""
        if request_id in self._block_mapping:
            self._free_blocks.extend(self._block_mapping.pop(request_id))
```

资料来源：[vllm/v1/core/kv_cache_manager.py:80-200]()

### 缓存分配策略

V1引擎采用以下缓存分配策略优化显存利用：

1. **预分配策略**：根据请求预估长度预分配缓存
2. **动态扩展**：运行时根据实际需求动态扩展缓存
3. **块复用**：同一模型层的不同请求共享块结构
4. **分层管理**：支持不同层的KV缓存独立管理

资料来源：[vllm/v1/core/kv_cache_manager.py:200-300]()

## BlockManager 块管理器

### 物理块管理

BlockManager负责底层物理块的管理，将逻辑缓存块映射到实际的GPU显存地址。

```python
class BlockManager:
    def __init__(
        self,
        num_gpu_blocks: int,
        num_cpu_blocks: int,
        block_size: int,
    ):
        self._gpu_block_table: Dict[int, torch.Tensor] = {}
        self._cpu_block_table: Dict[int, torch.Tensor] = {}
        self._block_allocator = BlockAllocator(...)
```

### 块状态转换

```mermaid
stateDiagram-v2
    [*] --> Free: 初始化
    Free --> Allocated: 分配
    Allocated --> Free: 释放
    Allocated --> Swapping: 换出到CPU
    Swapping --> Allocated: 换入到GPU
```

资料来源：[vllm/v1/core/block_manager.py:50-150]()

## Worker 计算单元

### Worker架构

Worker是V1引擎的执行单元，负责在GPU上执行实际的推理计算。

```mermaid
graph TD
    A[输入词元] --> B[Embedding层]
    B --> C[Transformer层]
    C --> D[计算Attention]
    D --> E[读取KV缓存]
    E --> C
    C --> F[Logits输出]
    F --> G[返回给Sampler]
```

### Worker基类

```python
class WorkerBase:
    def __init__(self, vllm_config: VllmConfig, ...):
        self.vllm_config = vllm_config
        self.model_runner = ModelRunner(...)
    
    def execute_model(
        self,
        seq_group_metadata_list: List[SequenceGroupMetadata],
        kv_caches: List[torch.Tensor],
    ) -> Optional[List[torch.Tensor]]:
        # 准备输入
        input_tokens = self._prepare_input(seq_group_metadata_list)
        
        # 执行模型推理
        output = self.model_runner.execute(input_tokens, kv_caches)
        
        return output
```

资料来源：[vllm/v1/worker/worker_base.py:50-150]()

## 请求处理流程

### 完整推理流程

```mermaid
sequenceDiagram
    participant Client as 客户端
    participant AsyncLLM as AsyncLLM
    participant Core as LLMCore
    participant Scheduler as Scheduler
    participant Worker as Worker
    participant Sampler as Sampler
    participant KVCache as KVCacheManager
    
    Client->>AsyncLLM: add_request()
    AsyncLLM->>Core: 提交请求
    Core->>Scheduler: 入队
    Scheduler->>KVCache: 分配缓存
    Scheduler->>Worker: 分发批次
    Worker->>Worker: GPU推理
    Worker-->>Sampler: Logits输出
    Sampler->>Sampler: 词元采样
    Sampler-->>KVCache: 更新缓存
    KVCache-->>Scheduler: 分配完成
    Scheduler-->>AsyncLLM: 调度结果
    AsyncLLM-->>Client: 输出流
```

### 多步推理循环

V1引擎支持多步推理（Multi-Step Decoding），在单次调度中执行多个推理步骤：

1. **步骤1**：执行Attention计算
2. **步骤2**：更新KV缓存
3. **步骤3**：执行采样
4. **步骤4**：判断是否继续

```python
for step in range(num_scheduler_steps):
    # 执行模型前向
    hidden_states = model(input_ids, kv_caches)
    
    # 计算logits
    logits = hidden_states @ lm_head.weight
    
    # 采样新token
    next_tokens = sampler.sample(logits)
    
    # 检查终止条件
    if self._should_stop(next_tokens):
        break
```

资料来源：[vllm/v1/engine/core.py:300-400]()

## 配置与优化

### 引擎配置选项

| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| model | str | 必填 | 模型路径或HuggingFace ID |
| tensor_parallel_size | int | 1 | 张量并行度 |
| gpu_memory_utilization | float | 0.9 | GPU显存利用率 |
| max_model_len | int | 8192 | 最大模型长度 |
| block_size | int | 16 | KV缓存块大小 |
| enable_prefix_caching | bool | True | 启用前缀缓存 |
| num_scheduler_steps | int | 1 | 调度器步数 |

### 性能优化建议

1. **调整GPU显存利用率**：根据模型大小调整，避免OOM
2. **优化块大小**：较大块减少碎片，较小块提高利用率
3. **启用前缀缓存**：对重复前缀的请求效果显著
4. **批量大小优化**：根据延迟和吞吐量需求调整

资料来源：[vllm/v1/engine/core.py:400-500]()

## 与V0引擎的对比

| 特性 | V0引擎 | V1引擎 |
|------|--------|--------|
| 架构模式 | 同步批量处理 | 异步流水线 |
| 缓存管理 | 静态分配 | 动态管理 |
| 调度策略 | 固定批次 | 自适应调度 |
| 扩展性 | 一般 | 模块化设计 |
| 多步推理 | 不支持 | 原生支持 |

V1引擎通过异步架构和精细化的资源管理，实现了更高的GPU利用率和更低的请求延迟。

## 总结

V1引擎架构代表了vLLM在推理优化领域的最新技术演进。通过异步设计、智能调度和高效缓存管理的协同优化，V1引擎能够充分利用现代GPU的并行计算能力，为大语言模型推理提供高性能、高吞吐量的解决方案。模块化的组件设计使得V1引擎具有良好的可扩展性和可维护性，便于后续功能扩展和性能优化。

---

<a id='page-engine-core'></a>

## 引擎核心模块

### 相关页面

相关主题：[架构概览](#page-arch-overview), [V1 引擎架构](#page-v1-engine)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [vllm/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/llm_engine.py)
- [vllm/engine/async_llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/async_llm_engine.py)
- [vllm/engine/protocol.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/protocol.py)
- [vllm/v1/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/engine/llm_engine.py)
- [vllm/entrypoints/cli/serve.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/serve.py)
- [vllm/entrypoints/cli/launch.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/launch.py)
- [vllm/entrypoints/cli/main.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/main.py)
</details>

# 引擎核心模块

## 概述

vLLM 的引擎核心模块是整个推理服务系统的核心组件，负责管理模型加载、请求调度、推理执行和结果返回等关键流程。引擎模块支持同步和异步两种运行模式，提供了面向不同应用场景的编程接口。

vLLM 引擎采用了分层架构设计，底层封装了高性能的推理内核，上层提供了灵活的调度策略和请求管理机制。引擎通过抽象接口与上层服务层解耦，同时通过适配器与底层硬件平台紧密集成。

引擎模块位于 `vllm/engine/` 目录下，主要包含以下核心组件：

| 组件 | 文件路径 | 职责 |
|------|----------|------|
| LLMEngine | `vllm/engine/llm_engine.py` | 同步推理引擎主类 |
| AsyncLLMEngine | `vllm/engine/async_llm_engine.py` | 异步推理引擎主类 |
| EngineProtocol | `vllm/engine/protocol.py` | 引擎通信协议定义 |
| V1 LLMEngine | `vllm/v1/engine/llm_engine.py` | V1版本引擎实现 |

资料来源：[vllm/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/llm_engine.py)

## 架构设计

### 整体架构

vLLM 引擎采用事件驱动的异步架构，核心模块之间通过协议接口进行通信。引擎接收来自 API 服务层的请求，经过调度器分配后交由推理内核执行，最终将结果返回给调用方。

```mermaid
graph TD
    subgraph "服务层"
        A[API Server] --> B[CLI/SDK]
    end
    
    subgraph "引擎层"
        C[AsyncLLMEngine] --> D[LLMEngine]
        D --> E[Scheduler]
        E --> F[Model Runner]
    end
    
    subgraph "内核层"
        G[CUDA Kernels] --> H[PagedAttention]
        F --> G
    end
    
    A --> C
    B --> C
```

资料来源：[vllm/entrypoints/cli/main.py:46-58](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/main.py)

### 双引擎模式

vLLM 支持 V0 和 V1 两套引擎实现，两者在架构和性能特性上有所不同：

| 特性 | V0 Engine | V1 Engine |
|------|----------|-----------|
| 调度策略 | 多种调度器可选 | 统一调度框架 |
| 内存管理 | 传统 KV Cache | PagedAttention |
| 异步支持 | 有限 | 原生异步支持 |
| 性能优化 | 成熟稳定 | 新一代优化 |

V1 引擎位于 `vllm/v1/engine/` 目录下，代表了 vLLM 的新一代架构设计。

资料来源：[vllm/v1/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/engine/llm_engine.py)

## 同步引擎 (LLMEngine)

### 类定义

`LLMEngine` 是 vLLM 的同步推理引擎主类，提供阻塞式的推理接口。该类负责初始化推理环境、管理模型权重、处理推理请求并返回结果。

```python
class LLMEngine:
    def __init__(
        self,
        model_config: ModelConfig,
        cache_config: CacheConfig,
        parallel_config: ParallelConfig,
        scheduler_config: SchedulerConfig,
        device_config: DeviceConfig,
        executor_class: Type[ExecutorBase],
        log_stats: bool = True,
        usage_context: UsageContext = UsageContext.LLM_CLASS,
    ) -> None:
```

### 核心方法

| 方法 | 参数 | 返回值 | 功能描述 |
|------|------|--------|----------|
| add_request | request_id, prompt, params | None | 添加推理请求 |
| step | - | List[Output] | 执行一步推理 |
| abort_request | request_id | None | 取消指定请求 |
| get_num_unfinished_requests | - | int | 获取未完成请求数 |

`step()` 方法是引擎的核心执行方法，每次调用会推进推理状态机，处理调度、内存分配、内核执行等操作。

资料来源：[vllm/engine/llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/llm_engine.py)

### 请求处理流程

```mermaid
sequenceDiagram
    participant Client as 客户端
    participant Engine as LLMEngine
    participant Scheduler as 调度器
    participant Runner as ModelRunner
    participant Kernel as CUDA Kernels

    Client->>Engine: add_request()
    Engine->>Scheduler: 排队请求
    loop 推理循环
        Engine->>Scheduler: step()
        Scheduler->>Runner: 分发批次
        Runner->>Kernel: 执行推理
        Kernel-->>Runner: 输出结果
        Runner-->>Scheduler: 收集输出
    end
    Engine-->>Client: 返回结果
```

## 异步引擎 (AsyncLLMEngine)

### 设计理念

`AsyncLLMEngine` 是 vLLM 的异步推理引擎，专为高性能 Web 服务设计。它基于事件循环实现非阻塞推理，能够同时处理大量并发请求。

异步引擎封装了底层同步引擎，通过 `asyncio` 协程提供非阻塞接口。这使得 vLLM 能够与 FastAPI、aiohttp 等异步 Web 框架无缝集成。

资料来源：[vllm/engine/async_llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/async_llm_engine.py)

### 核心接口

```python
class AsyncLLMEngine:
    async def add_request(
        self,
        request_id: str,
        prompt: PromptType,
        params: Optional[RequestParams] = None,
        arrival_time: Optional[float] = None,
    ) -> AsyncStream:
        """添加异步推理请求"""
```

异步引擎通过 `AsyncStream` 对象返回结果，支持流式输出。调用方可以通过 `async for` 语法逐token获取生成结果。

### 请求取消机制

异步引擎支持请求级别的取消操作。当客户端需要中止某个长时间运行的推理时，可以通过 `abort()` 方法通知引擎。

```python
async def abort(self, request_id: str) -> None:
    """取消指定请求"""
```

资料来源：[vllm/engine/async_llm_engine.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/async_llm_engine.py)

## 引擎协议 (EngineProtocol)

`EngineProtocol` 定义了引擎与外部组件通信的标准接口规范。该协议抽象了引擎的核心行为，确保不同实现之间的一致性。

```mermaid
graph LR
    subgraph "协议层"
        A[EngineProtocol] --> B[generate]
        A --> C[abort]
        A --> D[get_output]
    end
```

协议定义包括以下核心接口：

| 接口 | 方法签名 | 说明 |
|------|----------|------|
| generate | async generate(request) | 生成推理请求 |
| abort | abort(request_id) | 中止请求 |
| get_output | await output_event | 获取输出事件 |

资料来源：[vllm/engine/protocol.py](https://github.com/vllm-project/vllm/blob/main/vllm/engine/protocol.py)

## 配置管理

### 引擎参数

引擎初始化时需要传入多个配置对象，这些配置控制了推理行为的各个方面：

| 配置类 | 参数数量 | 主要功能 |
|--------|----------|----------|
| ModelConfig | 50+ | 模型架构、词汇表、量化配置 |
| CacheConfig | 10+ | KV Cache 内存管理策略 |
| ParallelConfig | 5+ | 多GPU并行配置 |
| SchedulerConfig | 10+ | 调度器行为参数 |
| DeviceConfig | 5+ | 硬件平台选择 |

### 命令行参数

引擎支持通过命令行参数进行配置，常用参数包括：

```bash
vllm serve Qwen/Qwen2.5-3B-Instruct \
    --tensor-parallel-size 2 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9
```

资料来源：[vllm/entrypoints/cli/serve.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/serve.py)

## 服务启动流程

### CLI 入口

vLLM 的服务通过命令行启动，主要入口流程如下：

```mermaid
flowchart LR
    A[vllm serve] --> B[main.py]
    B --> C[导入模块]
    C --> D[ServeSubcommand]
    D --> E[创建引擎]
    E --> F[启动服务]
```

CLI 入口位于 `vllm/entrypoints/cli/main.py`，负责解析命令行参数并分发到相应的子命令处理器。

资料来源：[vllm/entrypoints/cli/main.py:48-68](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/main.py)

### 引擎初始化

```python
def cmd(args: argparse.Namespace) -> None:
    # CLI 参数优先级高于默认值
    if hasattr(args, "model_tag") and args.model_tag is not None:
        args.model = args.model_tag

    # gRPC 模式
    if getattr(args, "grpc", False):
        from vllm.entrypoints.grpc_server import serve_grpc
        uvloop.run(serve_grpc(args))
        return

    # Headless 模式（无API服务器）
    if args.headless:
        args.api_server_count = 0
```

引擎支持多种运行模式，包括标准 HTTP 服务、gRPC 服务和 headless 模式。Headless 模式不启动 API 服务器，适用于分布式推理场景。

资料来源：[vllm/entrypoints/cli/serve.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/serve.py)

### Launch 组件

`vllm launch` 命令提供了组件级别的启动能力，支持快速启动特定的推理组件：

```bash
vllm launch <component> [options]
```

Launch 子系统采用插件化架构，新的组件可以通过继承 `LaunchSubcommandBase` 类注册到系统中。

资料来源：[vllm/entrypoints/cli/launch.py](https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/cli/launch.py)

## 调度器集成

### 调度策略

引擎内置多种调度策略，适用于不同的负载场景：

| 策略 | 适用场景 | 特点 |
|------|----------|------|
| FIFO | 批处理 | 简单高效 |
| Longest-Prefix | 前缀共享 | 优化解码共享 |
| 混合策略 | 通用 | 平衡吞吐和延迟 |

调度器通过 `SchedulerConfig` 进行配置，控制批次大小、超时时间、资源分配等关键参数。

### 资源分配

调度器负责管理 GPU 显存使用，通过 `gpu_memory_utilization` 参数控制用于 KV Cache 的显存比例。剩余显存用于模型权重和中间计算。

```python
# 显存分配示例
cache_config = CacheConfig(
    gpu_memory_utilization=0.9,
    block_size=16,
)
```

## 性能优化

### PagedAttention

vLLM 引擎采用 PagedAttention 技术管理 KV Cache，相比传统连续分配方式，显存利用率提升显著：

- 显存碎片减少 60%+
- 吞吐量提升 2-4 倍
- 支持更大的上下文长度

### CUDA 图

引擎支持 CUDA Graph 加速，减少内核启动开销。在 profiling 模式下，可以通过 `nsys` 工具分析 CUDA 图的执行效率：

```bash
nsys profile -t cuda -o run1 -f true \
    --cuda-graph-trace=node \
    vllm serve openai/gpt-oss-120b
```

资料来源：[tools/profiler/nsys_profile_tools/README.md](https://github.com/vllm-project/vllm/blob/main/tools/profiler/nsys_profile_tools/README.md)

## 使用示例

### 离线推理

```python
from vllm import LLM

llm = LLM(model="Qwen/Qwen2.5-3B-Instruct")
outputs = llm.generate("Hello, world!")
```

### 在线服务

```bash
# 启动服务
vllm serve Qwen/Qwen2.5-3B-Instruct \
    --tensor-parallel-size 2

# 发送请求
curl -X POST http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{"model": "Qwen/Qwen2.5-3B-Instruct", "messages": [{"role": "user", "content": "Hello!"}]}'
```

### 异步客户端

```python
from vllm.engine.async_llm_engine import AsyncLLMEngine

engine = AsyncLLMEngine.from_engine_args(engine_args)

async def generate():
    async for output in await engine.add_request("req-1", prompt, params):
        print(output)

asyncio.run(generate())
```

## 相关文档

- [快速开始指南](https://docs.vllm.ai/en/latest/getting_started/quickstart.html)
- [支持的模型列表](https://docs.vllm.ai/en/latest/models/supported_models.html)
- [量化配置](https://docs.vllm.ai/en/latest/features/quantization.html)
- [分布式推理](https://docs.vllm.ai/en/latest/distributed/summary.html)

---

<a id='page-paged-attention'></a>

## PagedAttention 与 KV 缓存管理

### 相关页面

相关主题：[注意力后端](#page-attention-backends), [V1 引擎架构](#page-v1-engine)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [docs/design/paged_attention.md](https://github.com/vllm-project/vllm/blob/main/docs/design/paged_attention.md)
- [csrc/attention/paged_attention_v1.cu](https://github.com/vllm-project/vllm/blob/main/csrc/attention/paged_attention_v1.cu)
- [csrc/attention/paged_attention_v2.cu](https://github.com/vllm-project/vllm/blob/main/csrc/attention/paged_attention_v2.cu)
- [vllm/v1/core/block_pool.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/core/block_pool.py)
- [vllm/v1/core/kv_cache_manager.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/core/kv_cache_manager.py)
</details>

# PagedAttention 与 KV 缓存管理

## 概述

PagedAttention 是 vLLM 核心推理引擎中的一项关键技术，旨在解决大语言模型（LLM）推理过程中 KV 缓存的内存管理问题。传统的 KV 缓存管理方式采用连续内存分配策略，导致内存碎片化严重、利用率低下。PagedAttention 借鉴了操作系统中虚拟内存和分页管理的思想，将 KV 缓存分割成固定大小的"页面"（blocks）进行管理，从而实现灵活的内存分配与共享。

vLLM 的 KV 缓存管理架构分为 V1 和 V2 两个版本，其中 V2 版本在性能和内存效率方面进行了进一步优化。管理机制主要由 `BlockPool` 和 `KVCacheManager` 两个核心组件协同工作，实现对 GPU 和 CPU 内存中 KV 缓存块的高效调度。

## PagedAttention 核心原理

### 分页管理机制

PagedAttention 将 KV 缓存划分为固定大小的块（blocks），每个块包含多个 token 的键值向量。与传统方法不同，这些块不需要在物理内存中连续存储，而是通过逻辑地址映射实现灵活访问。这种设计允许系统动态分配和释放缓存块，显著提高内存利用率。

```mermaid
graph TD
    A[请求序列] --> B[逻辑块分配]
    B --> C[块表映射]
    C --> D[物理块存储]
    D --> E[GPU KV Cache]
    
    F[块表] -->|映射| D
    G[新请求] -->|增量分配| B
    H[请求完成] -->|块回收| D
```

### V1 与 V2 版本对比

| 特性 | PagedAttention V1 | PagedAttention V2 |
|------|-------------------|-------------------|
| 块大小 | 固定16个token | 固定16个token |
| 内存布局 | 原始格式 | 扁平化布局 |
| 计算效率 | 标准计算 | 融合内核优化 |
| 支持前缀共享 | 有限支持 | 增强支持 |

## KV 缓存管理架构

### BlockPool 组件

`BlockPool` 负责管理物理内存中的 KV 缓存块池。它维护可用块的分配状态，支持 GPU 和 CPU 内存的双层管理。当新的推理请求到达时，`BlockPool` 负责分配空闲块；当请求完成时，相应块被回收至空闲池。

核心功能包括：

- 块预分配与动态分配策略
- GPU/CPU 块状态追踪
- 块引用计数管理
- 内存碎片整理

### KVCacheManager 组件

`KVCacheManager` 是更高层次的缓存管理器，负责逻辑块到物理块的映射管理。它维护请求的 KV 块分配记录，支持 block 级别的引用计数和共享机制。当多个请求共享相同的前缀时，`KVCacheManager` 可以实现块级别的共享，避免重复存储相同的 KV 数据。

```mermaid
graph LR
    A[推理请求] --> B[KVCacheManager]
    B --> C{前缀匹配?}
    C -->|是| D[共享已有块]
    C -->|否| E[分配新块]
    D --> F[BlockPool]
    E --> F
    F --> G[更新块表映射]
    G --> H[执行注意力计算]
```

## CUDA 内核实现

### PagedAttention V1 内核

V1 版本的内核实现位于 `csrc/attention/paged_attention_v1.cu`，采用标准的 CUDA 并行策略。内核函数 `paged_attention_v1` 处理块级别的注意力计算，每个线程块负责一个查询头（query head）的计算。内核通过共享内存缓存 KV 数据，减少全局内存访问延迟。

关键实现要点：

- 支持不同的块大小配置
- 实现了 KV 数据的分页读取
- 使用 warp 级别的归约操作提升性能
- 支持半精度（FP16/BF16）计算

### PagedAttention V2 内核

V2 版本位于 `csrc/attention/paged_attention_v2.cu`，在 V1 基础上进行了深度优化。主要改进包括：

1. **扁平化内存布局**：将 KV 数据按页面连续存储，提升缓存局部性
2. **融合内核设计**：将多个操作融合到单一内核中，减少内核启动开销
3. **向量化加载**：使用更大的向量宽度访问内存，提高带宽利用率
4. **动态块大小支持**：根据配置自适应调整计算策略

## 内存管理策略

### 分配策略

vLLM 采用混合分配策略处理 KV 缓存：

- **预分配策略**：在模型加载时预分配一定比例的 GPU 内存用于 KV 缓存
- **动态分配**：运行时根据实际需求动态分配新块
- **层级淘汰**：GPU 内存不足时，将部分块交换至 CPU 内存

### 共享机制

PagedAttention 支持不同请求间的 KV 块共享。当多个请求共享相同的前缀（如系统提示词）时，对应的 KV 块可以被多个请求引用，无需重复存储。共享通过引用计数实现，只有当引用计数归零时，块才会被释放。

```mermaid
graph TD
    A[请求1: 共享前缀] --> B[引用计数=2]
    C[请求2: 共享前缀] --> B
    
    B --> D[物理块P]
    D --> E[Token 0-15 KV数据]
    
    F[请求3: 独立前缀] --> G[引用计数=1]
    G --> H[物理块Q]
    H --> I[Token 0-15 KV数据]
```

## 配置与调优

### 关键配置参数

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `block_size` | 每个缓存块包含的 token 数量 | 16 |
| `gpu_memory_utilization` | 用于 KV 缓存的 GPU 内存比例 | 0.9 |
| `num_cpu_blocks` | CPU 缓存块数量 | 动态计算 |
| `num_gpu_blocks` | GPU 缓存块数量 | 动态计算 |

### 性能调优建议

1. 根据模型大小和可用显存调整 `gpu_memory_utilization`
2. 对于长上下文场景，适当增加块数量
3. 启用块共享以优化多请求场景的内存使用
4. 监控实际的块使用率以优化配置

## 技术优势

PagedAttention 相比传统连续分配方案具有显著优势：

- **内存效率提升**：通过分页管理和共享机制，内存利用率提高 2-4 倍
- **支持更长上下文**：灵活的内存管理允许处理更长的输入序列
- **高吞吐量**：优化的 CUDA 内核实现提供更高的计算吞吐量
- **弹性扩展**：支持动态调整缓存容量以适应不同工作负载

## 源码引用

本文档参考了以下 vLLM 源码文件：

- `docs/design/paged_attention.md` - PagedAttention 设计文档
- `csrc/attention/paged_attention_v1.cu` - V1 CUDA 内核实现
- `csrc/attention/paged_attention_v2.cu` - V2 CUDA 内核实现
- `vllm/v1/core/block_pool.py` - 块池管理模块
- `vllm/v1/core/kv_cache_manager.py` - KV 缓存管理器模块

---

<a id='page-attention-backends'></a>

## 注意力后端

### 相关页面

相关主题：[PagedAttention 与 KV 缓存管理](#page-paged-attention)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [docs/design/attention_backends.md](https://github.com/vllm-project/vllm/blob/main/docs/design/attention_backends.md)
- [vllm/v1/attention/backends/flash_attn.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/attention/backends/flash_attn.py)
- [vllm/v1/attention/backends/flashinfer.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/attention/backends/flashinfer.py)
- [vllm/v1/attention/selector.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/attention/selector.py)
- [vllm/v1/attention/ops/paged_attn.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/attention/ops/paged_attn.py)
</details>

# 注意力后端

## 概述

vLLM 的注意力后端（Attention Backends）是处理 Transformer 模型中自注意力机制的核心组件，负责高效计算 Query、Key、Value 之间的注意力分数。vLLM 采用模块化设计，支持多种注意力计算实现，通过后端抽象层提供统一的接口，使系统能够在不同硬件和性能需求下选择最优的实现方案。

注意力后端的主要职责包括：

- 计算多头自注意力（Multi-Head Attention）
- 支持带因果掩码的解码模式
- 处理键值缓存（KV Cache）的读写
- 支持分页注意力（Paged Attention）以优化内存使用

资料来源：[docs/design/attention_backends.md]()

## 架构设计

### 后端抽象层

vLLM 在 `vllm/v1/attention/backends/` 目录下实现了后端抽象层，每个后端都继承自统一的基类接口。这种设计允许在运行时根据硬件能力和配置选择合适的实现。

```mermaid
graph TD
    A[Attention Layer] --> B[Attention Backend Selector]
    B --> C[FlashAttention Backend]
    B --> D[FlashInfer Backend]
    B --> E[其他后端...]
    C --> F[CUDA FlashAttention]
    D --> G[FlashInfer Kernel]
```

### 核心接口定义

每个注意力后端需要实现以下核心方法：

| 方法名 | 功能描述 |
|--------|----------|
| `forward()` | 执行注意力前向计算 |
| `init_backend()` | 初始化后端资源 |
| `get_name()` | 返回后端名称标识 |
| `get_supported_dtypes()` | 获取支持的数据类型列表 |

资料来源：[vllm/v1/attention/backends/flash_attn.py:1-100]()

## 后端实现

### FlashAttention 后端

FlashAttention 是一种高效的注意力实现，通过分块计算和融合核（fused kernel）显著减少内存访问，提升计算吞吐量。

FlashAttention 后端的主要特性：

- 支持 FP16、BF16 数据类型
- 通过 CUDA 核心实现分块矩阵乘法
- 自动处理序列长度大于 GPU 限制的情况（通过 Flash Attention 2/3 的支持）
- 与 vLLM 的 Paged Attention 机制无缝集成

```python
# FlashAttention 后端核心逻辑示意
class FlashAttentionBackend:
    def __init__(self, num_heads: int, head_dim: int, scale: float):
        self.num_heads = num_heads
        self.head_dim = head_dim
        self.scale = scale
    
    def forward(self, query, key, value, cu_seqlen_q, cu_seqlen_k):
        # 使用 CUDA Flash Attention 内核计算
        return flash_attn_varlen_func(
            query, key, value,
            cu_seqlen_q, cu_seqlen_k,
            self.scale
        )
```

资料来源：[vllm/v1/attention/backends/flash_attn.py:1-150]()

### FlashInfer 后端

FlashInfer 是另一种高性能注意力库，特别针对推理场景优化，提供更低的延迟和更好的吞吐。

FlashInfer 后端的特点：

- 针对推理工作负载优化
- 支持增量解码（Incremental Decoding）
- 与 PagedAttention 深度集成
- 支持连续批处理（Continuous Batching）

```python
# FlashInfer 后端核心逻辑示意
class FlashInferBackend:
    def forward(self, query, key, value, paged_kv_cache, ...):
        # 使用 FlashInfer 核函数
        return flashinfer.attention(
            query, paged_kv_cache,
            ...
        )
```

资料来源：[vllm/v1/attention/backends/flashinfer.py:1-100]()

## 后端选择机制

### 动态选择器

vLLM 提供了智能的后端选择器（Attention Selector），根据系统环境和配置自动选择最优的注意力后端。选择逻辑位于 `vllm/v1/attention/selector.py` 文件中。

```mermaid
graph TD
    A[启动时检测] --> B{检查用户配置}
    B -->|明确指定| C[使用指定后端]
    B -->|未指定| D[检测 GPU 能力]
    D --> E{FlashInfer 可用?}
    E -->|是| F[优先选择 FlashInfer]
    E -->|否| G{FlashAttention 可用?}
    G -->|是| H[选择 FlashAttention]
    G -->|否| I[降级到基础实现]
```

### 选择优先级

| 优先级 | 后端 | 条件 |
|--------|------|------|
| 1 | FlashInfer | GPU 支持且已安装 |
| 2 | FlashAttention | CUDA 版本兼容 |
| 3 | 基础实现 | 无其他选项时的兜底方案 |

资料来源：[vllm/v1/attention/selector.py:1-80]()

## 分页注意力机制

### Paged Attention 概述

PagedAttention 是 vLLM 的核心创新之一，通过将 KV 缓存分页存储在 GPU 内存中，显著提高内存利用率，支持更大的并发批处理。

### 核心数据结构

```mermaid
graph LR
    A[逻辑 KV Cache] -->|映射| B[物理块]
    A[Query] --> C[注意力计算]
    B --> C
```

PagedAttention 使用块表（Block Table）来管理逻辑块到物理块的映射关系。每个请求的 KV 缓存被分割成固定大小的块（通常为 16 或 32 个 token），存储在非连续的物理内存位置。

### 块表结构

| 字段 | 类型 | 说明 |
|------|------|------|
| `physical_blocks` | List[int] | 物理块编号列表 |
| `num_blocks` | int | 块数量 |
| `block_size` | int | 每个块的 token 数量 |

资料来源：[vllm/v1/attention/ops/paged_attn.py:1-120]()

## 配置与使用

### 命令行配置

用户可以通过命令行参数指定注意力后端：

```bash
vllm serve <model_name> --attention-backend flashinfer
```

支持的参数值：
- `auto` - 自动选择最优后端（默认）
- `flash_attn` - 强制使用 FlashAttention
- `flashinfer` - 强制使用 FlashInfer

### 编程接口配置

在 Python 代码中配置注意力后端：

```python
from vllm import LLM, SamplingParams

llm = LLM(
    model="Qwen/Qwen2.5-3B-Instruct",
    attention_backend="flashinfer"  # 指定后端
)
```

### 环境变量

| 环境变量 | 作用 |
|----------|------|
| `VLLM_ATTENTION_BACKEND` | 覆盖默认后端选择 |

## 性能特性对比

| 特性 | FlashAttention | FlashInfer |
|------|-----------------|------------|
| 首次 token 延迟 | 中等 | 低 |
| 解码吞吐 | 高 | 更高 |
| 内存效率 | 高 | 极高 |
| 连续批处理 | 支持 | 深度优化 |
| 适用场景 | 通用推理 | 生产级推理 |

## 扩展新的注意力后端

如需为 vLLM 添加新的注意力后端，需要：

1. 在 `vllm/v1/attention/backends/` 下创建新的 Python 模块
2. 实现 `AttentionBackend` 基类定义的所有接口
3. 在 `selector.py` 中注册新的后端和选择逻辑
4. 在配置选项中添加新后端的支持

```python
# 新后端模板
class NewAttentionBackend(AttentionBackend):
    def __init__(self, num_heads: int, head_dim: int, scale: float):
        self.num_heads = num_heads
        self.head_dim = head_dim
        self.scale = scale
    
    @staticmethod
    def get_name() -> str:
        return "new_backend"
    
    @staticmethod
    def get_supported_dtypes() -> List[torch.dtype]:
        return [torch.float16, torch.bfloat16]
    
    def forward(self, ...):
        # 实现注意力计算
        pass
```

## 注意事项

- 确保 GPU 驱动和 CUDA 版本与所选后端兼容
- FlashInfer 后端需要单独安装：`pip install flashinfer`
- 在多 GPU 场景下，后端选择需要考虑 NCCL 通信开销
- 某些特殊模型架构可能需要特定后端才能正常工作

---

<a id='page-quantization'></a>

## 量化支持

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [vllm/model_executor/layers/quantization/fp8.py](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/quantization/fp8.py)
- [vllm/model_executor/layers/quantization/gptq.py](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/quantization/gptq.py)
- [vllm/model_executor/layers/quantization/awq.py](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/quantization/awq.py)
- [vllm/model_executor/layers/quantization/gguf.py](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/quantization/gguf.py)
- [vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors.py](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors.py)
- [examples/basic/offline_inference/README.md](https://github.com/vllm-project/vllm/blob/main/examples/basic/offline_inference/README.md)
- [csrc/quantization](https://github.com/vllm-project/vllm/blob/main/csrc/quantization)
</details>

# 量化支持

## 概述

vLLM 的量化支持模块位于 `vllm/model_executor/layers/quantization/` 目录下，提供多种权重量化方案以降低模型内存占用和提升推理效率。该模块实现了统一的量化接口规范，支持 FP8、GPTQ、AWQ、GGUF 和 Compressed Tensors 等主流量化格式。

量化层的核心设计采用策略模式（Strategy Pattern），通过抽象基类定义标准接口，不同量化算法作为独立实现类存在。这种架构允许用户通过 `--quantization` 参数灵活选择量化方案，同时保持核心推理逻辑的一致性。

---

## 支持的量化格式

### 量化格式对比表

| 量化格式 | 类型 | 精度损失 | 加速效果 | 使用场景 |
|---------|------|---------|---------|---------|
| FP8 | 动态量化 | 低 | 中等 | 通用推理，适合 Hopper/Ada 架构 |
| GPTQ | 静态量化 | 中等 | 高 | 4-bit 量化，GPU 部署 |
| AWQ | 静态量化 | 低 | 高 | 4-bit 量化，自动权重排序 |
| GGUF | 静态量化 | 可调 | 高 | CPU/GPU 混合推理 |
| Compressed Tensors | 通用格式 | 可调 | 依赖实现 | 高度自定义的压缩方案 |

---

## 架构设计

### 模块结构

```
vllm/model_executor/layers/quantization/
├── __init__.py
├── fp8.py              # FP8 量化实现
├── gptq.py             # GPTQ 量化实现
├── awq.py              # AWQ 量化实现
├── gguf.py             # GGUF 量化实现
├── compressed_tensors/ # Compressed Tensors 量化实现
│   └── compressed_tensors.py
└── utils.py            # 量化工具函数
```

### 类层次结构

```mermaid
graph TD
    A[QuantizationConfig] --> B[FP8Config]
    A --> C[GPTQConfig]
    A --> D[AWQConfig]
    A --> E[GGUFConfig]
    A --> F[CompressedTensorsConfig]
    
    G[QuantizationMethods] --> H[FP8Methods]
    G --> I[GPTQMethods]
    G --> J[AWQMethods]
    G --> K[GGUFMethods]
    G --> L[CompressedTensorsMethods]
```

---

## FP8 量化

### 概述

FP8（8-bit Floating Point）量化是一种混合精度方案，在 H100/H200 等新架构 GPU 上可获得显著加速。vLLM 支持 FP8_E4M3 和 FP8_E5M2 两种格式。

### 核心实现

FP8 量化模块（`vllm/model_executor/layers/quantization/fp8.py`）实现了以下关键功能：

- **动态范围计算**：根据权重分布自动确定缩放因子
- **E4M3/E5M2 支持**：可配置 FP8 格式
- **Kernel 优化**：利用 TensorCore 进行高效计算

### 配置参数

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| fp8_format | str | "hybrid" | 量化格式："fp8_e4m3fn" 或 "fp8_e5m2" |
| activation_scheme | str | "dynamic" | 激活值量化策略 |

---

## GPTQ 量化

### 概述

GPTQ（Generative Pretrained Transformer Quantization）是一种 Post-Training Quantization（PTQ）方法，支持 4-bit 权重量化，显著降低显存占用。

### 核心实现

GPTQ 量化模块（`vllm/model_executor/layers/quantization/gptq.py`）包含：

- **分组量化**：将权重分组处理，每组独立的缩放因子和零点
- **GPTQ 校准**：使用校准数据集确定最优量化参数
- **高度优化的 CUDA Kernel**：针对批量推理优化

### 模型加载

使用 GPTQ 量化模型时，需要指定量化位宽：

```bash
vllm serve <model_path> --quantization gptq --quantization_param_path <gptq_params.json>
```

---

## AWQ 量化

### 概述

AWQ（Activation-Aware Weight Quantization）是一种改进的权重量化方案，通过分析激活值分布来选择重要权重进行保护，降低精度损失。

### 核心实现

AWQ 量化模块（`vllm/model_executor/layers/quantization/awq.py`）实现：

- **重要性权重排序**：根据激活值分布识别关键权重
- **混合精度策略**：对重要权重使用更高精度
- **自动平滑因子计算**：减少量化误差

---

## GGUF 量化

### 概述

GGUF 是 llama.cpp 项目开发的量化格式，vLLM 通过 GGUF 量化模块（`vllm/model_executor/layers/quantization/gguf.py`）提供原生支持。GGUF 支持多种量化位宽（Q2_K、Q4_0、Q4_K、Q5_K、Q6_K、Q8_0 等），用户可以通过 `repo_id:quant_type` 格式直接从 HuggingFace 加载量化模型。

### 使用方式

```bash
python examples/basic/offline_inference/generate.py \
    --model unsloth/Qwen3-0.6B-GGUF:Q4_K_M \
    --tokenizer Qwen/Qwen3-0.6B
```

### GGUF 量化类型

| 类型 | 位宽 | 内存节省 | 精度 |
|------|------|---------|------|
| Q2_K | 2-bit | ~75% | 较低 |
| Q4_0 | 4-bit | ~60% | 中等 |
| Q4_K | 4-bit | ~60% | 较好 |
| Q5_K | 5-bit | ~50% | 良好 |
| Q6_K | 6-bit | ~40% | 优秀 |
| Q8_0 | 8-bit | ~20% | 几乎无损 |

---

## Compressed Tensors 量化

### 概述

Compressed Tensors 是一个通用的压缩格式框架，允许高度自定义的量化方案，支持非均匀量化和结构化稀疏。

### 核心实现

`vllm/model_executor/layers/quantization/compressed_tensors/compressed_tensors.py` 模块提供：

- **动态压缩方案**：支持任意量化策略
- **元数据管理**：存储压缩所需的元信息
- **混合精度组合**：支持不同层使用不同精度

---

## CUDA Kernel 实现

### 量化计算位置

量化相关的 CUDA Kernel 实现位于 `csrc/quantization/` 目录下，包含：

- FP8 矩阵乘法 kernel
- GPTQ 反量化 kernel
- AWQ 量化/反量化 kernel
- GGUF 解压缩 kernel

### 优化策略

```mermaid
graph LR
    A[模型权重] --> B[量化压缩]
    B --> C[存储/传输]
    C --> D[推理时反量化]
    D --> E[FP32/FP16 计算]
    E --> F[输出]
```

---

## 使用示例

### 命令行使用

```bash
# 启动量化模型服务
vllm serve meta-llama/Llama-2-7b-hf --quantization fp8

# 启动 GGUF 量化模型
vllm serve mradermacher/llama-2-7b-chat-GGUF:Q4_K_M
```

### Python API 使用

```python
from vllm import LLM

# 加载量化模型
llm = LLM(
    model="meta-llama/Llama-2-7b-hf",
    quantization="gptq"
)

# 生成
outputs = llm.generate(["Hello, world!"])
```

---

## 注意事项

1. **硬件兼容性**：FP8 需要 Hopper/Ada 架构 GPU
2. **精度验证**：建议在生产环境前进行精度基准测试
3. **混合量化**：同一模型可对不同层使用不同量化方案
4. **量化校准**：静态量化需要代表性数据集进行校准

---

## 参考资料

- vLLM 官方文档：https://docs.vllm.ai/en/latest/
- 量化配置源码：`vllm/model_executor/layers/quantization/`
- CUDA 实现：`csrc/quantization/`

---

<a id='page-speculative-decoding'></a>

## 推测解码

### 相关页面

相关主题：[V1 引擎架构](#page-v1-engine)

# 推测解码

> **注意**: 当前检索到的上下文内容中未包含推测解码相关的源码文件。以下文档是基于 vLLM 项目中推测解码功能的通用技术知识构建，具体的 API 参数、配置选项和行为细节需要参考实际源码文件进行验证。

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [docs/features/speculative_decoding/README.md](https://github.com/vllm-project/vllm/blob/main/docs/features/speculative_decoding/README.md)
- [vllm/v1/spec_decode/draft_model.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/spec_decode/draft_model.py)
- [vllm/v1/spec_decode/eagle.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/spec_decode/eagle.py)
- [vllm/v1/spec_decode/ngram_proposer.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/spec_decode/ngram_proposer.py)
- [vllm/v1/spec_decode/metrics.py](https://github.com/vllm-project/vllm/blob/main/vllm/v1/spec_decode/metrics.py)
- [vllm/config/speculative.py](https://github.com/vllm-project/vllm/blob/main/vllm/config/speculative.py)

</details>

## 概述

推测解码（Speculative Decoding）是 vLLM 中用于加速大语言模型推理的一种技术。该技术通过使用一个轻量级的"草稿模型"（Draft Model）提前生成多个候选 token，然后由原始的目标模型（Target Model）并行验证这些候选 token，从而减少自回归生成的顺序等待时间。

### 核心价值

- **降低延迟**: 通过并行验证减少生成 token 的平均等待时间
- **保持输出质量**: 验证机制确保最终输出与标准自回归解码完全一致
- **灵活的加速策略**: 支持多种草稿模型和提议策略

## 工作原理

推测解码的核心思想是将自回归解码过程中的顺序计算转换为"生成-验证"两阶段模式：

1. **提议阶段（Proposal）**: 草稿模型快速生成多个候选 token
2. **验证阶段（Verification）**: 目标模型批量验证这些候选 token 的正确性

```mermaid
graph TD
    A[输入 Prompt] --> B[草稿模型提议]
    B --> C[生成候选 Token 序列]
    C --> D[目标模型并行验证]
    D --> E{验证结果}
    E -->|全部正确| F[接受候选序列]
    E -->|部分错误| G[回退到首个错误位置]
    F --> H[继续下一轮]
    G --> I[修正后继续生成]
    H --> B
    I --> B
```

### 验证机制

目标模型对草稿模型生成的每个 token 进行验证。只有通过验证的 token 才会被接受为最终输出。如果某个 token 验证失败，系统会回退到该位置，使用目标模型生成的结果替换草稿模型的错误预测。

## 架构设计

### 核心组件

| 组件 | 职责 | 源码位置 |
|------|------|----------|
| 推测解码配置 | 管理推测解码相关参数 | `vllm/config/speculative.py` |
| 草稿模型接口 | 定义草稿模型的标准接口 | `vllm/v1/spec_decode/draft_model.py` |
| 提议器实现 | 具体实现不同类型的提议策略 | `vllm/v1/spec_decode/` |
| 指标收集 | 跟踪推测解码性能指标 | `vllm/v1/spec_decode/metrics.py` |

### 提议策略类型

vLLM 支持多种推测解码提议策略：

1. **Ngram 提议器（Ngram Proposer）**
   - 基于 n-gram 统计的简单提议策略
   - 无需额外训练模型
   - 适用于快速原型验证

2. **EAGLE 提议器**
   - 使用自回归方式生成候选 token
   - 可配合小型语言模型使用
   - 支持更复杂的语义预测

3. **自定义提议器**
   - 通过插件机制扩展
   - 支持用户自定义草稿模型

## 配置参数

推测解码的主要配置参数定义在 `vllm/config/speculative.py` 中：

| 参数 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| `speculative_model` | str | 草稿模型的名称或路径 | - |
| `num_speculative_tokens` | int | 每轮提议的 token 数量 | 1 |
| `speculative_draft_tensor_parallel_size` | int | 草稿模型的张量并行大小 | 1 |
| `speculative_disable_by_num_cached_sequences` | int | 缓存序列数超过此值时禁用推测 | - |

## 使用方法

### 命令行启动

使用 `vllm serve` 命令启动带推测解码的服务：

```bash
vllm serve <model_name> \
    --speculative-model <draft_model_name> \
    --num-speculative-tokens 5
```

### Python API

```python
from vllm import LLM

llm = LLM(
    model="meta-llama/Llama-2-70b-chat-hf",
    speculative_model="meta-llama/Llama-2-7b-chat-hf",
    num_speculative_tokens=5,
    tensor_parallel_size=2
)
```

## 性能指标

推测解码的效率通过以下指标衡量：

| 指标 | 说明 |
|------|------|
| 接受率 | 草稿模型生成的 token 被目标模型接受的比例 |
| 加速比 | 推测解码相对于标准自回归解码的速度提升 |
| Token 吞吐量 | 每秒处理的 token 数量 |

这些指标由 `vllm/v1/spec_decode/metrics.py` 模块收集和计算。

## 限制与注意事项

1. **GPU 内存**: 草稿模型会占用额外的 GPU 显存
2. **接受率依赖**: 加速效果高度依赖于草稿模型与目标模型输出的一致性
3. **不支持的场景**: 某些特殊的采样参数（如某些类型的 logits warper）可能与推测解码不兼容
4. **分布式部署**: 草稿模型和目标模型的并行策略需要协调配置

## 相关文档

- [推测解码功能文档](https://docs.vllm.ai/en/latest/features/speculative_decoding.html)
- [vLLM 官方文档](https://docs.vllm.ai)

---

<a id='page-parallelism'></a>

## 分布式并行策略

### 相关页面

相关主题：[架构概览](#page-arch-overview)

<details>
<summary>相关源码文件</summary>

以下源码文件用于生成本页说明：

- [docs/serving/parallelism_scaling.md](https://github.com/vllm-project/vllm/blob/main/docs/serving/parallelism_scaling.md)
- [vllm/distributed/parallel_state.py](https://github.com/vllm-project/vllm/blob/main/vllm/distributed/parallel_state.py)
- [vllm/distributed/device_communicators/cuda_communicator.py](https://github.com/vllm-project/vllm/blob/main/vllm/distributed/device_communicators/cuda_communicator.py)
- [vllm/config/parallel.py](https://github.com/vllm-project/vllm/blob/main/vllm/config/parallel.py)
- [vllm/distributed/elastic_ep](https://github.com/vllm-project/vllm/blob/main/vllm/distributed/elastic_ep)
</details>

# 分布式并行策略

## 概述

vLLM 是一个高性能的大语言模型推理服务框架，支持多种分布式并行策略以满足不同规模和场景的部署需求。这些并行策略包括数据并行（Data Parallelism）、张量并行（Tensor Parallelism）、流水线并行（Pipeline Parallelism）以及它们的组合形式。通过灵活配置这些并行策略，vLLM 能够有效利用多 GPU 和多节点集群的计算资源，实现大规模模型的高效推理。

vLLM 的分布式并行策略建立在 PyTorch 分布式通信原语之上，并针对 LLM 推理的工作负载特征进行了深度优化。其核心设计理念是在保证推理正确性的前提下，最大化 GPU 利用率和吞吐量，同时最小化通信开销。

## 核心并行模式

### 张量并行（Tensor Parallelism, TP）

张量并行是一种将模型的单个层的权重矩阵沿行或列方向切分到多个 GPU 上的技术。在 LLM 中，这通常应用于注意力机制和前馈网络层。每个 GPU 持有完整输入的一部分和部分权重，通过集合通信操作（如 AllReduce）聚合结果。

张量并行的主要优势在于能够将单个层的计算分布到多个设备上，从而支持超出单个 GPU 显存限制的模型。vLLM 采用了 Megatron-LM 风格的张量并行实现，支持 2、4、8 等多种并行度配置。

### 流水线并行（Pipeline Parallelism, PP）

流水线并行将模型的不同层组分配到不同的 GPU 上。每个 GPU 负责模型的一个连续子集，形成计算流水线。这种策略特别适合多节点场景，能够有效减少节点间的通信开销。

vLLM 支持微批处理（micro-batching）来提高流水线并行下的 GPU 利用率，减少流水线气泡（pipeline bubble）。流水线并行通常与张量并行结合使用，形成 3D 并行（TP + PP + DP）。

### 数据并行（Data Parallelism, DP）

数据并行是最简单的并行策略，每个 GPU 持有模型权重的完整副本，独立处理不同的输入批次。vLLM 的数据并行实现支持多种负载均衡模式，包括外部负载均衡（External LB）和混合负载均衡（Hybrid LB）。

在数据并行模式下，vLLM 通过分片 KV 缓存管理来支持多副本推理，提高系统吞吐量。数据并行可以与张量并行和流水线并行叠加使用，形成混合并行配置。

## 分布式并行配置

### 并行配置参数

| 参数 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| `tensor-parallel-size` | int | 张量并行度 | 1 |
| `pipeline-parallel-size` | int | 流水线并行度 | 1 |
| `data-parallel-size` | int | 数据并行度 | 1 |
| `data-parallel-external-lb` | bool | 启用外部负载均衡 | False |
| `data-parallel-hybrid-lb` | bool | 启用混合负载均衡 | False |
| `data-parallel-start-rank` | int | 混合负载均衡起始节点 | 0 |

### 启动命令示例

```bash
vllm serve Qwen/Qwen2.5-3B-Instruct \
    --tensor-parallel-size 4 \
    --pipeline-parallel-size 2 \
    --data-parallel-size 2
```

上述命令配置了 4x2x2 = 16 GPU 的混合并行拓扑，适用于大规模模型部署场景。

## 架构设计

### 分布式并行状态管理

vLLM 通过 `parallel_state.py` 模块管理分布式并行状态。该模块负责初始化和协调各并行维度的通信组，建立 GPU 之间的拓扑关系，并提供进程组查询接口。

```mermaid
graph TD
    A[全局初始化] --> B[创建通信组]
    B --> C[张量并行组 TP]
    B --> D[流水线并行组 PP]
    B --> E[数据并行组 DP]
    C --> F[AllReduce 通信]
    D --> G[流水线调度]
    E --> H[数据分片]
    F --> I[聚合结果]
    G --> I
    H --> I
```

### 设备通信层

`cuda_communicator.py` 实现了针对 NVIDIA GPU 优化的集合通信操作。该模块封装了 PyTorch 分布式通信原语，提供了高效的 AllReduce、Broadcast、AllGather 等操作实现。通信层针对 LLM 推理的通信模式进行了优化，最小化了流水线气泡和通信延迟。

### 弹性并行（Elastic EP）

vLLM 支持弹性并行（Elastic EP），允许在运行时动态调整数据并行组的规模。这一特性通过 `vllm/distributed/elastic_ep` 模块实现，提供了容错能力和弹性扩展能力。当集群中的部分节点发生故障或新增时，系统能够自动重新配置数据并行组，无需中断服务。

## 分片 KV 缓存管理

分片 KV 缓存是 vLLM 实现高效数据并行的关键技术之一。在传统的数据并行中，所有副本需要共享或复制 KV 缓存，导致显存浪费或同步开销。vLLM 通过将 KV 缓存按注意力头维度分片，让每个数据并行副本持有 KV 缓存的不同部分。

这种方法的优势在于：

- 减少每个副本的 KV 缓存显存占用
- 支持更大的批量处理
- 通过 PagedAttention 技术实现细粒度的显存管理
- 支持 Prefix Caching 以加速重复前缀的推理

## 通信优化

### CUDA 通信优化

vLLM 的设备通信层利用 CUDA 的高效内存复制和集合操作，减少 GPU 间通信延迟。通信操作与计算重叠执行，通过异步执行和流水线技术隐藏通信开销。

### 流水线气泡优化

在流水线并行中，vLLM 采用微批处理策略来减少流水线气泡。通过将每个批次划分为多个微批次，系统能够更充分地利用流水线各阶段的 GPU 资源，提高整体吞吐量。

## 监控与调优

### 性能指标

vLLM 提供了丰富的分布式并行性能指标，包括：

| 指标 | 说明 |
|------|------|
| GPU 利用率 | 各 GPU 的计算利用率 |
| 通信带宽 | GPU 间通信的实际带宽 |
| 流水线气泡率 | 流水线空闲时间占比 |
| 吞吐量 | 每秒处理的请求数 |

### 分布式追踪

vLLM 支持 OpenTelemetry 分布式追踪，能够追踪请求在多个 GPU 和节点间的处理路径。这对于诊断分布式并行下的性能瓶颈和通信问题非常重要。

配置示例：

```bash
opentelemetry-instrument vllm serve facebook/opt-125m
```

## 最佳实践

### 并行度选择

- **单节点多卡**：推荐使用张量并行（TP=2/4/8），根据显存和模型大小调整
- **多节点部署**：推荐 TP × PP × DP 混合并行，充分利用节点内高带宽和节点间网络
- **大批量推理**：增加数据并行度，提高系统吞吐量

### 配置建议

- 确保 NVLink 连接用于张量并行通信
- 流水线并行的节点间网络带宽应足够高
- 数据并行适用于无状态或状态可分片的模型

## 参考资料

- 张量并行实现：[vllm/distributed/parallel_state.py]()
- 设备通信层：[vllm/distributed/device_communicators/cuda_communicator.py]()
- 并行配置：[vllm/config/parallel.py]()
- 弹性并行：[vllm/distributed/elastic_ep]()
- 官方文档：[docs/serving/parallelism_scaling.md]()

---

---

## Doramagic 踩坑日志

项目：vllm-project/vllm

摘要：发现 21 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：安装坑 - 来源证据：[Bug]: Qwen3.5-397B-NVFP4 Disagg accuracy gsm8k collapses with async scheduling。

## 1. 安装坑 · 来源证据：[Bug]: Qwen3.5-397B-NVFP4 Disagg accuracy gsm8k collapses with async scheduling

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：[Bug]: Qwen3.5-397B-NVFP4 Disagg accuracy gsm8k collapses with async scheduling
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_1a71634c530044a68b9160080d55de0a | https://github.com/vllm-project/vllm/issues/42182 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 2. 安装坑 · 来源证据：[Bug]: vLLM v1 with prefix caching: first request differs from subsequent identical requests at temperature=0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：[Bug]: vLLM v1 with prefix caching: first request differs from subsequent identical requests at temperature=0
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_58327949a4524ed082bd189b53f713a1 | https://github.com/vllm-project/vllm/issues/40896 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 3. 安装坑 · 来源证据：[Usage]: How to proactively clear CPU-resident memory left behind by unloaded LoRA adapters after calling `/v1/unload_l…

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：[Usage]: How to proactively clear CPU-resident memory left behind by unloaded LoRA adapters after calling `/v1/unload_lora_adapter`?
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_fb1461834fe34049bd05182574d3e5e5 | https://github.com/vllm-project/vllm/issues/42207 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 4. 安装坑 · 来源证据：v0.18.1

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安装相关的待验证问题：v0.18.1
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_317a03f9de4e459f9be42064c7318b2c | https://github.com/vllm-project/vllm/releases/tag/v0.18.1 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 5. 能力坑 · 来源证据：[Feature]: Qwen3.5-Moe LoRA Support (experts)

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个能力理解相关的待验证问题：[Feature]: Qwen3.5-Moe LoRA Support (experts)
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_2d068d43c6654f3cab6b48bf98dad116 | https://github.com/vllm-project/vllm/issues/40005 | 来源类型 github_issue 暴露的待验证使用条件。

## 6. 能力坑 · 能力判断依赖假设

- 严重度：medium
- 证据强度：source_linked
- 发现：README/documentation is current enough for a first validation pass.
- 对用户的影响：假设不成立时，用户拿不到承诺的能力。
- 建议检查：将假设转成下游验证清单。
- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。
- 证据：capability.assumptions | github_repo:599547518 | https://github.com/vllm-project/vllm | README/documentation is current enough for a first validation pass.

## 7. 运行坑 · 来源证据：v0.20.2

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个运行相关的待验证问题：v0.20.2
- 对用户的影响：可能增加新用户试用和生产接入成本。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_ecf37722dff6494c82b384225e34bcb0 | https://github.com/vllm-project/vllm/releases/tag/v0.20.2 | 来源类型 github_release 暴露的待验证使用条件。

## 8. 维护坑 · 维护活跃度未知

- 严重度：medium
- 证据强度：source_linked
- 发现：未记录 last_activity_observed。
- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。
- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。
- 证据：evidence.maintainer_signals | github_repo:599547518 | https://github.com/vllm-project/vllm | last_activity_observed missing

## 9. 安全/权限坑 · 下游验证发现风险项

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：下游已经要求复核，不能在页面中弱化。
- 建议检查：进入安全/权限治理复核队列。
- 防护动作：下游风险存在时必须保持 review/recommendation 降级。
- 证据：downstream_validation.risk_items | github_repo:599547518 | https://github.com/vllm-project/vllm | no_demo; severity=medium

## 10. 安全/权限坑 · 存在安全注意事项

- 严重度：medium
- 证据强度：source_linked
- 发现：No sandbox install has been executed yet; downstream must verify before user use.
- 对用户的影响：用户安装前需要知道权限边界和敏感操作。
- 建议检查：转成明确权限清单和安全审查提示。
- 防护动作：安全注意事项必须面向用户前置展示。
- 证据：risks.safety_notes | github_repo:599547518 | https://github.com/vllm-project/vllm | No sandbox install has been executed yet; downstream must verify before user use.

## 11. 安全/权限坑 · 存在评分风险

- 严重度：medium
- 证据强度：source_linked
- 发现：no_demo
- 对用户的影响：风险会影响是否适合普通用户安装。
- 建议检查：把风险写入边界卡，并确认是否需要人工复核。
- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。
- 证据：risks.scoring_risks | github_repo:599547518 | https://github.com/vllm-project/vllm | no_demo; severity=medium

## 12. 安全/权限坑 · 来源证据：[Bug]: ngram speculative decoding changes greedy output on Qwen3-0.6B / A100

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：[Bug]: ngram speculative decoding changes greedy output on Qwen3-0.6B / A100
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源问题仍为 open，Pack Agent 需要复核是否仍影响当前版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_9ce279a037934e8085332120bfdaca86 | https://github.com/vllm-project/vllm/issues/41758 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 13. 安全/权限坑 · 来源证据：v0.16.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.16.0
- 对用户的影响：可能影响升级、迁移或版本选择。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_57ff11ff995a4809a33a38ff7504a5ef | https://github.com/vllm-project/vllm/releases/tag/v0.16.0 | 来源类型 github_release 暴露的待验证使用条件。

## 14. 安全/权限坑 · 来源证据：v0.17.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.17.0
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_4592ced4fde24aa9aa808caa40e25b84 | https://github.com/vllm-project/vllm/releases/tag/v0.17.0 | 来源类型 github_release 暴露的待验证使用条件。

## 15. 安全/权限坑 · 来源证据：v0.18.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.18.0
- 对用户的影响：可能阻塞安装或首次运行。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_7ca09904f8164e94a3a1bc489d32d1ff | https://github.com/vllm-project/vllm/releases/tag/v0.18.0 | 来源类型 github_release 暴露的待验证使用条件。

## 16. 安全/权限坑 · 来源证据：v0.19.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.19.0
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_cdb0d7a7f491474da7b93583ec643c00 | https://github.com/vllm-project/vllm/releases/tag/v0.19.0 | 来源讨论提到 docker 相关条件，需在安装/试用前复核。

## 17. 安全/权限坑 · 来源证据：v0.19.1

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.19.1
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_8c2ec43cf6f147d49f80f22bcd199e8f | https://github.com/vllm-project/vllm/releases/tag/v0.19.1 | 来源类型 github_release 暴露的待验证使用条件。

## 18. 安全/权限坑 · 来源证据：v0.20.0

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.20.0
- 对用户的影响：可能影响升级、迁移或版本选择。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_c867dafed19f4b97978d637aea4c7308 | https://github.com/vllm-project/vllm/releases/tag/v0.20.0 | 来源讨论提到 python 相关条件，需在安装/试用前复核。

## 19. 安全/权限坑 · 来源证据：v0.20.1

- 严重度：medium
- 证据强度：source_linked
- 发现：GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题：v0.20.1
- 对用户的影响：可能影响授权、密钥配置或安全边界。
- 建议检查：来源显示可能已有修复、规避或版本变化，说明书中必须标注适用版本。
- 防护动作：不得脱离来源链接放大为确定性结论；需要标注适用版本和复核状态。
- 证据：community_evidence:github | cevd_dc6a717c695b47838899da8c9791f907 | https://github.com/vllm-project/vllm/releases/tag/v0.20.1 | 来源类型 github_release 暴露的待验证使用条件。

## 20. 维护坑 · issue/PR 响应质量未知

- 严重度：low
- 证据强度：source_linked
- 发现：issue_or_pr_quality=unknown。
- 对用户的影响：用户无法判断遇到问题后是否有人维护。
- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。
- 防护动作：issue/PR 响应未知时，必须提示维护风险。
- 证据：evidence.maintainer_signals | github_repo:599547518 | https://github.com/vllm-project/vllm | issue_or_pr_quality=unknown

## 21. 维护坑 · 发布节奏不明确

- 严重度：low
- 证据强度：source_linked
- 发现：release_recency=unknown。
- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。
- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。
- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。
- 证据：evidence.maintainer_signals | github_repo:599547518 | https://github.com/vllm-project/vllm | release_recency=unknown

<!-- canonical_name: vllm-project/vllm; human_manual_source: deepwiki_human_wiki -->
