已开启
【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 8 模型扩展+切换为默认spec #146
changzherui创建于 5月15日
5月15日 修改标题为 “hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M8”
5月15日 修改标题为 “hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M8”
5月15日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”
5月15日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”,原标题为“hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”
5月25日 修改了issue 的描述
5月25日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 8 模型扩展+切换为默认spec”,原标题为“【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”
5月25日 修改标题为 “【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— Part 8 模型扩展+切换为默认spec”,原标题为“【RFC】hyper-parallel 支持torchtitan 风格 Module/Config —— M8 模型扩展+切换为默认spec”
Part 8 — 其他模型迁移 + 切换默认 spec
1. 目标
qwen3_5_moe / qwen3_vl_moe迁移为 v2,覆盖 MoE / VL 两类核心场景。_legacy/。2. 任务边界
M8.1 —
qwen3_5_moe_v2/迁移(按 M6 模式)models/qwen3_5_moe_v2/model.pymodels/qwen3_5_moe/model.pyQwen3_5MoeModel(Decoder) + Qwen3_5MoeTransformerBlock;用 M4models/common/moe.py的MoE / Router / Experts / SharedExpertMoEmodels/qwen3_5_moe_v2/sharding.pyset_qwen3_5_moe_sharding_config(config, *, loss_parallel, enable_sp, ep_degree):声明 EP 切分models/qwen3_5_moe_v2/parallelize.pymodels/qwen3_5_moe/parallelize.py_apply_ep、_apply_ac算法models/qwen3_5_moe_v2/state_dict.pymodels/qwen3_5_moe/state_dict.py:Qwen3_5MoeStateDictAdapterBaseStateDictAdapter,复用旧"专家融合 / 拆分"键名映射models/qwen3_5_moe_v2/config_registry.pyqwen3_5_moe_v2_debug / qwen3_5_moe_v2_a3b / qwen3_5_moe_v2_a3b_ep8等 recipemodels/qwen3_5_moe_v2/__init__.pymodels/qwen3_5_moe/__init__.pyregister_spec("qwen3_5_moe_v2", ModelSpec(...))工期:4 天。
M8.2 —
qwen3_vl_moe_v2/迁移(按 M6 模式 + VL 头)models/qwen3_vl_moe_v2/model.pymodels/qwen3_vl_moe/model.pyQwen3VlMoeModel(BaseModel):vision encoder + projector + text decoder(复用Qwen3_5MoeModel)models/qwen3_vl_moe_v2/vision.pyVisionTower(Module):vision transformer 块(按 Module 协议)models/qwen3_vl_moe_v2/sharding.pyset_qwen3_vl_moe_sharding_config:vision 路径只走 FSDP,不走 TP(与旧版一致)models/qwen3_vl_moe_v2/parallelize.pymodels/qwen3_vl_moe/parallelize.pymodels/qwen3_vl_moe_v2/state_dict.pymodels/qwen3_vl_moe/state_dict.pymodels/qwen3_vl_moe_v2/config_registry.pyqwen3_vl_moe_v2_a3b等 recipemodels/qwen3_vl_moe_v2/__init__.pymodels/qwen3_vl_moe/__init__.pyregister_spec("qwen3_vl_moe_v2", ...)scripts/train_vl.py(改 ≈ 5 行)scripts/train_vl.pyConfigManager.parse_args()工期:5 天。
M8.3 — 切换默认 spec + 清理 legacy + 公共 API + 文档
register_spec("qwen3_5", spec_v2)—— v2 实现替换 v1;models/qwen3_5/移到models/qwen3_5_legacy/,加@deprecated装饰器;同理处理qwen3_5_moe / qwen3_vl_moehyper_parallel/__init__.py新增导出:Module / BaseModel / ModelSpec / ShardingConfig / NamedPlacement / MeshAxisName / set_*_sharding_config / ConfigManager / Configurable / Function(按 §3 列表)docs/zh/module_protocol.mdConfig设计 /update_from_config实现 /set_<name>_sharding_config编写 /parallelize_<name>串联 /state_dict_adapter实现docs/zh/config_system.mdconfig_registry.py模板、字段对照表(参考 M2 文档)docs/migrations/v2_migration.md工期:2 天。
3. M8.3 公共 API 暴露清单
在
hyper_parallel/__init__.py新增:# Module 协议 from hyper_parallel.protocols import ( Configurable, Module, ModuleList, ModuleDict, Sequential, BaseModel, ModelSpec, ShardingConfig, NamedPlacement, LocalMapConfig, MeshAxisName, BaseStateDictAdapter, ) # 配置系统 from hyper_parallel.config import ( ConfigManager, Function, TORCH_DTYPE_MAP, TrainingConfig, ParallelismConfig, ActivationCheckpointConfig, CompileConfig, CommConfig, DebugConfig, ) # 训练组件 from hyper_parallel.components import ( OptimizersContainer, LRSchedulersContainer, BaseLoss, CrossEntropyLoss, BaseTokenizer, HuggingFaceTokenizer, BaseDataLoader, HuggingFaceTextDataLoader, DummyDataLoader, CheckpointManager, Profiler, MetricsProcessor, ) # 通用模型组件 from hyper_parallel.models.common import ( Linear, Embedding, RMSNorm, Qwen3_5RMSNorm, RoPE, GQAttention, FeedForward, MoE, TransformerBlock, Decoder, set_decoder_sharding_config, set_gqa_attention_sharding, set_dense_ffn_sharding, set_qkv_linear_sharding, colwise_config, rowwise_config, norm_config, )4. 与 torchtitan 接口差异说明
<base>_v2用于过渡期;M8.3 切换后改回<base>models/qwen3_5_legacy/保留至少 1 个版本周期才删除vision/projector/text分别 FSDP 包装是 hyper 现有约定models/qwen3_vl_moe/parallelize.py已成熟,不改逻辑5. 开发步骤
M8.1 步骤(4 d)
model.py,重写Qwen3_5MoeModel。sharding.py+parallelize.py(EP 切分声明 + AC + FSDP 串联)。state_dict.py+config_registry.py+__init__.py。M8.2 步骤(5 d)
model.py+vision.py。sharding.py+parallelize.py。state_dict.py。config_registry.py+__init__.py+scripts/train_vl.py。M8.3 步骤(2 d)
register_spec;把旧实现移到_legacy/;加@deprecated;更新hyper_parallel/__init__.py。6. 验证标准
M8.1 / M8.2
tests/torch/st/qwen3_5_moe_v2/test_st_loss.pyqwen3_5_moe同种子误差 ≤ 1e-4tests/torch/st/qwen3_vl_moe_v2/test_st_loss.pytests/torch/st/*/test_state_dict_roundtrip.pyM8.3
tests/torch/st/default_spec_switch/test_qwen3_5_default_v2.pyregister_spec("qwen3_5", ...)切到 v2 后,默认--module qwen3_5 --config qwen3_5_4b命令跑通,loss 与切换前 v2 路径一致tests/torch/st/legacy_yaml/test_legacy_yaml_still_works.pymodels/qwen3_5_legacy/仍然被discover_model_spec找到)docs/zh/module_protocol.md完整覆盖 5 个步骤通过门槛:
import hyper_parallel.X不报错。7. 工期 & 依赖
总工期:~11 天(最短 ~7 天 + 稳定期)。