vLLM-05-Config模块-数据结构

核心数据结构列表

Config 模块包含以下核心数据结构:

数据结构 类型 用途 更新时机 文件位置
VllmConfig dataclass 顶层配置容器 初始化时 vllm/config/vllm.py
ModelConfig dataclass 模型配置 模型加载时 vllm/config/model.py
CacheConfig dataclass KV cache 配置 内存管理时 vllm/config/cache.py
ParallelConfig dataclass 并行配置 分布式设置时 vllm/config/parallel.py
SchedulerConfig dataclass 调度器配置 调度策略时 vllm/config/scheduler.py
DeviceConfig dataclass 设备配置 硬件检测时 vllm/config/device.py
LoadConfig dataclass 模型加载配置 模型加载时 vllm/config/load.py

数据结构详细说明

1. VllmConfig

基本信息

用途:顶层配置容器,包含所有 vLLM 相关的配置。

定义

@config
@dataclass(config=ConfigDict(arbitrary_types_allowed=True))
class VllmConfig:
    """包含所有 vLLM 相关配置的数据类"""
    
    # 核心配置
    model_config: ModelConfig = None
    cache_config: CacheConfig = field(default_factory=CacheConfig)
    parallel_config: ParallelConfig = field(default_factory=ParallelConfig)
    scheduler_config: SchedulerConfig = field(default_factory=SchedulerConfig)
    device_config: DeviceConfig = field(default_factory=DeviceConfig)
    load_config: LoadConfig = field(default_factory=LoadConfig)
    
    # 可选配置
    lora_config: Optional[LoRAConfig] = None
    speculative_config: Optional[SpeculativeConfig] = None
    structured_outputs_config: StructuredOutputsConfig = field(
        default_factory=StructuredOutputsConfig)
    observability_config: Optional[ObservabilityConfig] = None
    quant_config: Optional[QuantizationConfig] = None
    compilation_config: CompilationConfig = field(
        default_factory=CompilationConfig)
    
    # 分布式配置
    kv_transfer_config: Optional[KVTransferConfig] = None
    kv_events_config: Optional[KVEventsConfig] = None
    
    # 辅助配置
    additional_config: Union[dict, SupportsHash] = field(default_factory=dict)
    instance_id: str = ""

字段说明表

字段 类型 必填 说明
model_config ModelConfig 模型配置(架构、参数等)
cache_config CacheConfig KV cache 配置
parallel_config ParallelConfig 并行策略配置
scheduler_config SchedulerConfig 调度器配置
device_config DeviceConfig 设备和硬件配置
load_config LoadConfig 模型加载配置
lora_config LoRAConfig LoRA 适配器配置
speculative_config SpeculativeConfig 推测解码配置
compilation_config CompilationConfig 编译优化配置
quant_config QuantizationConfig 量化配置(自动推断)

用途和更新时机

创建时机

  • LLM 类初始化时
  • API Server 启动时
  • CLI 工具解析参数后

使用场景

  1. 配置验证和一致性检查
  2. 传递给各个模块
  3. 配置序列化和哈希计算

2. ModelConfig

基本信息

用途:模型相关的配置,包括模型架构、参数、数据类型等。

定义

@config
@dataclass
class ModelConfig:
    """模型配置"""
    
    # 基本信息
    model: str                               # 模型名称或路径
    tokenizer: Optional[str] = None          # Tokenizer 名称或路径
    tokenizer_mode: str = "auto"             # Tokenizer 模式
    trust_remote_code: bool = False          # 是否信任远程代码
    
    # 模型参数
    max_model_len: Optional[int] = None      # 最大模型长度
    dtype: str = "auto"                      # 数据类型
    seed: int = 0                            # 随机种子
    revision: Optional[str] = None           # 模型版本
    
    # 推断参数(自动填充)
    vocab_size: int = -1                     # 词汇表大小
    hidden_size: int = -1                    # 隐藏层大小
    num_layers: int = -1                     # 层数
    num_attention_heads: int = -1            # 注意力头数
    num_key_value_heads: Optional[int] = None  # KV 头数(GQA)
    
    # 架构特性
    sliding_window: Optional[int] = None     # 滑动窗口大小
    rope_theta: Optional[float] = None       # RoPE theta 参数
    rope_scaling: Optional[dict] = None      # RoPE 缩放参数
    
    # 多模态
    multimodal_config: Optional[MultiModalConfig] = None
    
    # 量化
    quantization: Optional[str] = None       # 量化方法
    quantization_param_path: Optional[str] = None
    
    # 其他
    enforce_eager: bool = False              # 强制 eager 模式
    max_context_len_to_capture: Optional[int] = None  # CUDA 图捕获上下文长度
    max_seq_len_to_capture: int = 8192       # CUDA 图捕获序列长度
    
    # 内部使用
    hf_config: Any = field(default=None, init=False)
    hf_text_config: Any = field(default=None, init=False)

