用 mlx.launch 跑通 MLX 多机分布式任务:配置、启动与排障
发布时间:2026/9/4 9:45:16 作者:尧图编辑部 阅读量:1,286

用 mlx.launch 跑通 MLX 多机分布式任务配置、启动与排障【免费下载链接】mlxMLX: An array framework for Apple silicon项目地址: https://gitcode.com/GitHub_Trending/ml/mlxMLX 是苹果芯片上的数组框架内置的分布式模块能把训练或推理的开销分摊到多台 Mac 上配套的mlx.launch和mlx.distributed_config负责多机启动与网络配置。读完全文你可以把一台 Mac 上的脚本原封不动地跑在多台 Mac 组成的集群里并知道启动失败时从哪里排查。跑起来之前的准备安装 MLX 官方 Python 包自带mlx.launch与mlx.distributed_config两个命令行入口pip install mlx为每台 Mac 配好 SSH 免密登录ssh hostname回车后直接进、不再要密码或确认确认脚本和 Python 解释器在所有机器上位于同一路径用mlx.launch --print-python查看当前解释器的实际路径通信后端按需准备默认的 ring 后端只走 TCP 套接字、零依赖想用 MPI 后端则需另装 OpenMPI核心操作逐步走先在单机跑通先在一台 Mac 上拉起 2 个进程验证环境不碰任何网络配置。写一个最小脚本import mlx.core as mx world mx.distributed.init() x mx.distributed.all_sum(mx.ones(10)) print(world.rank(), x)这条命令在本机重复启动脚本 2 次mlx.launch -n 2 my_script.py预期输出rank 0 和 rank 1 各打印一行每行是一个 10 个 2 的数组说明两个进程之间完成了求和通信。单进程直接python运行时mx.distributed的所有操作都是无操作的空操作即不做任何通信直接返回原值方便你日常单机调试。打通多节点免密登录mlx.launch靠 SSH 登录每台机器拉起进程密钥没配好时每次都会卡在密码提示。生成密钥对并推送到各节点ssh-keygen -t ed25519 -C mlx-distributed for host in mac-1 mac-2; do ssh-copy-id -i ~/.ssh/id_ed25519.pub $host done用ssh mac-1 echo ok验证秒回ok即为成功主机别名可以统一写进~/.ssh/config后续命令就不用带用户名。生成主机文件主机文件是一个 JSON 数组每项用ssh字段写登录用的主机名、ips字段写通信绑定的 IP。多台 Mac 走以太网时直接让mlx.distributed_config代劳mlx.distributed_config --verbose --over ethernet \ --hosts mac-1,mac-2 --output-hostfile hosts.json这条命令会逐台登录检查连通性、提取en0接口的 IP 并写出主机文件预期看到逐台 ssh access ok 的日志最终在本地生成hosts.json。用 Thunderbolt 组网时把--over换成thunderbolt并加上--auto-setup它会自动为每条线建子网并配置好节点。启动多机任务并验证确认主机文件无误后带着详细日志把任务发到两台 Macmlx.launch --verbose --hostfile hosts.json my_script.py这条命令会 SSH 到每台机器、按主机文件顺序把 rank 0、1 依次绑上去预期看到 rank 0 与 rank 1 各输出一行求和结果中途 Ctrl-C 会终止所有远端进程不会留下挂死的任务。脚本输出会按进程混在标准输出里想按 rank 区分时把每行日志都带上world.rank()即可。一个能落地的场景四台 Mac 数据并行训练背景一台 Mac 显存和算力不够想利用闲置的四台 M3 Ultra 分摊一个模型的训练步。四台 Mac 用 Thunderbolt 线两两直连成全连接网状先确认连接关系mlx.distributed_config --verbose --hosts m3-1,m3-2,m3-3,m3-4 \ --over thunderbolt --backend jaccl --dot | dot -TpngMLX 分布式 Thunderbolt 全连接拓扑示意图四台 Mac 两两直连构成 mesh自动配置网络并生成主机文件mlx.distributed_config --verbose --hosts m3-1,m3-2,m3-3,m3-4 \ --over thunderbolt --backend jaccl \ --auto-setup --output-hostfile m3-jaccl.json用mlx.launch分发你的训练脚本脚本内部用all_sum对梯度求和再除以节点数参数即保持全局同步。结果四个 rank 各自吃一份数据、独立算梯度每步通信一次就把梯度平均完整机吞吐约为单机四倍某根线松动时配置脚本会直接指出是哪两台机器没连上拔插重跑即可。踩坑速查现象可能原因处理动作SSH 反复要密码公钥未分发或别名不一致用 ssh-copy-id 补齐后重试启动后超时退出通信端口被占用换--starting-port端口再试主机文件解析报错JSON 格式或字段拼错按 ssh、ips 两个字段核对重写运行了但没有通信只拉起了一个进程加-n 2或多节点 hostfile远端报脚本找不到各机路径不一致脚本同步到同一路径再启动排障第一步--verbose打开逐条日志第二步mlx.launch --print-python核对各机解释器路径是否一致。收尾一次配好免密登录与主机文件之后多机分布式就从调环境变成了跑命令。想继续深入看 docs/src/usage/launching_distributed.rst 了解各后端的完整参数以及 docs/src/examples/data_parallelism.rst 里的数据并行训练完整写法。【免费下载链接】mlxMLX: An array framework for Apple silicon项目地址: https://gitcode.com/GitHub_Trending/ml/mlx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考