已开启
[基础能力1] DTensor / DeviceMesh 对标 PyTorch:差距梳理与补齐路线图 #2
changzherui创建于 6月30日
6月30日 修改了issue 的描述
6月30日 修改了issue 的描述
6月30日 修改标题为 “[基础能力1] DTensor / DeviceMesh 对标 PyTorch:差距梳理与补齐路线图”,原标题为“[基础能力] DTensor / DeviceMesh 对标 PyTorch:差距梳理与补齐路线图”
6月30日 修改标题为 “[基础能力1] DTensor / DeviceMesh 对标 PyTorch:差距梳理与补齐路线图”,原标题为“[基础能力] DTensor / DeviceMesh 对标 PyTorch:差距梳理与补齐路线图”
changzherui
7月1日 评论:
7月1日 评论:
已新增 §1 DTensor / DeviceMesh 全量接口对标总表(接口名 · 参数 · 功能 · hyper · pytorch · titan):#7 DTensor / DeviceMesh 全量接口对标总表


一、目标与背景
本 Issue 目标: 在保持 Hyper 现有架构不变的前提下,完善 DTensor / DeviceMesh 基础能力,使其在语义与 API 上尽可能对齐 PyTorch
torch.distributed.tensor+device_mesh,降低 PyTorch 生态迁移成本。上级文档: 本 Issue 是 HyperParallel / PyTorch / TorchTitan 用户接口对标 在 DTensor 模块的子专项,聚焦「基础分布式张量层」的差距分析与补齐计划。
分析依据(源码):
torch/distributed/{tensor,device_mesh}hyper_parallel/core/dtensor、core/shard/_op_dispatch.py一致性图例(附录中使用): ✅ 一致 · ⚠️ 部分一致 · ❌ 仅一侧有 · 🔶 Hyper 扩展
二、范围与架构约束
2.1 模块范围
本 Issue 覆盖以下子模块的对标与补齐:
tensor/placement_types.pycore/dtensor/placement_types.pyDTensorSpec)core/dtensor/layout.pydistributed/device_mesh.pycore/dtensor/device_mesh.pytensor/_api.pycore/dtensor/dtensor.pytensor/_redistribute.pycore/dtensor/tensor_redistribution.pytensor/_dispatch.py+_ops/core/shard/_op_dispatch.pytensor/_random.pycore/dtensor/random.py2.2 架构约束(补齐前提)
以下设计保持不变,补齐工作在此基础上演进:
DTensor继承DTensorBase(平台包装类),不改为torch.Tensor子类Layout作为 Hyper 核心抽象(alias /tensor_map),不移除_op_dispatch分发,不改为 PyTorch 式全量__torch_dispatch__2.3 与 PyTorch 的三条结构性差异
理解以下差异,是阅读后文差距与路线图的前提:
DeviceMesh + placements;Hyper 额外有Layout(MindSpore 风格 alias /tensor_map)。aten自动 sharding;Hyper 依赖注册表,未覆盖 op 走 full-gather 回退。distribute_tensor含 scatter/broadcast;Hyper 当前仅本地 slice(P0 首要补齐项)。三、对标结论(速览)
3.1 已对齐的能力(可直接复用思路)
init_device_mesh+mesh["dp"]子 meshrank_list/init_backendDTensor.from_local+Shard/Replicate/Partialredistribute/full_tensor(同步路径)grad_placements/async_opdistribute_module+partition_fnCellmanual_seed+OffsetBasedRNGTrackerget_current_mesh上下文_mesh_resources对齐3.2 Hyper 独有能力(保留,不作为补齐对象)
Layout别名切分("dp","None")init_parameters/init_empty_weights/init_on_device分片初始化链SkipDTensorDispatch、reduce_partial()显式 APIget_device_num_along_axis、get_comm_group_by_axis等3.3 按场景一致性总表
init_device_mesh+ 子 mesh 切分rank_list差异from_local+ Placementparallelize中distribute_tensorto_local/redistribute/full_tensoratenop 作用于 DTensorsrc_data_rankdistribute_modulerandn初始化StridedShard3.4 迁移三原则
distribute_tensor等同 PyTorch 同名函数——当前无 scatter/broadcast。grad_placements/async_op的代码需改写——补齐前按 P1 路线图规划。四、能力差距(PyTorch 可达 · Hyper 未达)
4.1 阻塞级差距(对应 P0)
distribute_tensor(src_data_rank)atenop dispatch 覆盖from_local(run_check=True)rand/randn工厂distribute_tensor、工厂函数4.2 高级并行差距(对应 P1)
to_local/full_tensor(grad_placements)redistribute(async_op=True)AsyncCollectiveTensorStridedShard公开 APIPartial归约类型redistribute/full_tensorautograddistribute_module+ 单源分布4.3 完备性与性能差距(对应 P2)
redistribute(forward_dtype, backward_dtype)init_device_mesh(backend_override=)logspace+ 工厂签名对齐4.4 明确不在本 Issue 补齐范围
torch.TensorDTensorBase架构torch_xlatorch.compile/ PT2 协议_MaskPartial、SymInt mesh五、补齐路线图(P0 → P1 → P2)
5.1 优先级总览
5.2 P0 — 必须补
distribute_tensor通信语义Shardscatter /Replicatebroadcast;src_data_rank=None可跳过atenop dispatch 覆盖__all__distribute_tensor、ones/zeros/empty/full+ 文档from_local(run_check=True)rand/randn工厂5.3 P1 — 应补
grad_placementsautograd.Function包装to_local/full_tensorredistributeAsyncCollectiveTensorStridedShard公开__all__+ FSDP+TP 测试Partial归约对齐product/prod别名;avg语义一致distribute_module贯通5.4 P2 — 建议补
redistributedtype castforward_dtype/backward_dtypebackend_override公开init_device_meshstrict模式 + fallback 计数Layout/placements 序列化 adapterlogspace+ 工厂签名5.5 里程碑
5.6 执行优先级结论
distribute_tensor通信 + op dispatch 覆盖 — 不改架构下收益最大。grad_placements+ 异步redistribute— 解锁 CP / FSDP 高级场景。附录 A:逐类逐接口对照
A.1 Placement 类型
Placement(基类)Placement+ Python 包装is_shard/is_replicate/is_partial__eq__/__hash__Shard/StridedShard/Replicate/PartialShard(dim)StridedShard/_StridedShardReplicatePartial(reduce_op)_MaskPartialA.2
Layout(🔶 Hyper 独有)Layout+ alias("dp","None")placement_to_tensor_mapto_dict()/ MindSpore 互操作A.3
DeviceMeshinit_device_mesh、get_current_mesh、__enter__rank_list、init_backend、轴查询 APIbackend_override(公开)、SymInt coordinate__getitem__、flatten、concatenatemesh属性(Tensor 形式)A.4
DTensor类from_localrun_check/grad_placementsdistribute_tensorto_local/redistribute/full_tensorshape/local_shape/sizecopy_/zero_/fill___tensor_flatten__、DCP 元数据、compile 协议layout属性、SkipDTensorDispatch、alias placementsA.5 模块级函数
distribute_moduleones/zeros/empty/fullrand/randn/logspaceinit_parameters等A.6 RNG 与工具
manual_seed/OffsetBasedRNGTracker/fork_rngcompute_local_shape_and_global_offsetvisualize_sharding/try_find_mesh_from_argsA.7 与 TorchTitan 的关系
SpmdLayout,非 HyperLayout。ParallelDims/ mesh 测试中有 TorchTitan 兼容用例,但 DTensor 层仍走 HyperLayout路径。父 Issue:HyperParallel / PyTorch / TorchTitan 用户接口对标 · 姊妹专项:HSDP / FSDP 子专项