Appearance
模型库与算子层 — 概念
Model Registry — model_executor/models/registry.py
vLLM 使用注册表模式将 HuggingFace 架构名映射到模型实现:
注册机制
python
# 简化的注册
@ModelRegistry.register("LlamaForCausalLM")
class LlamaForCausalLM(nn.Module):
...模型目录隔离
部分模型因特殊硬件依赖(自定义 CUDA kernel、ROCm 特化注意力)从 model_executor/models/ 移到独立包:
| 模型 | 位置 | 原因 |
|---|---|---|
| DeepSeek V4 | vllm/models/deepseek_v4/ | 自定义 CUDA/DSL kernel,需要 nvidia/ops |
| 其他标准模型 | vllm/model_executor/models/ | 无特殊依赖 |
Registry 通过 _resolve_module_name() 支持完全限定模块路径,自动定位外部模型包。
模型接口 Mixin
vLLM 通过 Mixin 接口声明模型的能力:
| Mixin | 说明 |
|---|---|
SupportsLoRA | 支持 LoRA 适配器 |
SupportsMultiModal | 支持多模态输入 |
SupportsMRoPE | 支持多维旋转位置编码 |
SupportsPP | 支持流水线并行 |
HasInnerState | 有内部状态(如 Mamba) |
注意力层
层次结构
运行时后端选择
AttentionBackendSelector 根据以下条件选择后端:
- 硬件平台(CUDA、ROCm、CPU)
- 模型配置(head_dim、sliding window)
- 是否启用 CUDA Graph
核心操作
注意力层需要实现两种操作:
- Prefill:处理完整 prompt 的注意力
- Decode:单 token 的增量注意力
线性层
vLLM 的线性层支持多种并行和量化模式:
权重加载
vLLM 支持多种权重格式:
| 加载器 | 支持格式 |
|---|---|
default_loader | HuggingFace safetensors/bin |
gguf_loader | GGUF 格式 |
bitsandbytes_loader | BitsAndBytes 量化权重 |
tensorizer_loader | Tensorizer 序列化 |
Fused MoE — model_executor/layers/fused_moe/
Mixture of Experts 模型的核心优化:
关键优化:
- Fused Kernel:将 router + expert 计算融合为单个 CUDA kernel
- Expert Parallelism:专家可以分布在多个 GPU 上
- 负载均衡:动态调整专家分配以平衡计算负载
- Elastic EP(弹性专家并行):支持动态扩展/缩减 EP 大小,无需中断服务
- 双流 LoRA:MoE 的 base GEMM 和 LoRA delta 使用不同 CUDA 流并行执行
MoE 后端矩阵
| 后端 | 精度 | 硬件 | 说明 |
|---|---|---|---|
| Triton MoE | FP16/BF16 | NVIDIA | 默认后端,支持双流 LoRA |
| CUTLASS MoE | W4A8 (FP8 act) | NVIDIA | 通过 oracle 框架路由 |
| FlashInfer B12x | NVFP4 | SM12x (Blackwell) | 融合 dispatch+GEMM+SwiGLU |
| Marlin MoE | AWQ/W4A16 | NVIDIA | INT4 量化专家 |
| ROCm MoE | FP16/BF16 | AMD | ROCm 特化实现 |
Oracle 框架
MoE 后端选择现在通过 oracle 模式统一管理:
各后端通过 is_supported_config()、_supports_quant_scheme() 等方法声明能力,oracle 根据模型配置自动选择最优后端。
Gated DeltaNet (GDN) — model_executor/layers/mamba/gdn/
新增的 GDN 子系统支持混合注意力模型中的线性注意力层:
- 从 OLMo Hybrid 模型中提取出独立的 GDN 层(减少 ~650 行)
- 支持 CPU 后端 (
mamba/ops/cpu/gdn_attention.py) - 各模型共享
GatedDeltaNetAttention基类,实现自己的线性注意力变体
旋转位置编码(RoPE)
vLLM 实现了多种 RoPE 变体:
| 变体 | 适用模型 |
|---|---|
| Default RoPE | LLaMA、Mistral |
| LongRoPE | 支持更长上下文 |
| MRoPE | 多模态模型 |
| Phi3 Long RoPE | Phi-3 |
相关概念
- Flash Attention — 高效注意力计算
- MoE — 专家混合模型
- Tensor Parallelism — 张量并行影响线性层切分
- LoRA — 低秩适配器