首页/新闻资讯/正文详情

LMFlow 多节点训练实战:从 pdsh、SSH 信任链到 DeepSpeed hostfile 的完整配置指南

发布时间:2026/9/25 6:59:33 来源:云帆数科 栏目:资讯中心
LMFlow 多节点训练实战:从 pdsh、SSH 信任链到 DeepSpeed hostfile 的完整配置指南
人工智能大模型微调模型评测强化学习多模态【免费下载链接】LMFlowAn Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.项目地址https://gitcode.com/gh_mirrors/lm/LMFlow点击查看免费下载本文基于 LMFlow 官方多节点训练文档docs/readme/multi_node.md整理讲解如何使用deepspeed - PDSH torch.distributedNCCL通信栈搭建跨节点训练环境覆盖从 SSH 免密信任、hostfile 配置到防火墙排查的全流程。读完本文你可以独立完成一台多节点 GPU 集群上 LMFlow 分布式微调的环境搭建与训练启动并理解每个配置项在 LMFlow 源码中的实际作用。一、LMFlow 多节点训练的通信栈LMFlow 的多节点通信主要依赖如下技术栈引自官方文档原文deepspeed - PDSH torch.distributed (which requires NCCL)即DeepSpeed 命令行启动器负责在集群各节点上拉起进程它通过PDSHParallel SSH向所有节点并行下发远程命令PDSH默认使用ssh作为远程执行协议由PDSH_RCMD_TYPEssh指定因此跨节点SSH 免密是整个方案的地基每个节点上真正干活的是torch.distributed其跨节点通信底层依赖NCCL因此需要正确指定通信网卡NCCL_SOCKET_IFNAME。理解了这条链路就能理解为什么多节点训练失败时问题往往不在模型或数据而在于 pdsh 没装、SSH 信任链不完整、hostfile 写错、防火墙没关这类环境层问题。二、环境搭建八步完整流程以下流程以 Ubuntu 为例。一个重要的前提判断是如果集群有 NFS 共享存储环境只需要在共享目录中配置一次否则下述每个步骤都要在集群的每一个节点上重复执行。Step 1先完成单机配置在开始任何多节点操作前先按照 LMFlow 主 README 完成单节点环境的搭建依赖安装、Python 环境等。这一步是后续所有步骤的基础。Step 2安装 pdsh# Require root permission apt-get install pdshpdsh是 DeepSpeed 启动器向多节点并行分发命令的工具需要 root 权限安装。Step 3配置~/.bashrc环境变量# In ~/.bashrc export NCCL_SOCKET_IFNAMEeth0 export PDSH_RCMD_TYPEsshNCCL_SOCKET_IFNAMEeth0告诉 NCCL 使用哪块网卡进行跨节点通信。在多网卡机器上管理网 内网训练网卡必须指定正确的内网网卡名否则可能出现走错网卡导致的通信缓慢或完全不通。请按你机器实际的网卡名调整PDSH_RCMD_TYPEssh指定 pdsh 的默认远程执行协议为 ssh。从源码结构看LMFlow 对分布式环境变量有明确感知src/lmflow/utils/constants.py 中列出的RANK、WORLD_SIZE、MASTER_ADDR、MASTER_PORT、TORCH_NCCL_ASYNC_ERROR_HANDLING等正是torch.distributed/ NCCL 体系下的标准环境变量约定。这意味着 DeepSpeed 启动器通过环境变量注入的 rank/world_size 信息会被 LMFlow 的运行环境直接使用而NCCL_SOCKET_IFNAME则决定了这套通信在物理层走哪条链路。Step 4建立节点间 SSH 免密信任关键步骤跨节点ssh必须无密码。从服务器 A 建立到服务器 B 的信任步骤如下4.1 在服务器 A 上执行cat ~/.ssh/id_rsa.pub查看公钥。若~/.ssh/id_rsa.pub不存在先运行ssh-keygen生成密钥对4.2 在服务器 B 上将 A 的公钥内容追加到 B 的~/.ssh/authorized_keys文件不存在则创建4.3 在服务器 A 上执行ssh {server_B_ip}验证免密登录同时这一步会把 B 加入 A 的 known_hosts。信任矩阵规模问题假设服务器 B 的内网 IP 为100.100.100.100验证方式就是在 A 上执行ssh 100.100.100.100。你也可以用 pdsh 做进一步验证pdsh -w 100.100.100.100 ls该命令若能在 B 上列出目录内容说明 pdsh 链路已通。两个重要的量级说明原文强调有 NFS 时只需做一次即把~/.ssh/id_rsa.pub的内容写入共享目录中的~/.ssh/authorized_keys无 NFS 时若有N个节点需要为所有节点对重复上述流程N × N次——包括 1→1、1→2、…、1→N、2→1、…。注意 1→1节点到自身的 ssh 信任也是必需的这一点容易被忽略。Step 5编写 hostfileDeepSpeed 要求通过 hostfile 描述集群所有节点的资源。假设集群有 3 个节点节点GPU 数内网 IPServer A8100.100.100.1Server B8100.100.100.2Server C4100.100.105.1则configs/hostfile内容为100.100.100.1 slots8 100.100.100.2 slots8 100.100.105.1 slots4每行格式为内网IP slotsGPU数。hostfile 中的 GPU 数是逻辑槽位声明用于 DeepSpeed 计算 world size 与进程分配。Step 6检查防火墙节点间防火墙可能阻断节点互通。文档给出了一个典型症状训练会卡在初始化阶段 20 分钟以上且没有任何报错让人无从判断发生了什么。请确保内网中各节点间防火墙已关闭。官方强烈推荐使用 NVIDIA 的NCCL test toolkitnccl-tests进行调试——因为仅凭卡住这一表象几乎无法定位 NCCL 层故障而 nccl-tests 可以直接压测节点间 ring/allreduce 带宽与连通性。Step 7逐节点验证单机训练在每一个节点上先确保单机训练可以正常跑通。文档特别警告任何一个节点上的失败都会导致多节点训练整体失败且极难调试。先单机后多节点是把故障域收敛到单台机器的最有效手段。Step 8启动多节点训练在主节点main node上运行训练脚本。主节点负责在每个客户端节点上启动torch.distributed并拉起分布式训练。沿用上文 Step 5 的三节点示例命令形如原文示例./scripts/run_continual_pretrain.sh \ --model_name_or_path meta-llama/Meta-Llama-3-8B \ --data/alpaca/train_conversation \ --output_model finetuned_llama \ --deepspeed_args --master_port11000 --master_addr100.100.100.1 --include100.100.100.1:0,1,2,3,4,5,6,7100.100.100.2:0,1,2,3,4,5,6,7100.100.105.1:0,1,2,3 --hostfileconfigs/hostfile \--deepspeed_args中各参数的含义参数取值说明--master_port11000torch.distributed 主节点监听端口各节点进程通过它完成 rendezvous--master_addr100.100.100.1主节点rank 0 所在机器的内网 IP必须与 hostfile 中第一个节点一致--includeip:gpu_listip:gpu_list...显式枚举每个节点使用的 GPU 编号分隔节点、:分隔 IP 与 GPU 列表--hostfileconfigs/hostfile指向 Step 5 编写的节点清单文件需要注意的适配提示上文是文档示例脚本run_continual_pretrain.sh的调用形式在当前仓库中基于 deepspeed 启动器的脚本范例可见 scripts/archive/run_finetune.shdeepspeed_args--master_port11000默认值 deepspeed ${deepspeed_args} examples/finetune.py ...的调用模式而当前仓库主干脚本 scripts/run_finetune.sh 已转向accelerate launch方式两者互斥使用 DeepSpeed 启动器时训练参数通过--deepspeed configs/deepspeed/zero*.json传入 JSON 配置参数定义见 src/lmflow/args.py。多节点场景下可结合 configs/deepspeed/zero3.json 这类 ZeRO-3 配置其中offload_optimizer.devicecpu、overlap_commtrue等项在多节点大模型训练中尤为关键。初始化耗时的现实预期文档提醒在内网带宽有限的集群上正常的分布式初始化就可能耗时约 20 分钟——这与程序卡死的表象几乎无法区分。因此正式跑训练前务必先用 NCCL test toolkit 验证节点间通信确实可用把慢和死区分开。三、源码视角LMFlow 如何接入这套分布式环境结合仓库源码可以确认 LMFlow 对上述通信栈的接入方式DeepSpeed 环境下的进程初始化。在非 accelerate 环境即由deepspeed启动器拉起时src/lmflow/models/hf_model_mixin.py 会调用deepspeed.init_distributed()并通过deepspeed.initialize(model...)包装模型推理侧的 src/lmflow/pipeline/inferencer.py 与 src/lmflow/pipeline/rm_inferencer.py 同样以deepspeed.init_distributed()作为入口。这说明 Step 3 设置的 NCCL 环境变量、Step 8 注入的--master_addr/--master_port最终都在这一步生效环境变量约定。src/lmflow/utils/constants.py 中枚举的分布式环境变量含TORCH_NCCL_ASYNC_ERROR_HANDLING表明 LMFlow 内部子进程管理会显式处理这些 torch.distributed/NCCL 变量进一步印证其通信栈就是文档所述的deepspeed - PDSH torch.distributed (NCCL)ZeRO 配置即插即用。--deepspeed参数接受 JSON 配置路径见 src/lmflow/args.py仓库 configs/deepspeed/ 目录下提供了zero0_no_offload.json、zero2.json、zero3.json、zero3_no_offload.json等多种档位多节点训练时按显存/带宽情况选择即可。四、排障速查清单基于文档强调的故障模式多节点训练卡住/失败时建议按以下顺序排查pdsh 是否可用pdsh -w {节点IP} ls能否列出目录SSH 信任是否完整每个节点对含自身→自身ssh {对端IP}是否免密NCCL 网卡是否正确NCCL_SOCKET_IFNAME是否指向训练内网网卡防火墙内网节点间是否放行症状卡在初始化 20 分钟以上无报错单机基线每个节点是否都独立跑通过单机训练用 nccl-tests 复测区分初始化慢带宽有限与通信死锁环境故障。完整环境说明与原始命令见 docs/readme/multi_node.md单机训练参数可参考 scripts/run_finetune.sh 与 configs/deepspeed/ 下的配置。赞分享人工智能大模型微调模型评测强化学习多模态【免费下载链接】LMFlowAn Extensible Toolkit for Finetuning and Inference of Large Foundation Models. Large Models for All.项目地址https://gitcode.com/gh_mirrors/lm/LMFlow点击查看免费下载相关推荐ms-swift 多机 DeepSpeed 分布式训练实战从 pdsh 部署到 hostfile 启动 SFT 的完整链路ms swift 多机 DeepSpeed 分布式训练实战从 pdsh 部署到 hostfile 启动 SFT 的完整链路 本文基于仓库中 examples/后端Web框架DeepSpeedExamples多节点训练跨GPU集群部署实战DeepSpeedExamples多节点训练跨GPU集群部署实战 引言实现大模型训练的算力突破 你是否正面临这些挑战单节点GPU内存不足无法加载百亿参数模示例工程SkyPilot 多节点 DeepSpeed 分布式训练实战hostfile 自动构建与集群环境变量SkyPilot 多节点 DeepSpeed 分布式训练实战hostfile 自动构建与集群环境变量 导读 本文围绕仓库中 examples/deepspee后端任务调度MLOps集群管理上一篇最完整的Apache RocketMQ监控指标指南含义与实战阈值下一篇内核代码审查清单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

