已开启
【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 7 CLI 入口打通 #145
changzherui创建于 5月15日
5月15日 修改标题为 “hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M7”
5月15日 修改标题为 “hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M7”
5月15日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”
5月15日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”
5月25日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 7 CLI 入口打通”,原标题为“【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”
5月25日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 7 CLI 入口打通”,原标题为“【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M7 CLI 入口打通”
5月25日 修改了issue 的描述
Part 7 — CLI 入口打通
1. 目标
把"命令行 →
HyperTrainer.Config→config.build()→trainer.train()"完整链路打通,达成 torchtitan 风格的"用户敲命令 → 并行模型 + 完整训练栈"4 步链路。2. 任务边界
hyper_parallel/models/qwen3_5_v2/config_registry.py(新)HyperTrainer.Config:qwen3_5_v2_debugmodel / qwen3_5_v2_4b / qwen3_5_v2_4b_tp2_fsdp4scripts/train_lm.py(改)mgr = ConfigManager(); config = mgr.parse_args(); trainer = config.build(); trainer.train(),自动识别--module/ yaml 两种模式3.
config_registry.py示例# hyper_parallel/models/qwen3_5_v2/config_registry.py from hyper_parallel.config import ( TrainingConfig, ParallelismConfig, ActivationCheckpointConfig, ) from hyper_parallel.components.optimizer import OptimizersContainer from hyper_parallel.components.dataloader import HuggingFaceTextDataLoader from hyper_parallel.trainer.trainer_config import HyperTrainer from .__init__ import qwen3_5_v2_spec_factory def qwen3_5_v2_debugmodel() -> HyperTrainer.Config: return HyperTrainer.Config( model_spec=qwen3_5_v2_spec_factory("debugmodel"), optimizer=OptimizersContainer.Config(lr=8e-4), training=TrainingConfig( local_batch_size=8, seq_len=2048, steps=10, ), dataloader=HuggingFaceTextDataLoader.Config(dataset="dummy"), activation_checkpoint=ActivationCheckpointConfig(mode="selective"), ) def qwen3_5_v2_4b() -> HyperTrainer.Config: cfg = qwen3_5_v2_debugmodel() cfg.model_spec = qwen3_5_v2_spec_factory("4B") cfg.parallelism = ParallelismConfig( tensor_parallel_degree=2, data_parallel_shard_degree=-1, ) return cfg def qwen3_5_v2_4b_tp2_fsdp4() -> HyperTrainer.Config: cfg = qwen3_5_v2_4b() cfg.parallelism.tensor_parallel_degree = 2 cfg.parallelism.data_parallel_shard_degree = 4 return cfg4.
scripts/train_lm.py改造(≈ 5 行)改造前(现状,
scripts/train_lm.py:39-47):if __name__ == "__main__": args = parse_args(HyperTrainerConfig) discover_model_spec(args.model.name) trainer = LLMTrainer(args) trainer.train()改造后:
from hyper_parallel.config import ConfigManager if __name__ == "__main__": mgr = ConfigManager() config = mgr.parse_args() # 自动识别 --module / yaml trainer = config.build() # HyperTrainer(config) 或 LLMTrainer(legacy) trainer.train()关键点:
ConfigManager.parse_args()内部如果走旧 yaml 路径,返回的是经过_legacy_to_trainer_config后的HyperTrainer.Config(M2)。config.build()即HyperTrainer(config)—— 不论新旧 CLI 入口,都收口到 M5 的HyperTrainer.__init__。LLMTrainer路径仍可手动调用:trainer = LLMTrainer(parse_args(HyperTrainerConfig)),方便回归对比。5. 入口判定规则
ConfigManager.parse_args的判定(M2manager.py):6. 与 torchtitan 接口差异说明
train_lm.py同时支持新 / 旧入口(不像 torchtitan 只有--module一种)config_registry.py模块名qwen3_5_v2(带_v2后缀),torchtitan 是llama3等纯模型名qwen3_5并存,避免 spec 名字冲突discover_model_spec调用时机:tyro 路径里_load_config已经importlib完成发现discover_model_spec7. 开发步骤
config_registry.py的 3 个 recipe(debugmodel / 4b / 4b_tp2_fsdp4)scripts/train_lm.py(约 5 行)8. 验证标准
新建
tests/torch/st/qwen3_5_v2_cli/:test_cli_1card.pypython scripts/train_lm.py --module qwen3_5_v2 --config qwen3_5_v2_debugmodel --training.steps=5test_cli_8card.pytorchrun --nproc_per_node=8 scripts/train_lm.py --module qwen3_5_v2 --config qwen3_5_v2_4b --parallelism.tensor_parallel_degree=2 --training.steps=10test_legacy_yaml.pypython scripts/train_lm.py existing_qwen3_5.yamltest_cli_override.py... --module qwen3_5_v2 --config qwen3_5_v2_4b --training.steps=20 --optimizer.lr=1e-4config.training.steps == 20 and config.optimizer.lr == 1e-4通过门槛:
yaml入口行为 0 改动(与 main 分支 bit-exact)。9. 工期 & 依赖