Appearance
执行器与Worker — 概念
Executor 抽象层
Executor 定义了模型执行的抽象接口,支持三种部署模式:
UniProcExecutor
单进程执行器,所有操作在同一进程中完成:
- 适合开发和调试
- 没有 IPC 开销
- 不受 GIL 影响的 CUDA 操作仍然可以并行
MultiProcExecutor
多进程执行器,每个 GPU 对应一个 Worker 进程:
- 通过
multiprocessing.Process创建 Worker - 使用 pipe 进行进程间通信
- 支持 张量并行
RayExecutor
基于 Ray 的分布式执行器:
- 支持跨节点部署
- 适合大规模集群推理
- 支持 流水线并行
Worker 生命周期
关键步骤
- init_device():设置 CUDA 设备,初始化 NCCL 通信组
- load_model():从 HuggingFace checkpoint 加载权重到 GPU
- profile_run():运行一次虚拟前向传播,测量实际显存使用量
- allocate_kv_cache():根据剩余显存分配 KV 缓存块
- warmup():捕获 CUDA Graph,预热 CUDA kernel
CuMemAllocator
CuMemAllocator 现在作为独立功能(enable_cumem_allocator),不再与 enable_sleep_mode 耦合。它管理 CUDA 内存池,允许在 sleep/pause 模式下释放和重新分配显存。
ModelRunner
ModelRunner 是 Worker 的核心组件(vllm/v1/worker/gpu_model_runner.py,约 7400 行 / 324KB),负责:
前向传播执行
CUDA Graph 管理
CUDA Graph 在 decode 阶段提供显著的性能提升:
- 预热阶段:用小批量输入执行一次前向传播
- 捕获图:记录所有 CUDA 操作为图
- 重放:用新输入重放图,避免 kernel launch 开销
输入批处理
ModelRunner 将调度器的输出转换为 GPU 可执行的输入:
python
# 简化示意
class InputBatch:
token_ids: torch.Tensor # [num_seqs, max_len]
position_ids: torch.Tensor # [num_seqs, max_len]
block_tables: torch.Tensor # [num_seqs, max_blocks]
seq_lens: torch.Tensor # [num_seqs]
sampling_params: list[SamplingParams]硬件平台支持
vLLM 通过 Platform 抽象支持多种硬件:
| 平台 | 文件 | Worker |
|---|---|---|
| NVIDIA CUDA | platforms/cuda.py | GPUWorker |
| AMD ROCm | platforms/rocm.py | GPUWorker |
| x86/ARM CPU | platforms/cpu.py | CPUWorker |
| Intel XPU/Gaudi | platforms/xpu.py | XPUWorker |
| Google TPU | platforms/tpu.py | TPUWorker |
相关概念
- CUDA Graph — CUDA 图捕获与重放
- Tensor Parallelism — 张量并行
- Pipeline Parallelism — 流水线并行
- Flash Attention — 高效注意力内核
- 模型库与算子层 — 模型执行的具体实现