examples
本文档说明在 hyper-parallel 仓库的 examples/ 下,如何分层、有约束地覆盖 TP、EP、CP、FSDP2(及与之强绑定的 HSDP/DP-replicate、ETP、SP 等)的组合完备性验证,避免对「所有笛卡尔积」做无意义穷举。参考来源:
examples/
examples/distributed/tensor_parallelism
FSDP+TP(+SP)
torchrun
ParallelDims
parallelize
world_size
ep>1 ⇒ (etp==tp ∨ etp==1)
seq_len
docs/design_moe_fsdp_dual_stack.md
init_parallel_state
ParallelPlan
dp_shard_sp
[ep × ep_fsdp]
fully_shard
tests/tools/training_utils.build_torchrun_cmd
关联文档:docs/design_moe_fsdp_dual_stack.md(MoE+FSDP 双栈)、docs/design_expert_tensor_parallel.md(ETP)、docs/design_no_parallel.md(Router/复制型 DTensor)。
docs/design_expert_tensor_parallel.md
docs/design_no_parallel.md
rdzv
cp
>1
fsdp
["dp_replicate","fsdp"]
>=1
fsdp = dp_shard × cp
Rowwise/Colwise/SequenceParallel
dp_shard>1
cp>1
ep
ep>1
etp==tp
etp==1
enable_sequence_parallel
pp 若未在首版 examples 支持,不纳入完备性主表,可在附录保留占位。
pp
Titan 主式(ParallelDims):
[ \text{dp_replicate} \times \text{dp_shard} \times \text{cp} \times \text{tp} \times \text{pp} = \text{world_size}. ]
含 EP/ETP 时,专家域走 另一张 sparse_mesh 的展开,不 乘进上式;须保证 build_mesh 的构造与 rank 布局 在 hyper 的 mesh API 中与 Titan 文档一致(或显式记偏差)。
sparse_mesh
build_mesh
VeOmni:全局 mesh 在 >1 时包含 pp, dp_replicate, dp_shard, ulysses, cp, tp 等;EP 通过 extra_parallel_sizes 等构造 [ep, ep_fsdp] 子网,world_size % ep == 0。Examples 中若以 VeOmni 为对照,同一脚本 应注明 Titan 维名 ↔ VeOmni 维名 映射表(见 §6)。
pp, dp_replicate, dp_shard, ulysses, cp, tp
extra_parallel_sizes
[ep, ep_fsdp]
world_size % ep == 0
seq_len % (tp × cp × 2) == 0
seq_len_divisor
cp=1
num_experts % ep == 0
etp ∈ {1, tp}
ParallelDims._validate
用 3 个层级 覆盖「完备性」,避免维爆炸。
tp=2/4
cp=2/4
dp_shard=2
ep=2/4
不交叉,但保证 每维在 hyper API 上有一条绿灯路径。
参考 Titan 编排顺序(dense,示意):TP(±SP) → CP(注意力) → AC/compile(可选) → FSDP2;MoE 在 Titan 中多为 非 MoE 部分 TP 后再 apply_moe_ep_tp → CP → FSDP2(见 llama4/parallelize.py)。
TP(±SP) → CP(注意力) → AC/compile(可选) → FSDP2
apply_moe_ep_tp
llama4/parallelize.py
examples/.../fsdp_tp_example.py
sequence_parallel_example
cp>1, dp_shard=1
apply_tp
enable_cp
dp_replicate + fsdp
get_mesh(["dp_replicate","fsdp"])
ep>0
design_moe_fsdp_dual_stack
expert_tensor_parallel
在 单节点多卡 上选 1~2 组 满足 ParallelDims 的 小配置(例如 8 卡:(dp_replicate,dp_shard,cp,tp) = (1,2,2,2) 等),MoE 另加 ep,etp 的合法对。
(dp_replicate,dp_shard,cp,tp) = (1,2,2,2)
ep,etp
目的:集成 mesh 自洽 + 与 B 类相比无新逻辑分叉则可在 CI 降权为夜间。
tensor_parallel_example.py
torch/mlp_tensor_parallel.py
sequence_parallel_example.py
SequenceParallel
fsdp_tp_example.py
tp
构建要点:torchrun --nproc_per_node=K 的 K 等于 张量/数据等并行度的乘积;与下节矩阵一致。
torchrun --nproc_per_node=K
torchtitan/distributed/parallel_dims.py
torchtitan/torchtitan/models/*/parallelize.py
parallelize_*
apply_fsdp
edp_mesh
ep_degree
design_moe_fsdp_dual_stack.md
veomni/distributed/parallel_state.py
dp_shard/ulysses/cp/tp
extra_parallel_*
veomni/distributed/torch_parallelize.py
.agents/knowledge/constraints.md
VeOmni/tests/tools/training_utils.py
build_torchrun_cmd
ParallelConfig(fsdp_mode, ulysses_size, ep_size)
映射提示:
下表为 首版 建议覆盖的有编号配方;列 「最小模型」 指验证目标而非生产模型。
tensor_parallel_example
seq_len%
apply_cp
tp×2×cp
llama3
dp_replicate
ExpertParallel
design_expert_tensor_parallel
说明:
GroupedExperts
hyper-parallel/examples
examples/ ├── README.md # 入口;指向本文档;环境与 torchrun 基线 ├── design_examples_parallel_completeness.md # 可选:软链或「见 docs/…」 ├── torch/ │ ├── README.md │ ├── 01_mlp_tensor_parallel/ # 对应 A-TP / M2 │ ├── 02_mlp_seq_parallel/ # 对应 M3(如实现) │ ├── 03_mini_transformer_fsdp_tp/ # 对应 M4–M6、B-1/2/4 │ ├── 04_transformer_fsdp_cp/ # 对应 M5 │ ├── 05_moe_ep_fsdp/ # 对应 S1 + design_moe_fsdp_dual_stack │ ├── 06_moe_ep_tp_etp/ # 对应 S2 │ ├── run_*.sh # 每目录统一 torchrun 封装 │ └── _common/ # 共享:mesh 工厂、小模型、loss 基线 └── mindspore/ # 已有 fully_shard 线可**增量**与 torch 同矩阵对齐(平台允许时)
_common/
build_world_mesh(...)
make_mini_transformer(n_layer, moe=bool)
run_forward_backward_step
loss
0x_*
requirements.txt
run.sh
dp_replicate, dp_shard, cp, tp, ep, etp, pp(=1)
WORLD_SIZE=N
N = dp_replicate * dp_shard * cp * tp * pp
batch
shard
num_experts
etp
TP →(MoE EP/ETP) → CP → FSDP2
backward
grad
[ref*0.5, ref*2]
all_gather
nproc = N
MASTER_PORT
find_free_port
MoE/EP 在资源不足时可 单测 mock all_to_all + 仅 L2 上真机;但 完备性声明 应以 L2 至少 S1+S2 真跑通 为门槛。
all_to_all
README
assert
examples/torch/negative_tests/
parallel_state
dp_shard
ulysses
efsdp
edp
extra_parallel
ep_fsdp
Hyper 文档在引用 VeOmni 时应在具体脚本顶部 4 行以内 写清对照,避免跨团队误读。
examples/distributed/tensor_parallelism/README.md
frame/examples
torchtitan/torchtitan/distributed/parallel_dims.py
torchtitan/torchtitan/models/llama3/parallelize.py
VeOmni/veomni/distributed/parallel_state.py
hyper-parallel/docs/design_moe_fsdp_dual_stack.md
HyperParallel:
examples目录 — 多并行维完备性验证设计本文档说明在 hyper-parallel 仓库的
examples/下,如何分层、有约束地覆盖 TP、EP、CP、FSDP2(及与之强绑定的 HSDP/DP-replicate、ETP、SP 等)的组合完备性验证,避免对「所有笛卡尔积」做无意义穷举。参考来源:examples/distributed/tensor_parallelismFSDP+TP(+SP)与 Mini Llama 的脚本形态与torchrun约定。ParallelDims+ 各模型parallelizeworld_size等式、ep>1 ⇒ (etp==tp ∨ etp==1)、seq_len整除、稠密/稀疏双栈 FSDP(docs/design_moe_fsdp_dual_stack.md)。init_parallel_state+ParallelPlan+ 约束文档dp_shard_sp融合、EP 的[ep × ep_fsdp]子网、FSDP2fully_shard与专家放置;测试侧tests/tools/training_utils.build_torchrun_cmd的参数注入模式。关联文档:
docs/design_moe_fsdp_dual_stack.md(MoE+FSDP 双栈)、docs/design_expert_tensor_parallel.md(ETP)、docs/design_no_parallel.md(Router/复制型 DTensor)。1. 目标与非目标
1.1 目标
examples/中提供可单节点torchrun复现的脚本,证明 HyperParallel 在声明的并行维组合上 前向+反向+一步优化(可选) 可跑通,且与参考基线(单卡/已知好配置)在可接受容差内一致。1.2 非目标
rdzv)字节级一致。cp命名对齐则合并验证;若实现分叉,在矩阵中单列标 「与 VeOmni 对齐时单独测」。2. 并行维符号与有效域
2.1 本设计采用的维(与 TorchTitan 对齐主符号)
>1fsdp子网格组合为["dp_replicate","fsdp"]>=1cp在 Titan 中叠在fsdp = dp_shard × cp上>1fsdp维;整除seq_len见 2.3>1Rowwise/Colwise/SequenceParallelfully_shard使用的 meshdp_shard>1或cp>1(Titan 倾向仍包 FSDP)>1epmesh>1且与ep同用ep>1同时出现;Titan:etp==tp或etp==1enable_sequence_parallel)pp若未在首版 examples 支持,不纳入完备性主表,可在附录保留占位。2.2 World size 等式(稠密,无 EP 在「度」上挤占时)
Titan 主式(
ParallelDims):[
\text{dp_replicate} \times \text{dp_shard} \times \text{cp} \times \text{tp} \times \text{pp} = \text{world_size}.
]
含 EP/ETP 时,专家域走 另一张
sparse_mesh的展开,不 乘进上式;须保证build_mesh的构造与 rank 布局 在 hyper 的 mesh API 中与 Titan 文档一致(或显式记偏差)。VeOmni:全局 mesh 在
>1时包含pp, dp_replicate, dp_shard, ulysses, cp, tp等;EP 通过extra_parallel_sizes等构造[ep, ep_fsdp]子网,world_size % ep == 0。Examples 中若以 VeOmni 为对照,同一脚本 应注明 Titan 维名 ↔ VeOmni 维名 映射表(见 §6)。2.3 序列与形状整除
seq_len % (tp × cp × 2) == 0(seq_len_divisor,含 SP+默认 CP 负载平衡假设)。cp=1)时退化为与 TP+SP 对seq_len的约束。num_experts % ep == 0;ETP 时隐藏维、专家维需可切。2.4 互斥与负例(须在文档与测试中显式标出)
ep>1⇒etp ∈ {1, tp}ParallelDims._validateep;避免「无专家却建 sparse_mesh」的歧义docs/design_moe_fsdp_dual_stack.md:专家/稠密不同fully_shardmesh3. 组合不是全排列:分层覆盖策略
用 3 个层级 覆盖「完备性」,避免维爆炸。
3.1 层级 A:单维冒烟(
world_size最小为维本身)tp=2/4cp=2/4dp_shard=2或 HSDP 最小fully_shard参数分片+梯度无 NaNep=2/4(MoE 桩)不交叉,但保证 每维在 hyper API 上有一条绿灯路径。
3.2 层级 B:双维/三维「工业常见」组合
参考 Titan 编排顺序(dense,示意):
TP(±SP) → CP(注意力) → AC/compile(可选) → FSDP2;MoE 在 Titan 中多为 非 MoE 部分 TP 后再apply_moe_ep_tp→ CP → FSDP2(见llama4/parallelize.py)。examples/.../fsdp_tp_example.py、Titan Llama3enable_sequence_parallel思想;PyTorchsequence_parallel_examplefsdp已含cp;cp>1, dp_shard=1也要 FSDP 的路径seq_len;apply_tp带enable_cpdp_replicate + fsdpget_mesh(["dp_replicate","fsdp"])ep>0触发专家侧 FSDP;design_moe_fsdp_dual_stackexpert_tensor_parallel3.3 层级 C:四维+「Titan 全量小型网格」
在 单节点多卡 上选 1~2 组 满足
ParallelDims的 小配置(例如 8 卡:(dp_replicate,dp_shard,cp,tp) = (1,2,2,2)等),MoE 另加ep,etp的合法对。目的:集成 mesh 自洽 + 与 B 类相比无新逻辑分叉则可在 CI 降权为夜间。
4. 与参考仓库的一一映射
4.1 PyTorch
examples/distributed/tensor_parallelismexamples建议对应tensor_parallel_example.pytorch/mlp_tensor_parallel.py或等价sequence_parallel_example.pySequenceParallel的块fsdp_tp_example.pyfully_shard+tpmesh构建要点:
torchrun --nproc_per_node=K的 K 等于 张量/数据等并行度的乘积;与下节矩阵一致。4.2 TorchTitan
torchtitan/distributed/parallel_dims.py为 黄金参考;examples 的 rank 数 必须满足build_mesh不 assert。torchtitan/torchtitan/models/*/parallelize.py中parallelize_*的 call 序 应被 hyper 的「集成示例」复现(可缩小模型)。apply_fsdp的edp_mesh、ep_degree;design_moe_fsdp_dual_stack.md。4.3 VeOmni
veomni/distributed/parallel_state.py—init_parallel_state的dp_shard/ulysses/cp/tp与extra_parallel_*(EP)。veomni/distributed/torch_parallelize.py;约束见.agents/knowledge/constraints.mdFSDP/EP 条目。VeOmni/tests/tools/training_utils.py的build_torchrun_cmd+ParallelConfig(fsdp_mode, ulysses_size, ep_size)作为 CLI/固定参数 的模板。映射提示:
5. 主矩阵:并行配方与用例建法
下表为 首版 建议覆盖的有编号配方;列 「最小模型」 指验证目标而非生产模型。
tensor_parallel_examplesequence_parallel_examplecp进fsdp维;seq_len%apply_cptp×2×cpllama3dp_replicate+fsdpExpertParalleldesign_expert_tensor_parallel说明:
GroupedExperts或等价 + 可跑通的 router(可 top-1 固定)。6. 建议的
hyper-parallel/examples目录结构_common/应提供:ParallelDims或 hyper 等价的build_world_mesh(...);make_mini_transformer(n_layer, moe=bool);run_forward_backward_step+ 单卡/广播参考 或loss对比。0x_*目录 自洽:requirements.txt、一条 默认run.sh、表格一行 说明覆盖 配方ID。7. 单个用例的构建步骤(模板)
dp_replicate, dp_shard, cp, tp, ep, etp, pp(=1)与WORLD_SIZE=N。N = dp_replicate * dp_shard * cp * tp * pp;若含 稀疏 mesh,用 Titan 或design_moe_fsdp_dual_stack中的 efsdp 公式 检查 不 assert。seq_len与batch:满足 §2.3 整除 与 dataloader 可shard。num_experts可被ep整除;ETP 时与etp与 权重 layout 一致。TP →(MoE EP/ETP) → CP → FSDP2。若 hyper API 名不同,在 README 逐步列调用序列。loss为有限值;backward后 关键参数grad非空且范数在[ref*0.5, ref*2](示例阈值)或与单卡all_gather后 loss 一致(推荐后者 做强校验)。torchrun:nproc = N;MASTER_PORT与 CI 随机端口(可抄 VeOmnifind_free_port模式)。8. CI 分级
MoE/EP 在资源不足时可 单测 mock
all_to_all+ 仅 L2 上真机;但 完备性声明 应以 L2 至少 S1+S2 真跑通 为门槛。9. 验收(examples 子项目)
10. 附录 A:与 VeOmni 的维名快速对照
parallel_state)fsdp(含 cp)dp_shard+ 与 ulysses/cp 的 flatten(dp_shard_sp等)cp+ 可选 ulysses(无)cp、ulysses分列ep+efsdp+edpextra_parallel的ep×ep_fsdpdp_replicatedp_replicateHyper 文档在引用 VeOmni 时应在具体脚本顶部 4 行以内 写清对照,避免跨团队误读。
11. 附录 B:首版不纳入矩阵的扩展项(可后续加行)
torchrun仅作文档,不作为「完备性」必跑12. 参考文献与路径
examples/distributed/tensor_parallelism/README.md(本仓库上游frame/examples若同构)torchtitan/torchtitan/distributed/parallel_dims.pytorchtitan/torchtitan/models/llama3/parallelize.py、llama4/parallelize.pyVeOmni/veomni/distributed/parallel_state.py、.agents/knowledge/constraints.mdhyper-parallel/docs/design_moe_fsdp_dual_stack.md、docs/design_expert_tensor_parallel.md