分布式张量 (Distributed Tensors)
Monarch 与 PyTorch 的深度集成体现在 DTensor (Distributed Tensor) 上。它允许你将一个大张量逻辑上视为一个整体,但物理上分片存储在 Mesh 的各个 Actor 中。
1. 逻辑视图 vs 物理视图
- 逻辑视图:在控制器(Controller)脚本中,它看起来像一个
(1000, 1000)的普通 PyTorch 张量。 - 物理视图:在底层的 Actor Mesh 中,它可能被切分为 4 个
(250, 1000)的小块,分别显存在 4 个 GPU 上。
2. 创建与分发
(注:具体 API 可能会随版本变化,以下为概念性代码)
python
import torch
import monarch
# 创建一个本地张量
local_data = torch.randn(100, 100)
# 定义分片策略:沿着第 0 维(行)切分
# 将其分发到 actor_mesh 上
d_tensor = monarch.distribute(
local_data,
mesh=actor_mesh,
shard_dims=[0] # 0 表示 tensor 的第 0 维映射到 mesh 的第 0 维
)3. 本地化操作
一旦创建了 DTensor,你就可以直接对其进行数学运算。Monarch 引擎会自动生成必要的通信原语。
python
# 所有 Actor 同时执行加法
d_tensor = d_tensor + 5.0
# 聚合操作:需要通信 (AllReduce)
# Monarch 自动处理
global_mean = d_tensor.mean()4. 为什么使用 Monarch DTensor?
与 PyTorch 原生的 DTensor 相比,Monarch 的优势在于它与 Actor 模型 的结合。 你可以将 DTensor 作为参数传递给 Actor 的方法,Monarch 会通过底层优化的 RDMA 通道,直接将张量的分片传输到目标 Actor 的显存中,实现零拷贝传输。
这不仅简化了代码,还极大提升了数据密集型应用的性能。
