config.py — 该文件定义了训练系统中的基础配置数据类¶
文件概述¶
模块路径: verl.trainer.config.config
该文件定义了训练系统中的基础配置数据类,包括 Checkpoint 配置、Profiling 配置和基础模型配置。这些是 Python dataclass,继承自 BaseConfig,提供了类似 omegaconf.DictConfig 的接口。
在训练流程中的位置¶
这些配置类在训练初始化阶段被使用,由 omega_conf_to_dataclass() 将 YAML 配置转换为强类型的 dataclass 实例。
关键代码讲解¶
1. Checkpoint 配置¶
@dataclass
class CheckpointConfig(BaseConfig):
"""模型检查点配置"""
save_contents: list[str] = field(default_factory=lambda: ["model", "optimizer", "extra"])
# save_contents 控制保存什么内容:
# - "model": 模型权重
# - "optimizer": 优化器状态(用于断点恢复)
# - "extra": 额外信息
# - "hf_model": HuggingFace 格式的模型(方便推理部署)
load_contents: list[str] = field(default_factory=lambda: ["model", "optimizer", "extra"])
# 加载时读取什么内容,默认与保存一致
async_save: bool = False
# 异步保存:不阻塞训练继续。目前仅 Megatron 支持
mbridge_config: dict[str, Any] = field(default_factory=dict)
# MBridge 配置(高级特性)
2. Profiling 配置¶
@dataclass
class ProfileConfig(BaseConfig):
"""性能分析配置"""
profile_ranks: Optional[list[int]] = None
# 要分析的 rank 列表。None = 分析所有 rank
step_start: int = -1
step_end: int = -1
# 分析的起止步骤。-1 表示不启用
save_path: Optional[str] = None
# 分析结果保存路径
3. 基础模型配置¶
@dataclass
class BaseModelConfig(BaseConfig):
"""基础模型配置"""
path: str = "~/models/deepseek-llm-7b-chat"
# 模型权重路径(本地路径或 HuggingFace hub 路径)
tokenizer_path: Optional[str] = None
# Tokenizer 路径。None = 使用模型路径
override_config: dict[str, Any] = field(default_factory=dict)
# HuggingFace config 的覆盖项
external_lib: Optional[str] = None
# 外部模型实现库路径
trust_remote_code: bool = False
# 是否信任远程代码(HuggingFace 的安全设置)
lora: dict[str, Any] = field(default_factory=dict)
# LoRA 配置字典
4. 模块配置¶
@dataclass
class ModuleConfig(BaseConfig):
"""外部 Python 模块配置"""
path: Optional[str] = None
# 模块文件路径
name: Optional[str] = None
# 模块名称(用于 import)
# 如果为 None,模块将以哈希名称加载,不会添加到 sys.modules
核心类/函数列表¶
| 名称 | 类型 | 作用 |
|---|---|---|
CheckpointConfig |
dataclass | Checkpoint 保存/加载配置 |
ProfileConfig |
dataclass | 性能分析配置 |
BaseModelConfig |
dataclass | 模型加载配置 |
ModuleConfig |
dataclass | 外部 Python 模块配置 |
数据流和调用关系¶
YAML 配置文件
|
v
OmegaConf.DictConfig
|
v (omega_conf_to_dataclass)
CheckpointConfig / ProfileConfig / BaseModelConfig
|
v
各个 Worker / Trainer 使用
小结¶
config.py 定义了训练系统中的通用配置类型。使用 dataclass 而非字典的好处是:
- 类型安全:IDE 可以提供自动补全和类型检查
- 文档化:每个字段都有明确的类型和说明
- 默认值:提供合理的默认配置
- 序列化兼容:通过
BaseConfig提供与DictConfig兼容的接口