算子深度解析:从数学定义到图像处理与GPU开发实战
算子深度解析:从数学定义到图像处理与GPU开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:59:26

VisiData 贡献指南:从社区推广、Bug 报告到源码提交的完整协作流程
VisiData 贡献指南:从社区推广、Bug 报告到源码提交的完整协作流程

数据分析CLI数据可视化 【免费下载链接】visidata A terminal spreadsheet multitool for discovering and arranging data 项目地址: https://gitcode.com/gh_mirrors/vi/visidata 点击查看 免费下载 VisiData 是一款在终端中探索与整理数据的"电子表格瑞士军… · 2026/9/25 6:59:26

网页视频如何另存为文件:猫抓 cat-catch 资源嗅探工具完整指南
网页视频如何另存为文件:猫抓 cat-catch 资源嗅探工具完整指南

网页视频如何另存为文件:猫抓 cat-catch 资源嗅探工具完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-ca… · 2026/9/25 6:59:26

SQLite3跨平台原生库编译与ABI兼容性实战指南
SQLite3跨平台原生库编译与ABI兼容性实战指南

简介:本资源是面向C后端开发者的SQLite跨平台开发套件,专为需要在Windows与Linux环境下快速集成轻量级嵌入式数据库的工程师设计,解决多架构编译链接时缺少原生库与头文件的典型痛点。压缩包共8个文件,包含Windows 64位/32位lib静… · 2026/9/25 7:31:48

