一句话:并行底座(fully_shard / CE / Muon 库)够用;缺的是把 GlmImageMoe 这条任务 在原生 Hyper 里跑通的产品能力。
fully_shard
GlmImageMoe
vq_to_llm_proj
visual_indices
cu_seqlens
parallelize_fn
parallel_state
get_hyper_optimizer
fully_shard、mesh、CE / loss_parallel、DCP 骨架、Muon 库、通用 LLM/VL Trainer 壳。
下文为分类清单与 P0–P3 / Acceptance 明细。
目标:完全不用 VeOmni,仅用原生 HyperParallel 训练与当前 Omni 冒烟相同的网络(GlmImageMoe:文本 MoE + VQ codebook / DirectToken 路径)。
现有 examples/torch/glm_image_moe_smoke/ 已验证 HP fully_shard 可与 Torch FSDP2 在同 init/batch 下对齐 step1 loss,但实现仍 import veomni(模型 + DirectToken 数据)。本 issue 列出要将这条路径产品化为 零 VeOmni 依赖 时,Hyper 需要补齐的能力(按类目)。
examples/torch/glm_image_moe_smoke/
import veomni
对照结论一句话:
ParallelDims
glm_image_moe
register_spec
discover_model_spec
forward(**batch)
loss
train_*.py
state_dict_adapter
veomni
源码锚点(HP):hyper_parallel/models/spec/registry.py、trainer/base.py、trainer/vl_trainer.py(现仅 Qwen pixel_values 路径)、scripts/train_lm.py / train_vl.py。
hyper_parallel/models/spec/registry.py
trainer/base.py
trainer/vl_trainer.py
pixel_values
scripts/train_lm.py
train_vl.py
现状:仅有 qwen3_5 / qwen3_5_moe / qwen3_vl_moe 三条 Spec;无 GlmImage / Omni / VQ 注册。
qwen3_5
qwen3_5_moe
qwen3_vl_moe
language_model
vq_visual
vq_projector
lm_head
freeze_vq
freeze_vit
ignored_params
GroupedExperts
ep_enabled=False
get_parallel_state()
不可砍的协议细节:
input_ids
lang_vocab_size
ignore_index=-100
_no_split_modules = ["Glm4MoeLiteDecoderLayer"]
prepare_fsdp_root_ignored_params
parallelize_glm_image_moe
ExpertParallel
现状:Trainer 路径对 qwen3_*_moe 在 ep>1/tp>1 直接 NotImplementedError;一等公民是 FSDP/HSDP。库内 EP demo 在 examples/torch/moe/,未挂 ModelSpec。
qwen3_*_moe
ep>1
tp>1
NotImplementedError
examples/torch/moe/
.pt
labels
position_ids
token_micro_bsz
现状:LLM = dummy/HF/json/preset_pt;VL = vl_dummy/preset_pt + Qwen 像素键。无 webdataset、无 DirectToken、无 packing/cu_seqlens collate、无 dyn_bsz。
vl_dummy
preset_pt
Batch 契约(与 VLTrainer 不兼容):
input_ids, labels, position_ids, cu_seqlens, max_seqlens, visual_indices, placeholder_token_id(_index), …
optimizer.type
θ_ema ← β·θ_ema + (1-β)·θ
现状:Trainer _build_optimizer 固定 torch.optim.AdamW;get_hyper_optimizer 库有未接线;无 EMA。
_build_optimizer
torch.optim.AdamW
global_step
ema_state_dict
MoEMonitorCallback
可复用:DCP 骨架、CheckpointCallback。
CheckpointCallback
parallelize_*
建议最小闭环:
M1 模型进 Spec → M2+D1+D2 数据与 forward 契约 → M3+T1 fully_shard 训通(可用 preset_pt 先绕过 WDS) → M4 MoE kernel 定案(parallel_state 桩 或 换 HP MoE) → D3 dyn_bsz / O1 Muon / C1–C2 生产化 → E* 按业务配方补 → U* 官方零 VeOmni 路径
可砍(仍算「同一网络」对照):EMA、aux/bias、multisource 细日志、online-VQ、EP。 不可砍:ModelSpec、DirectToken(或严格等价)数据/collate、parallelize_*、冻结 VQ + ignore、decoder FSDP 边界、vocab/placeholder 语义。
model.name: glm_image_moe
|Δloss| ≤ 1e-5
精简总结:现在 Hyper 缺少什么
一句话:并行底座(
fully_shard/ CE / Muon 库)够用;缺的是把 GlmImageMoe 这条任务 在原生 Hyper 里跑通的产品能力。硬缺(没有就训不了同一张网)
GlmImageMoeModelSpec(VQ + MoE +vq_to_llm_proj)visual_indices、cu_seqlens等)parallelize_fn+ Trainer 专用 batch 路径(现 VL 是 Qwen 像素路径)parallel_state桩,要么换 HP MoE 并对齐生产缺口(能训但不好用 / 对不齐配方)
get_hyper_optimizer(Muon)不缺
fully_shard、mesh、CE / loss_parallel、DCP 骨架、Muon 库、通用 LLM/VL Trainer 壳。背景
目标:完全不用 VeOmni,仅用原生 HyperParallel 训练与当前 Omni 冒烟相同的网络(
GlmImageMoe:文本 MoE + VQ codebook / DirectToken 路径)。现有
examples/torch/glm_image_moe_smoke/已验证 HPfully_shard可与 Torch FSDP2 在同 init/batch 下对齐 step1 loss,但实现仍import veomni(模型 + DirectToken 数据)。本 issue 列出要将这条路径产品化为 零 VeOmni 依赖 时,Hyper 需要补齐的能力(按类目)。对照结论一句话:
fully_shardAPI、ParallelDims/mesh、CE / loss_parallel 算子、DCP 骨架、Muon 库实现、通用 Trainer 壳。一、框架基础(Trainer / 注册 / 生命周期)
glm_image_moe进register_spec/discover_model_specforward(**batch)→losstrain_*.py+ 配置 schema(模型/数据/并行/优化)state_dict_adapterveomniimport 的可跑通示例源码锚点(HP):
hyper_parallel/models/spec/registry.py、trainer/base.py、trainer/vl_trainer.py(现仅 Qwenpixel_values路径)、scripts/train_lm.py/train_vl.py。现状:仅有
qwen3_5/qwen3_5_moe/qwen3_vl_moe三条 Spec;无 GlmImage / Omni / VQ 注册。二、网络与算子(模型本体)
language_model+vq_visual+vq_projector+vq_to_llm_proj+lm_headvisual_indices→ codebook → splice → CEfreeze_vq/freeze_vit/ regex;与 FSDPignored_params联动GroupedExperts并做数值/权重对齐ep_enabled=False桩(现 fused 路径会调get_parallel_state())不可砍的协议细节:
input_ids)lang_vocab_size偏移;CEignore_index=-100_no_split_modules = ["Glm4MoeLiteDecoderLayer"]prepare_fsdp_root_ignored_params;vq_to_llm_proj保持可训三、并行化
parallelize_glm_image_moefully_shard+ rootignored_params+ prefetchExpertParallel+ 本模型 planParallelDims已有字段;对该模型尚未接线(当前非硬门槛)现状:Trainer 路径对
qwen3_*_moe在ep>1/tp>1直接NotImplementedError;一等公民是 FSDP/HSDP。库内 EP demo 在examples/torch/moe/,未挂 ModelSpec。四、数据与 Batch
.pt管线input_ids/labels/visual_indicesposition_ids(mRoPE/token_type)/cu_seqlens/ placeholder idstoken_micro_bsz贪心打包(吞吐对齐)现状:LLM = dummy/HF/json/preset_pt;VL =
vl_dummy/preset_pt+ Qwen 像素键。无 webdataset、无 DirectToken、无 packing/cu_seqlenscollate、无 dyn_bsz。Batch 契约(与 VLTrainer 不兼容):
五、优化与训练语义
optimizer.type→get_hyper_optimizer(Muon/AdamW 等)θ_ema ← β·θ_ema + (1-β)·θ)现状:Trainer
_build_optimizer固定torch.optim.AdamW;get_hyper_optimizer库有未接线;无 EMA。六、存盘 / 续训 / 可观测
global_step/ rng / dataloader;(若开 EMA)ema_state_dictMoEMonitorCallback到 glm router 统计可复用:DCP 骨架、
CheckpointCallback。七、优先级与落地顺序
parallelize_*、训通闭环建议最小闭环:
可砍(仍算「同一网络」对照):EMA、aux/bias、multisource 细日志、online-VQ、EP。
不可砍:ModelSpec、DirectToken(或严格等价)数据/collate、
parallelize_*、冻结 VQ + ignore、decoder FSDP 边界、vocab/placeholder 语义。八、已有验证(参考)
examples/torch/glm_image_moe_smoke/(当前仍依赖 VeOmni)Acceptance(建议)