字段说明表

字段 类型 默认值 说明
model str 必填 模型名称(HF Hub)或本地路径
max_model_len int 自动推断 最大序列长度(包含 prompt + generation)
dtype str “auto” 模型数据类型:auto/float16/bfloat16/float32
vocab_size int 自动推断 词汇表大小,从模型配置获取
hidden_size int 自动推断 隐藏层维度
num_layers int 自动推断 Transformer 层数
num_attention_heads int 自动推断 注意力头数
num_key_value_heads int 自动推断 KV 头数(GQA 时 < attention heads)
sliding_window int None 滑动窗口大小(如 Mistral 4096)
multimodal_config MultiModalConfig None 多模态配置(视觉、音频等)
enforce_eager bool False 禁用 CUDA 图优化,强制 eager 执行

自动推断逻辑

def _verify_and_get_model_config(self, parallel_config: ParallelConfig) -> None:
    """从 HuggingFace 配置自动推断模型参数"""
    
    # 1. 加载 HF 配置
    if self.hf_config is None:
        self.hf_config = get_config(
            self.model, 
            trust_remote_code=self.trust_remote_code,
            revision=self.revision
        )
    
    # 2. 推断基本参数
    if self.vocab_size == -1:
        self.vocab_size = getattr(self.hf_config, 'vocab_size', 50257)
    
    if self.hidden_size == -1:
        self.hidden_size = getattr(self.hf_config, 'hidden_size', 768)
    
    if self.num_layers == -1:
        self.num_layers = getattr(self.hf_config, 'num_hidden_layers', 12)
    
    if self.num_attention_heads == -1:
        self.num_attention_heads = getattr(self.hf_config, 'num_attention_heads', 12)
    
    # 3. 推断 KV 头数(GQA)
    if self.num_key_value_heads is None:
        self.num_key_value_heads = getattr(
            self.hf_config, 'num_key_value_heads', self.num_attention_heads
        )
    
    # 4. 推断最大长度
    if self.max_model_len is None:
        possible_keys = ['max_position_embeddings', 'max_sequence_length', 'seq_length']
        for key in possible_keys:
            if hasattr(self.hf_config, key):
                self.max_model_len = getattr(self.hf_config, key)
                break
        else:
            self.max_model_len = 2048  # 默认值

3. CacheConfig

基本信息

用途:KV cache 相关配置,控制内存使用和缓存策略。

定义

@config
@dataclass
class CacheConfig:
    """KV cache 配置"""
    
    # 内存配置
    block_size: int = 16                     # KV cache 块大小(tokens)
    gpu_memory_utilization: float = 0.9     # GPU 内存利用率
    swap_space: float = 4.0                  # CPU swap 空间(GB)
    cpu_offload_gb: float = 0                # CPU offload 大小(GB)
    
    # 缓存策略
    cache_dtype: str = "auto"                # KV cache 数据类型
    num_gpu_blocks: Optional[int] = None     # GPU 块数量(自动计算)
    num_cpu_blocks: Optional[int] = None     # CPU 块数量(自动计算)
    
    # 高级选项
    sliding_window: Optional[int] = None     # 滑动窗口缓存
    enable_prefix_caching: bool = False      # 启用前缀缓存
    
    # V1 特有配置
    num_kv_heads: Optional[int] = None       # KV 头数
    head_size: Optional[int] = None          # 头大小
    num_layers: Optional[int] = None         # 层数

字段说明表

字段 类型 默认值 说明
block_size int 16 每个 KV cache 块包含的 token 数
gpu_memory_utilization float 0.9 GPU 内存使用比例(0.0-1.0)
swap_space float 4.0 CPU swap 空间大小(GB)
cache_dtype str “auto” KV cache 数据类型(通常与模型相同)
num_gpu_blocks int 自动计算 GPU KV cache 块数量
num_cpu_blocks int 自动计算 CPU KV cache 块数量
enable_prefix_caching bool False 是否启用前缀缓存优化

内存计算