AI Agent技能库工程化实践:从Prompt乱象到可控工具调用
AI Agent技能库工程化实践:从Prompt乱象到可控工具调用

如果你最近在研究AI Agent,一定遇到过类似的困局:模型什么都能聊,但一落到具体业务就抓瞎。我去年接手了一个智能客服项目,最初的方案是“一个大模型 一套大而全的Prompt 一份工具列表”,结果模型频繁选错工具、传错… · 2026/9/25 7:31:42

终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流
终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流

1. 这不是“手机能装个VS Code”——而是重构开发工作流的临界点 2026年,我拆开三台主力设备:一台折叠屏安卓旗舰、一台iPad Pro配妙控键盘、一台搭载ARM架构的Windows平板,把它们全换成主力开发机。不是为了炫技,而是因为本地ID… · 2026/9/25 7:31:42

Neo4j社区版5.26.0 Windows安装配置与避坑指南
Neo4j社区版5.26.0 Windows安装配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:31:23

小米平板4 Plus刷Droidian:从解锁分区到蓝牙修复的完整指南
小米平板4 Plus刷Droidian:从解锁分区到蓝牙修复的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:31:23

Chat2DB 实战解析:Springboot + React 多数据库客户端与 AI 辅助 SQL 的工程实践
Chat2DB 实战解析:Springboot + React 多数据库客户端与 AI 辅助 SQL 的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:31:23

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码