大模型训练中的“月经”问题
最近在客串“客服”,教公司内部转行做 AI 的0基础新手把模型训练跑起来。
有一小部分完全不懂 Linux 的,需要学一下基本命令和 Docker 的用法,这里就不讨论了。今天主要聊的是已经迈过基本功门槛,开始尝试多机多卡分布式训练的学员。
0x01:关于 NCCL Timeout
训练的时候大家基本都碰到过 NCCL Timeout 的问题。一般人搜一下就会觉得是节点通信出故障了,肯定是服务器坏了,然后就会上报给平台运维处理。
其实 NCCL Timeout 原因有很多,大概率还是自己写的代码有问题(特别是对于新手来说)。一般我会用这几个方法来排除:
首先设置环境变量:
1 | export NCCL_IB_DISABLE=1 |
- 如果这都跑不通:基本是自己的代码出故障了。建议看一下各个节点的日志,比如是不是某一个节点在读文件的时候失败退出了,或者有某个子节点 OOM 启动失败了。
- 如果设置这两个跑通了:那可以去找一下平台运维。
如果想自己解决的话,可以按照以下步骤再排查一下:
- 如果
NCCL_P2P_DISABLE=1跑通了:可以使用nvidia-smi topo -m看看是不是机器没有 NVLink。 - 如果
NCCL_IB_DISABLE=1跑通了:可以检查一下机器是不是没有 IB 网卡,或者网卡是不是设置错了。可以使用NCCL_SOCKET_IFNAME指定一下真实的 IB 网卡试试。
0x02:多节点训练巨慢
另外还有一个很常见的问题:
有的人单机(8卡)训练速度还挺快的,但是多节点就巨慢。通常新手(或平台)会把问题怪到存储服务器上,觉得是多个机器同时读一个磁盘太卡了,或者看到网络带宽占满了,就要求升级网络带宽。
这种情况一般可以检查一下配置文件,看是不是用了 ZeRO-3,如果是,就替换成zero2试试。
0x03:Early Stop 被识别成异常退出
最后分享个好玩的,还见过一个人代码里写了 Early Stop,模型收敛了直接把进程杀了。
然后看到了平台提示的“失败”就反馈给了我。
0xFF
建议大家在训练模型之前,一定要先恶补一下基础知识。