核心概念:Process Mesh 与 Actor Mesh
进入中级阶段,我们需要更系统地管理大规模资源。Monarch 使用 Mesh(网格) 将杂乱的分布式节点抽象为规整的数组。
1. Process Mesh (进程网格)
Process Mesh 是物理资源的映射。它代表了集群中已分配的一组进程。
多维结构
与简单的列表不同,Mesh 是多维的。你可以根据硬件拓扑来定义它。例如,一个拥有 4 台节点、每节点 8 卡的集群,可以表示为 (4, 8) 的网格。
python
from monarch.actor import this_host
# 逻辑描述:2 台 Host,每台 4 个 GPU 进程
# 维度名称:"hosts", "gpus"
dims = {"hosts": 2, "gpus": 4}
# 在实际集群中,Monarch 会根据配置自动映射物理节点
# 这里演示本地模拟
proc_mesh = this_host().spawn_procs(dims)
print(f"Process Mesh Shape: {proc_mesh.shape}")
# 输出: (2, 4)2. Actor Mesh (Actor 网格)
Process Mesh 只是容器。当我们把代码(Actor 类)加载到容器中时,就得到了 Actor Mesh。
python
class Trainer(monarch.actor.Actor):
pass
# 在 Process Mesh 上批量启动 Actor
# 生成的 trainer_mesh 形状也是 (2, 4)
trainer_mesh = proc_mesh.spawn("trainers", Trainer)3. 维度命名的意义
为什么要有名字("hosts", "gpus")? 在编写分布式策略时,这至关重要:
- 沿着
hosts维度操作:通常涉及跨节点通信(较慢)。 - 沿着
gpus维度操作:通常涉及节点内通信(NVLink,极快)。
通过保留维度信息,Monarch 允许用户编写感知拓扑的高效代码。
