
Meta 的 PyTorch 团队推出了Monarch,这是一个开源框架,旨在简化跨多个 GPU 和机器的分布式 AI 工作流。该系统引入了一个单控制器模型,允许一个脚本协调整个集群的计算,降低了大规模训练和强化学习任务的复杂性,而无需改变开发者编写标准 PyTorch 代码的方式。
Monarch 用单控制器模型取代了传统的多控制器方法,即同一脚本的多个副本在不同机器上独立运行。在这种架构中,一个脚本协调一切——从生成 GPU 进程到处理故障——给开发者一种在本地工作的感觉,而实际上却是在整个集群上运行。
PyTorch 团队将其描述为将“将单机 PyTorch 的简单性带到整个集群”。开发者可以使用熟悉的 Python 结构——函数、类、循环、future——来定义可以无缝扩展的分布式系统,而无需重写逻辑来手动处理同步或故障。
在核心层面,Monarch 引入了进程网格和角色网格,这些是可扩展的分布式资源数组,可以像 NumPy 中的张量一样进行切片和操作。这意味着开发者可以将任务广播到多个 GPU,将它们分成子组,或者使用直观的 Python 代码从节点故障中恢复。在底层,Monarch 将控制与数据分离,允许命令和大型 GPU 到 GPU 传输通过不同的优化通道移动,以提高效率。
来源:PyTorch 博客
开发者甚至可以使用标准的 Python try/except 块捕获来自远程角色的异常,逐步增加容错性。与此同时,分布式张量直接与 PyTorch 集成,因此即使在数千个 GPU 上运行,大规模计算仍然“感觉”是本地的。
系统的后端是用 Rust 编写的,由一个名为 hyperactor 的低级角色框架提供支持,该框架在集群中提供可扩展的消息传递和强大的监督。这种设计允许 Monarch 使用多播树和多部分消息传递高效地分发工作负载,而不会使任何一台主机过载。
该系统的发布已经引起了 AI 社区从业者的关注。高级应用 AI 工程师 Sai Sandeep Kantareddy写道:
Monarch 是朝着以最小阻力扩展 PyTorch 的方向迈出的坚实一步。很好奇它在现实世界的分布式工作负载中的表现——尤其是与 Ray 或 Dask 相比。希望能看到更多关于调试支持和大规模容错性的信息。有希望的开始!
Monarch 现在是GitHub上的一个开源项目,包含文档、示例笔记本和 Lightning.ai 的集成指南。该框架旨在使集群规模的协调像本地开发一样直观,为研究人员和工程师从原型到大规模分布式训练提供更平滑的路径。
原文链接:








评论