已开启
Hyper-Parallel 训练配置解析设计 #288
TonghanZhang创建于 7月14日
7月14日 修改了issue 的描述
7月14日 修改了issue 的描述
7月14日 修改了issue 的描述
7月14日 修改了issue 的描述
7月14日 修改了issue 的描述
7月14日 修改标题为 “Hyper-Parallel DModule 与训练配置解析设计”,原标题为“Hyper-Parallel DModule 与训练框架设计”
7月20日 修改了issue 的描述
7月20日 修改了issue 的描述
7月20日 修改标题为 “Hyper-Parallel 训练配置解析设计”,原标题为“Hyper-Parallel DModule 与训练配置解析设计”
7月20日 关联了pull request:feat(config): Yaml形式训练输入解析
7月20日 关联了pull request:feat(config): Yaml形式训练输入解析
7月20日 修改了issue 的描述
7月20日 修改了issue 的描述
7月22日 修改了issue 的描述
支持 YAML 生成统一的 typed
TrainerConfig1. 基本信息
config、trainer、训练组件2. 背景
当前 Hyper-Parallel 的训练输入路径为:
HyperTrainerConfig是固定的三层参数树。当前 YAML 中没有_target_;parse_args()只按model / data / train的 dataclass 字段读取参数。具体模型通过model.name和 registry/discovery 选择,dataloader、optimizer、checkpoint 等运行对象由 Trainer 和BaseTrainer._build_*选择并创建。本 Issue 新增一级组件
_target_,让 YAML 可以选择具体 Config 类或 factory。引入该接口后,resolver 需要在进入 Trainer 前完成以下检查:TrainerConfig字段类型。解析成功后,
TrainerConfig的一级字段直接挂载组件 Config、参数 Config 或模型输入配置。3. 目标和非目标
3.1 目标
TrainerConfig作为新的 typed 解析结果;现有 Trainer 在运行迁移前继续使用HyperTrainerConfig。_target_选择 Config 类或 factory。TrainerConfig字段、target 参数签名和返回类型完成校验。TrainerConfig上应用 typed CLI dotted override。TrainerConfig的一级字段提供明确的 Config 接口。model使用通用ModelConfig保存模型名称、权重路径和架构覆盖参数。3.2 非目标
BaseTrainer._build_*的运行构造职责,也不执行 train step 或 checkpoint load。_target_。HyperTrainerConfig、model registry 和 discovery 路径不在本阶段修改。4. 相关实现参考
Trainer.Config直接挂载 model spec、dataloader、optimizer、scheduler、loss、checkpoint 等 typed 组件;Trainer 按运行依赖调用各组件build()TrainerConfig和组件 Config 边界,同时保留 YAML 入口_target_可以导入并调用对象;数据路径正在转向 typed Dataset、Dataloader 和 Collator 的受控构造ConfigNode允许嵌套 target,组件依赖和构造顺序需要由 recipe 额外管理5. 对外接口
5.1 根配置
PR1 提供
parse_training_args()作为 YAML 配置解析入口。该函数读取命令行中的 YAML 路径和 dotted override,返回TrainerConfig:from hyper_parallel.config.manager import parse_training_args config = parse_training_args()parse_training_args()负责拆分配置文件路径与剩余 CLI 参数;YAML 加载、resolve_root(raw)和 override 应用共同完成配置解析。PR1 输出最终TrainerConfig;PR2 将train_lm.py、train_vl.py和 Trainer 切换到该配置。TrainerConfig的一级字段参考 TorchTitan 的组件边界,并按 Hyper 的对象所有权定义:TrainerConfig字段类型modelModelConfigoptimizerOptimizer.Config或NoneAdamW.Configlr_schedulerLRScheduler.Config或NoneCosineWithWarmup.ConfiglossLoss.Config或NoneCausalLMLoss.ConfigtrainingTrainingConfigacceleratorAcceleratorConfigmixed_precisionMixedPrecisionConfiggradient_checkpointingGradientCheckpointingConfigdebugDebugConfigcommCommConfigmodel的解析结果是一次训练使用的ModelConfig。后续运行路径根据model.name通过现有 registry/discovery 取得ModelSpec;resolver 不生成ModelSpec。具有默认值的字段可以在普通训练 YAML 中省略。YAML 中一旦显式提供某个一级字段,该分组就必须包含
_target_。5.2 YAML 示例
model: _target_: hyper_parallel.trainer.config.ModelConfig name: qwen3_5 weights_path: /path/to/Qwen3.5-0.8B-Base training: _target_: hyper_parallel.trainer.config.TrainingConfig max_steps: 100 global_batch_size: 8 accelerator: _target_: hyper_parallel.trainer.config.AcceleratorConfig tp: 2 optimizer: _target_: hyper_parallel.components.optim.AdamW.Config lr: 0.0002 weight_decay: 0.1 loss: _target_: hyper_parallel.components.loss.CausalLMLoss.Config ignore_index: -100这是最小接口示例。完整解析测试覆盖本期
TrainerConfig已声明的全部一级字段。5.3 CLI dotted override
训练入口迁移完成后,用户命令格式为:
parse_training_args()读取第一个位置参数作为 YAML 路径,将剩余的--field=valuetoken 作为 dotted override。resolver 先生成 typedTrainerConfig,再应用 override。字段必须存在于最终配置类型中,值必须符合字段类型。本期交付终点是返回TrainerConfig;当前train_lm.py和train_vl.py仍使用旧parse_args(HyperTrainerConfig),入口切换由后续 PR 完成。5.4 模型配置
模型分组直接生成通用
ModelConfig:ModelConfig( name="qwen3_5", weights_path="/path/to/Qwen3.5-0.8B-Base", )resolver 只得到模型输入配置,不导入模型 package、不创建模型,也不加载权重。现有训练入口随后根据
model.name发现并取得对应ModelSpec。6. 方案设计
6.1 关键逻辑
parse_training_args()TrainerConfigresolve_root()TrainerConfig检查 YAML 根字段和必填字段,逐个解析一级分组,最后创建TrainerConfigresolve_component()_target_,检查 target 的返回类型、参数签名和参数类型,再调用 target 创建配置对象import_target()AdamW.Config这类嵌套属性路径coerce_value()调用顺序为
parse_training_args() -> resolve_root() -> resolve_component() -> import_target() / coerce_value(),随后在生成的TrainerConfig上应用 CLI override。一级字段集合由TrainerConfig声明;target 内部参数直接传给当前 target,不继续扫描嵌套_target_。6.2 代码改动点
hyper_parallel.trainer.configTrainerConfig、TrainingConfig和CommConfig,并将现有AcceleratorConfig、MixedPrecisionConfig、GradientCheckpointingConfig、DebugConfig接入根配置hyper_parallel.config.resolverTrainerConfighyper_parallel.config.managerTrainerConfigConfig类型ModelConfigModelSpec注册方式train_lm.py/train_vl.pyTrainerConfig并选择对应 Trainer6.3 方案取舍
TrainerConfig新增训练参数或组件时,先由使用该字段的训练流程负责人和所属组件负责人确定:
TrainingConfig、AcceleratorConfig等参数类,还是新的一级组件;build();新增 optimizer、loss 等实现时,应在所属组件模块增加对应 Config/build,而不是向 YAML 开放未声明字段。
7. 组件依赖
TrainerConfig字段定义ModelConfigmodel字段无法解析BaseTrainer._build_*完整能力需要
TrainerConfig字段、组件 Config 接口、resolver 和 CLI override 同时可用。本阶段最小可交付能力是完整 YAML 到 typedTrainerConfig的解析与错误检查。8. 约束与兼容性
parse_training_args()返回最终TrainerConfig;每个一级组件分组通过_target_选择 Config 类或 factoryModelConfig,不创建训练运行对象HyperTrainerConfig、registry/discovery 和BaseTrainer._build_*9. 验证设计
9.1 用例分层
9.2 解析验收
TrainerConfig;各字段对象类型正确TrainerConfig提供正确默认对象_target_optimizer.lrr等未知参数在调用 target 前失败TrainerConfig字段类型时失败9.3 性能 / 显存验证
本阶段不改变训练运行路径,不设置训练性能或显存目标。验证解析耗时不进入 train step 即可。
10. 实现计划
TrainerConfig、一级 target resolver、config manager、typed CLI override,以及本期 optimizer、scheduler、loss ConfigHyperTrainerConfig的删除范围PR1 的完成标准:一份显式覆盖
TrainerConfig全部一级字段的 YAML 能生成完整 typed 配置;具有默认值的字段可以省略;CLI override 可用;所有 target、参数和类型错误均在进入 Trainer 前报告。