def _get_cache_block_size(
    self,
    model_config: ModelConfig,
    parallel_config: ParallelConfig,
) -> int:
    """计算单个 KV cache 块的内存大小"""
    
    head_size = model_config.get_head_size()
    num_heads = model_config.get_num_kv_heads(parallel_config)
    num_layers = model_config.get_num_layers(parallel_config)
    
    # 单个 token 的 KV cache 大小
    key_cache_block = self.block_size * num_heads * head_size
    value_cache_block = self.block_size * num_heads * head_size
    total = num_layers * (key_cache_block + value_cache_block)
    
    # 数据类型大小
    dtype_size = torch.dtype(self.cache_dtype).itemsize
    
    return total * dtype_size

def _get_num_gpu_blocks(
    self,
    gpu_memory: int,
    model_memory: int,
    parallel_config: ParallelConfig,
) -> int:
    """计算 GPU 可分配的 KV cache 块数量"""
    
    available_memory = gpu_memory * self.gpu_memory_utilization - model_memory
    cache_block_size = self._get_cache_block_size(model_config, parallel_config)
    
    num_gpu_blocks = available_memory // cache_block_size
    return max(0, num_gpu_blocks)

4. ParallelConfig

基本信息

用途:并行执行配置,包括 TP、PP、DP 等并行策略。

定义

@config  
@dataclass
class ParallelConfig:
    """并行配置"""
    
    # 并行维度
    pipeline_parallel_size: int = 1         # Pipeline 并行大小
    tensor_parallel_size: int = 1           # Tensor 并行大小
    worker_use_ray: bool = False             # 是否使用 Ray
    max_parallel_loading_workers: Optional[int] = None  # 最大并行加载 Worker 数
    
    # 通信配置
    disable_custom_all_reduce: bool = False  # 禁用自定义 AllReduce
    tokenizer_pool_size: int = 0             # Tokenizer 池大小
    tokenizer_pool_type: str = "ray"         # Tokenizer 池类型
    tokenizer_pool_extra_config: Optional[dict] = None
    
    # 分布式后端
    distributed_executor_backend: Optional[str] = None
    
    # Ray 特定配置
    ray_workers_use_nsight: bool = False     # Ray Worker 使用 Nsight
    placement_group: Optional["PlacementGroup"] = None
    
    # Data Parallelism (实验性)
    data_parallel_size: int = 1              # Data 并行大小
    
    # Expert Parallelism (MoE)
    expert_parallel_size: int = 1            # Expert 并行大小

字段说明表

字段 类型 默认值 说明
tensor_parallel_size int 1 TP 大小,分片模型权重到多个 GPU
pipeline_parallel_size int 1 PP 大小,分片模型层到多个 GPU
data_parallel_size int 1 DP 大小,复制模型到多个设备
expert_parallel_size int 1 EP 大小,分片 MoE 专家到多个 GPU
worker_use_ray bool False 是否使用 Ray 作为分布式后端
disable_custom_all_reduce bool False 禁用 vLLM 自定义 AllReduce 优化

并行约束检查

def verify_config(self, model_config: ModelConfig) -> None:
    """验证并行配置的有效性"""
    
    # 1. TP 约束
    if self.tensor_parallel_size > 1:
        if model_config.hidden_size % self.tensor_parallel_size != 0:
            raise ValueError(
                f"Hidden size {model_config.hidden_size} is not divisible by "
                f"tensor_parallel_size {self.tensor_parallel_size}"
            )
        
        if model_config.num_attention_heads % self.tensor_parallel_size != 0:
            raise ValueError(
                f"Number of attention heads {model_config.num_attention_heads} "
                f"is not divisible by tensor_parallel_size {self.tensor_parallel_size}"
            )
    
    # 2. PP 约束
    if self.pipeline_parallel_size > 1:
        if model_config.num_layers % self.pipeline_parallel_size != 0:
            logger.warning(
                f"Number of layers {model_config.num_layers} is not evenly "
                f"divisible by pipeline_parallel_size {self.pipeline_parallel_size}. "
                f"This may lead to load imbalance."
            )
    
    # 3. 总并行度约束
    total_parallel_size = (
        self.tensor_parallel_size * 
        self.pipeline_parallel_size * 
        self.data_parallel_size
    )
    
    if total_parallel_size > torch.cuda.device_count():
        raise ValueError(
            f"Total parallel size {total_parallel_size} exceeds "
            f"available GPUs {torch.cuda.device_count()}"
        )

5. SchedulerConfig

基本信息

用途:调度器配置,控制请求调度策略和批处理行为。

定义

