大模型多机多卡训练经验总结
又有两位训练营同学斩获大模型offer!一个是40k某军实验室offer,另一个是第四范式~恭喜两位同学成功上岸!最近春招和实习已开启了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。。网上关于 LLM 多机多卡训练教程好少,好多还是拿 torch.di
又有两位训练营同学斩获大模型offer!一个是40k某军实验室offer,另一个是第四范式~恭喜两位同学成功上岸!
最近春招和实习已开启了。
不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。
最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。
喜欢本文记得收藏、关注、点赞。

网上关于 LLM 多机多卡训练教程好少,好多还是拿 torch.distributed.launch 来做,殊不知早就改用 torchrun 了。这里总结下经验,给想要尝试或者有场景必须要做多机的节省下调研时间。
01 环境准备
这里以 2 台机器为例子,首先需要 2 台机器能够免密登录,编辑 /etc/hosts 文件,加入节点信息:
ip1 node01
ip2 node02
然后两个节点需要分别执行以下操作来生成私钥和公钥:
ssh-keygen -t rsa
然后全部回车,采用默认值。再互相拷贝秘钥:
ssh-copy-id root@ip1
ssh-copy-id root@ip2
然后分别在 2 台机器上试试互相 ssh,如果无密码输入要求直接登录到另一台服务器则说明配置成功。
然后 2 台机器的环境必须保持一致,包括 python 版本,训练所需依赖包等。这里还需确保安装了 pdsh:
apt-get install pdsh
02 多机训练
我使用的是 torchrun,毕竟单张 GPU 有 80G 的显存,7B 的模型单卡完全放得下。
假设 node01 为 master,node02 需要有相同的模型权重和代码,可以直接在 master 用 scp 拷贝过去。
准备工作完成后就可以启动训练命令了,首先在 node01 也就是 master 上执行如下命令(非完整,仅供参考,使用 deepspeed ZeRO-2):
torchrun --nproc_per_node 8 --nnodes 2 --master_addr ${MASTER_ADDR} --master_port 14545 --node_rank 0 your_program.py \
--deepspeed ${deepspeed_config_file} \
...
nproc_per_node 表示每个节点的进程数,可以理解为每个节点所需 GPU 数。
nnode 表示节点数,2 台机器就是 2 个节点数。
master_add 为 master 的 ip。
node_rank 表示当前启动的是第几个节点。
然后在 node02 执行同样命令,但需将 node_rank 指定为 1,不出意外的话可以成功跑通,即便报错可能也是依赖包版本两台机器不一致导致。
很快你就会在控制台看到 transformers 打印的日志,但我发现 save_total_limit 只在 master 上管用。
另外,deepspeed 多机多卡训练流程跟上述也是一样的,但需要创建 hostfile 文件:
hostname1 slots=8
hostname2 slots=8
官方给出的对 hostfile 的说明:
A hostfile is a list of hostnames(or SSH aliases), which are machines accessible via passwordless SSH, and slot counts, which specify the number of GPUs available on the system.
可以用如下命令启动多机多卡训练:
deepspeed --num_gpus 8 --num_nodes 2 --hostfile hostfile --master_addr hostname1 --master_port=9901 your_program.py \
--deepspeed ${deepspeed_config_file} \
...
与 torchrun 启动器不同,deepspeed 将自动在两个节点上启动此命令。
另外,如果使用 deepspeed 单机训练但是只限于使用指定的某几张卡,export CUDA_VISIBLE_DEVICES 是无效的,你应该这样做(无需指定 num_gpus):
deepspeed --include localhost:0,1 your_program.py \
--deepspeed ${deepspeed_config_file} \
...
有的人可能会比较纠结用哪个好,我觉得不管你直接用 deepspeed 命令也好 torchrun 也罢,目标都是一致的,这只是个工具罢了,个人有个人的喜好,真的没啥必要争来争去应该用哪个好。
03 其他
额外提几个比较好用,美观的 GPU 监控工具,不要只知道使用 nvidia-smi 了:
-
nvtop:https://github.com/Syllo/nvtop
-
gpustat:https://github.com/wookayin/gpustat
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)