生态集成与应用案例
Monarch 并非孤岛,它旨在与 PyTorch 现有的强大生态系统共存并赋能。官方仓库的 examples/ 目录提供了一批可直接运行的实战示例,本章逐一拆解。
1. 与 TorchTitan 集成 (LLM 预训练)
TorchTitan 是 PyTorch 官方的大模型训练库,Monarch 可以作为它的底层编排引擎。官方提供了三个 Slurm 场景的 notebook:
slurm_titan.ipynb:在 Slurm 集群上用 Monarch 编排 TorchTitan 做 LLM 预训练;slurm_ddp.ipynb:Monarch 编排 DDP 训练;slurm_allreduce.ipynb:集合通信实验。
典型场景:在 Lightning AI Notebook 或 Jupyter 中交互式启动 Llama 的预训练。
- 持久化计算:Notebook 关闭后,后台的训练 Actor 依然存活。重新连接 Notebook 即可 Attach 到现有的训练作业;
- 交互式调试:你可以在 Notebook 中暂停训练,检查某个 rank 的梯度范数,甚至动态修改学习率,然后继续训练。
官方博客与教程:
- PyTorch 官方博客《Introducing PyTorch Monarch》
- DevX 教程:Monarch distributed tutorial
- Lightning AI:《Large-scale interactive training with Monarch》
2. 强化学习 (RL) 工作流
RL 是最适合 Monarch 的场景之一,因为它涉及异构计算角色的复杂交互。官方 examples/ 下的 grpo 系列示例(grpo_sim.py、grpo_actor.py、grpo_te_sim.py 等)完整演示了 GRPO(Group Relative Policy Optimization)在 Monarch 上的编排。
传统痛点
RL 训练循环通常包含三类角色:
- Generator:CPU 密集,模拟环境,生成数据;
- Inference:GPU 密集,用旧策略网络推理;
- Trainer:GPU 密集,用新数据更新策略网络。
协调这三者通常需要复杂的微服务架构或消息队列。
Monarch 解决方案
用 Monarch,这三个角色就是三个 ActorMesh:
gen_mesh:运行在 CPU 节点;infer_mesh:运行在 GPU 推理节点;train_mesh:运行在 GPU 训练节点。
控制器脚本是一个简单的 while 循环,不断在三个网格之间搬运数据:
# 伪代码(基于官方 grpo 示例简化)
while training:
# 1. 生成 rollout(gen_mesh,CPU)
prompts = train_mesh.get_next_prompts.call().get()
rollouts = gen_mesh.generate.call(prompts).get()
# 2. 推理打分(infer_mesh,GPU)
scores = infer_mesh.score.call(rollouts).get()
# 3. 更新策略(train_mesh,GPU)
train_mesh.update.call(rollouts, scores)Actor 引用在网格间传递(见中级教程第 4 节),角色可以自由搬迁而不改代码——这正是单控制器模型在异构编排上的杀手级应用。
3. 更多官方示例速览
| 示例 | 演示内容 |
|---|---|
hello_gather_mount.py | 入门:最简单的 Actor 启动与聚合 |
ping_pong.py | Actor 间点对点消息往返 |
crawler.py | 用 Actor 构建并发爬虫 |
debugging.py | 远程调试技巧 |
gpu_sharing.py | 多 Actor 共享 GPU |
rdma_pingpong | RDMA 点对点传输基准 |
remotemount/ | 远程挂载示例 |
kubernetes/ | K8s 部署 |
skypilot/ | SkyPilot 调度 |
example_actors/compute_world_size_actor.py | 计算 world size 的实用 Actor |
4. 部署与调度
Monarch 通过配置文件封装调度系统(Slurm、Kubernetes、SkyPilot),hosts_from_config() 加载配置后获得 HostMesh,后续操作完全一致:
from monarch.job import hosts_from_config
hosts = hosts_from_config("MONARCH_HOSTS")
procs = hosts.spawn_procs(per_host={"gpus": 8})从源码构建 Docker 镜像部署到 K8s 集群的完整流程,见官方 README 的 "Building a Docker Image from Source" 一节。
5. 总结
Monarch 通过提供灵活的编程原语,让开发者能够跳出 SPMD 的限制,构建更复杂、更智能、更具弹性的 AI 系统:
- TorchTitan + Monarch:交互式 LLM 预训练,Notebook 只是窗口,训练在后台持续;
- GRPO + Monarch:RL 异构编排的标准范式,三个网格一个循环;
- 调度器无关:Slurm / K8s / SkyPilot 统一成一份配置。
无论你是做大模型预训练,还是复杂的强化学习探索,Monarch 都能提供强有力的支持。
