Skip to content

核心概念: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 允许用户编写感知拓扑的高效代码。

Monarch中文教程