MLX mlx.launch 3 步跑通分布式:多节点启动保姆级指南
【免费下载链接】mlxMLX: An array framework for Apple silicon项目地址: https://gitcode.com/GitHub_Trending/ml/mlx
MLX 是苹果芯片(Apple silicon)专属的数组框架,mlx.launch是它自带的多节点启动工具:一条命令把脚本分发到多台 Mac 上并行执行,自动合并各家输出,任一进程崩溃就收尾其余进程。它适合想在多台 Mac 上做分布式训练或推理的开发者。照本文操作,你最终能跨 2 台以上 Mac 跑通一个分布式all_sum任务,并拿到一份可复用的主机文件。
准备自检
开跑前先逐项确认,缺一不可:
- ✅ 已安装 MLX:
pip install mlx - ✅ 至少 2 台 Apple 芯片 Mac,同局域网或雷电互联
- ✅ 待跑脚本在所有节点同一路径存在
- ✅ Python 解释器路径一致,用
mlx.launch --print-python查看 - ✅ SSH 免密已配好:
ssh 主机名直接进、不提示密码
SSH 还没配好的,先补这一步(对每台机器各执行一次):
ssh-keygen -t ed25519 ssh-copy-id 主机名核心流程
1. 先在本机跑通
目的:先确认本地环境没问题,再上多机。写个最小脚本demo.py:
import mlx.core as mx world = mx.distributed.init() print(world.rank(), mx.distributed.all_sum(mx.ones(10)))本机起 2 个进程:
mlx.launch -n 2 demo.py应看到 rank 0 和 rank 1 各打印一行,每行元素值为 2(两个 1 相加)。
2. 自动生成主机文件
目的:免手写 JSON,避免格式和 IP 对应出错。官方工具会扫网段直接生成:
mlx.distributed_config --over ethernet --hosts mac1,mac2 --output-hostfile hosts.json它自动 ssh 到每台机器取 en0 的 IP,写出 hosts.json,形如:
[{"ssh": "mac1", "ips": ["192.168.1.11"]}, {"ssh": "mac2", "ips": ["192.168.1.12"]}]3. 多节点一键启动
目的:把脚本同时拉到所有节点并行执行,无需手写启动逻辑。
mlx.launch --hostfile hosts.json demo.py它会逐台 ssh 进、起进程、合并各家输出;任一进程失败即终止其余,不残留孤儿进程。
快速排障
| 现象 | 原因 | 处理 |
|---|---|---|
| 反复要密码 / 连不上 | SSH 免密没配 | ssh-copy-id 主机名分发公钥 |
| 某节点 No such file | 脚本路径不一致 | 保证所有节点同一路径 |
| ring 报 requires IPs | --hosts传了主机名 | 用--hostfile提供 IP |
| 卡住 / 超时 | 端口占用或防火墙 | 换--starting-port并放行端口 |
排障时加--verbose看详细日志,ring 后端会自动打开MLX_RING_VERBOSE,nccl 后端自动打开NCCL_DEBUG=INFO。
进阶玩法
换通信后端:雷电 5 的 Mac 用--backend jaccl走低延迟 RDMA,延迟比 ring 低一个量级;CUDA 环境用--backend nccl;跨平台通用选--backend mpi,配--mpi-arg透传 mpirun 参数。多机跑推理时还可用--env给各节点注入统一环境变量。
多节点把大模型拆开推理时,正是这类张量并行拓扑在节点间搬运权重与激活,mlx.launch负责把它们拉起并通信。
MLX 把「多台 Mac 当一台用」的复杂度封装进了mlx.launch与mlx.distributed_config。按上面三步配好 SSH 免密、生成 hostfile、多机启动,分布式任务即可稳定拉起。更多细节见 docs/src/usage/launching_distributed.rst 与 docs/src/usage/distributed.rst。
【免费下载链接】mlxMLX: An array framework for Apple silicon项目地址: https://gitcode.com/GitHub_Trending/ml/mlx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考