ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MLX分布式实战:5 步跑通 mlx.launch 多 Mac 训练

2026/9/4 13:41:31 拓冰建站 浏览量
MLX分布式实战:5 步跑通 mlx.launch 多 Mac 训练 MLX分布式实战5 步跑通 mlx.launch 多 Mac 训练【免费下载链接】mlxMLX: An array framework for Apple silicon项目地址: https://gitcode.com/GitHub_Trending/ml/mlxMLX 是面向 Apple 芯片的数组框架用来在 Apple 设备上做训练与推理。mlx.launch 是它官方提供的多机分布式启动工具一条命令在多台 Mac 上拉起同一个脚本自动管理每个进程的生死并把输出汇总回本地终端。本实战面向手上有两台及以上 Mac、想在局域网里跑分布式任务的新手。最小可用路径一条命令本地跑通先别急着找第二台机器本地单机验证代码。把最短的分布式程序存成my_script.pyimport mlx.core as mx world mx.distributed.init() x mx.distributed.all_sum(mx.ones(10)) print(world.rank(), x)mx.distributed.init()负责初始化分布式通信组单独一个进程运行时它的 size 为 1所有分布式操作自动变成空操作所以单机跑脚本也不会崩。然后直接执行mlx.launch -n 2 my_script.py-n 2表示在本地主机上重复起 2 个进程。看到两个 rank 的输出、每个数组元素都是 2.0两个 1 相加就表示最小集群已经跳动了。本地验证完成接下来接入真正的第二台机器。第 1 步免密登录三步走mlx.launch 连接远程 Mac 的前提是 ssh 免密这也是官方调试清单的第一条见 docs/src/usage/launching_distributed.rst。在发起端生成密钥再把公钥发到各台机器ssh-keygen -t ed25519 for h in mac2 mac3; do ssh-copy-id -i ~/.ssh/id_ed25519.pub $h; done ssh mac2 echo ok最后一行直接验证不回密码提示、打印ok即配置完成。建议顺手把主机别名、端口统一写进~/.ssh/config后面命令会更干净。第 2 步一键生成主机文件主机文件是一个 JSON 列表描述ssh 到哪台机器、用哪些 IP 通信手写容易出格式错误。直接用官方自带的mlx.distributed_config自动生成mlx.distributed_config --verbose --over ethernet \ --hosts mac2,mac3 --output-hostfile hosts.json参数--over选连接方式ethernet 或 thunderbolt--hosts逗号分隔的机器列表--output-hostfile输出路径。成功后会生成 hosts.json内容形如[ {ssh: mac2, ips: [192.168.1.101]}, {ssh: mac3, ips: [192.168.1.102]} ]这个工具会逐台 ssh 上去取 en0 接口的 IP 写进文件哪台机器不满足上一步的免密条件就会在对应环节报错先修好再重跑。第 3 步多机启动并验证主机文件就绪后用这条命令正式启动任务mlx.launch --hostfile hosts.json --verbose my_script.py参数--hostfile指定 JSON 主机文件--verbose打印调试信息。成功时各机器的 rank 输出会汇总到本地终端任何一个进程异常退出mlx.launch 会连带终止其余进程避免留下孤儿进程。命令已经跑起来了但第一次真实报错时怎么查避坑与排查三份清单加一个调试器最常见的故障是ssh 连不上和连接超时。官方给了一份三项自检清单ssh hostname不输密码、不弹确认也能进Python 二进制在所有机器上路径一致——用mlx.launch --print-python查看发起端实际用的路径再到远端比对要执行的脚本在所有机器上位于相同路径。ring 后端默认走 TCP 套接字的环状 all-reduce遇到端口冲突时用--starting-port换端口rank 0 用该端口、后续每个 rank 依次加 1想提高相邻节点间带宽就调大--connections-per-ip。仍看不出问题就加--verbose逐条看每个 ssh 连接卡在哪。更直观的排查手段是用 Xcode 的 Metal 调试器捕获 GPU 任务流Metal 调试器捕获视图可以看到每个 kernel 的实际提交情况便于判断进程是卡在计算还是通信环节。通信链路通了下一步是选对后端。进阶玩法后端切换与多机张量并行mlx.launch 是多个通信后端的统一入口默认 ring 最省事加--backend mpi后它变成 mpirun 的薄封装可用--mpi-arg透传参数比如指定网络接口从 Mac 发起 CUDA 作业则用--backend nccl配合-n 8可在每台节点各起 8 个进程。后端的选型逻辑与初始化行为详见 docs/src/usage/distributed.rst。用雷雳线直连时跑mlx.distributed_config --over thunderbolt会自动完成拓扑配置线缆接乱了就加--dot导出 GraphViz 连接图一眼看出哪根线没接对。链路就绪后多台 Mac 即可跑张量并行推理张量并行的 All-to-Sharded 线性层每台 Mac 只持有权重的一片分片每次乘法后各分片数据全交换。写在最后记住五条本地-n 2先跑通、免密登录、自动生成主机文件、--hostfile启动、三份清单排障MLX 分布式本地调试就通了。更多细节看 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),仅供参考