@config
@dataclass  
class SchedulerConfig:
    """调度器配置"""
    
    # 批处理配置
    max_num_batched_tokens: Optional[int] = None    # 最大批处理 token 数
    max_num_seqs: int = 256                         # 最大序列数
    max_model_len: Optional[int] = None             # 最大模型长度
    
    # 调度策略
    scheduling_policy: str = "fcfs"                 # 调度策略:fcfs/priority
    delay_factor: float = 0.0                       # 延迟因子
    enable_chunked_prefill: bool = False            # 启用分块 prefill
    
    # Prefill 配置
    max_num_batched_tokens_for_prefill: Optional[int] = None
    chunked_prefill_enabled: bool = False
    
    # 抢占配置
    preemption_mode: str = "swap"                   # 抢占模式:swap/recompute
    preemption_check_period: float = 1.0           # 抢占检查周期
    preemption_tolerance: float = 2.0               # 抢占容忍度
    
    # 其他
    send_delta_data: bool = False                   # 发送增量数据
    policy: str = "fcfs"                            # 策略别名
    
    # V1 特有配置  
    use_v2_block_manager: bool = False              # 使用 V2 块管理器
    enable_prefix_caching: bool = False             # 启用前缀缓存

字段说明表

字段 类型 默认值 说明
max_num_seqs int 256 同时处理的最大序列数
max_num_batched_tokens int 自动计算 单次 step 最大 token 数
scheduling_policy str “fcfs” 调度策略:fcfs(先到先服务)/priority(优先级)
chunked_prefill_enabled bool False 启用分块 prefill 优化
preemption_mode str “swap” 抢占模式:swap(换出)/recompute(重计算)
enable_prefix_caching bool False 启用前缀缓存

自动计算逻辑

def get_max_num_batched_tokens(self, model_config: ModelConfig) -> int:
    """计算最大批处理 token 数"""
    
    if self.max_num_batched_tokens is not None:
        return self.max_num_batched_tokens
    
    max_model_len = self.max_model_len or model_config.max_model_len
    
    if self.chunked_prefill_enabled:
        # Chunked prefill: 支持更多 token
        return max(512, self.max_num_seqs * 16)
    else:
        # 传统模式: 保守估计
        return min(self.max_num_seqs * max_model_len, 2048)

6. DeviceConfig

基本信息

用途:设备和硬件相关配置。

定义

@config
@dataclass
class DeviceConfig:
    """设备配置"""
    
    device: str = "auto"                     # 设备类型:cuda/cpu/auto
    device_id: int = 0                       # 设备 ID
    
    # CUDA 特定
    cuda_visible_devices: Optional[str] = None  # CUDA 可见设备
    
    # 其他设备
    xpu_device_id: int = 0                   # XPU 设备 ID (Intel GPU)
    npu_device_id: int = 0                   # NPU 设备 ID (华为昇腾)

7. LoadConfig

基本信息

用途:模型加载相关配置。

定义

@config
@dataclass
class LoadConfig:
    """模型加载配置"""
    
    # 下载配置
    download_dir: Optional[str] = None       # 下载目录
    load_format: str = "auto"                # 加载格式:auto/pt/safetensors
    
    # 权重加载
    ignore_patterns: Optional[list[str]] = None  # 忽略的权重模式
    
    # 其他
    dual_chunk_attention: bool = False       # 双块注意力

数据结构关系图(类图)

classDiagram
    class VllmConfig {
        +ModelConfig model_config
        +CacheConfig cache_config
        +ParallelConfig parallel_config
        +SchedulerConfig scheduler_config
        +DeviceConfig device_config
        +LoadConfig load_config
        +compute_hash() str
        +with_hf_config() VllmConfig
    }
    
    class ModelConfig {
        +str model
        +int max_model_len
        +str dtype
        +int vocab_size
        +int hidden_size
        +int num_layers
        +verify_with_parallel_config()
    }
    
    class CacheConfig {
        +int block_size
        +float gpu_memory_utilization
        +float swap_space
        +int num_gpu_blocks
        +int num_cpu_blocks
        +verify_with_parallel_config()
    }
    
    class ParallelConfig {
        +int tensor_parallel_size
        +int pipeline_parallel_size
        +int data_parallel_size
        +bool worker_use_ray
        +world_size() int
    }
    
    class SchedulerConfig {
        +int max_num_seqs
        +int max_num_batched_tokens
        +str scheduling_policy
        +bool chunked_prefill_enabled
        +get_max_num_batched_tokens()
    }
    
    class DeviceConfig {
        +str device
        +int device_id
    }
    
    class LoadConfig {
        +str download_dir
        +str load_format
    }
    
    VllmConfig --> ModelConfig : 包含
    VllmConfig --> CacheConfig : 包含
    VllmConfig --> ParallelConfig : 包含  
    VllmConfig --> SchedulerConfig : 包含
    VllmConfig --> DeviceConfig : 包含
    VllmConfig --> LoadConfig : 包含
    
    ModelConfig ..> ParallelConfig : 验证兼容性
    CacheConfig ..> ParallelConfig : 验证兼容性

配置验证依赖图

graph TB
    VllmConfig["VllmConfig.__post_init__()"]
    
    VllmConfig --> ModelVerify["ModelConfig.verify_with_parallel_config()"]
    VllmConfig --> CacheVerify["CacheConfig.verify_with_parallel_config()"]
    VllmConfig --> LoRAVerify["LoRAConfig.verify_with_*()"]
    VllmConfig --> QuantInfer["推断 quant_config"]
    VllmConfig --> PlatformCheck["平台特定检查"]
    
    ModelVerify --> TPCheck["TP 兼容性检查"]
    ModelVerify --> PPCheck["PP 兼容性检查"]
    
    CacheVerify --> BlockSizeCheck["块大小检查"]
    CacheVerify --> MemoryCheck["内存配置检查"]
    
    LoRAVerify --> LoRACacheCheck["LoRA KV cache 兼容性"]
    LoRAVerify --> LoRAModelCheck["LoRA 模型兼容性"]
    
    style VllmConfig fill:#e1f5ff
    style ModelVerify fill:#ffe1e1
    style CacheVerify fill:#e1ffe1

内存占用估算

ModelConfig 内存占用

字段 内存大小 说明
基本字段 ~1 KB 字符串、整数、布尔值
hf_config ~10-50 KB HuggingFace 配置对象
总计 ~50 KB 轻量级配置

CacheConfig 内存占用

字段 内存大小 说明
基本字段 ~1 KB 数值配置
块信息 ~1 KB 块数量等计算结果
总计 ~2 KB 轻量级配置

实际 KV Cache 内存占用(由 CacheConfig 控制)

示例计算

  • model: Llama-2-7B (hidden_size=4096, num_layers=32, num_heads=32, head_dim=128)
  • block_size: 16
  • num_gpu_blocks: 1000
  • dtype: float16 (2 bytes)
单块内存 = 2 * block_size * num_heads * head_dim * dtype_size
        = 2 * 16 * 32 * 128 * 2 = 262,144 bytes = 256 KB

单层内存 = num_gpu_blocks * 单块内存 = 1000 * 256 KB = 256 MB

总内存 = num_layers * 单层内存 = 32 * 256 MB = 8 GB

配置组合示例

高性能配置组合

high_perf_config = VllmConfig(
    model_config=ModelConfig(
        model="meta-llama/Llama-2-70b-hf",
        dtype="float16",
        max_model_len=4096,
    ),
    parallel_config=ParallelConfig(
        tensor_parallel_size=8,
        pipeline_parallel_size=2,
    ),
    cache_config=CacheConfig(
        block_size=32,
        gpu_memory_utilization=0.95,
    ),
    scheduler_config=SchedulerConfig(
        max_num_seqs=512,
        chunked_prefill_enabled=True,
    ),
)

内存优化配置组合

memory_opt_config = VllmConfig(
    model_config=ModelConfig(
        model="meta-llama/Llama-2-7b-hf", 
        dtype="float16",
        max_model_len=2048,
    ),
    cache_config=CacheConfig(
        block_size=16,
        gpu_memory_utilization=0.8,
        swap_space=8.0,  # 8GB swap
    ),
    scheduler_config=SchedulerConfig(
        max_num_seqs=128,
        preemption_mode="swap",
    ),
)

调试配置组合

debug_config = VllmConfig(
    model_config=ModelConfig(
        model="facebook/opt-125m",  # 小模型
        dtype="float32",
        enforce_eager=True,  # 禁用优化
    ),
    compilation_config=CompilationConfig(level=0),  # 无编译
    scheduler_config=SchedulerConfig(
        max_num_seqs=16,
        scheduling_policy="fcfs",
    ),
)

总结

Config 模块的数据结构设计特点:

  1. 层次化设计:VllmConfig 作为顶层容器,包含各专门配置
  2. 类型安全:使用 dataclass 和类型注解
  3. 自动推断:合理的默认值和自动计算逻辑
  4. 交叉验证:配置之间的一致性检查
  5. 扩展性:易于添加新的配置字段和验证规则

核心数据结构:

  • VllmConfig:顶层配置容器,统一管理
  • ModelConfig:模型相关配置,自动推断参数
  • CacheConfig:KV cache 配置,控制内存使用
  • ParallelConfig:并行策略配置,支持多种并行模式
  • SchedulerConfig:调度器配置,控制批处理行为

通过合理的配置组合,可以在性能、内存使用和功能之间取得平衡。