大模型训练中的“月经”问题

最近在客串“客服”,教公司内部转行做 AI 的0基础新手把模型训练跑起来。

有一小部分完全不懂 Linux 的,需要学一下基本命令和 Docker 的用法,这里就不讨论了。今天主要聊的是已经迈过基本功门槛,开始尝试多机多卡分布式训练的学员。

0x01:关于 NCCL Timeout

训练的时候大家基本都碰到过 NCCL Timeout 的问题。一般人搜一下就会觉得是节点通信出故障了,肯定是服务器坏了,然后就会上报给平台运维处理。

其实 NCCL Timeout 原因有很多,大概率还是自己写的代码有问题(特别是对于新手来说)。一般我会用这几个方法来排除:

首先设置环境变量:

1
2
export NCCL_IB_DISABLE=1
export NCCL_P2P_DISABLE=1
  • 如果这都跑不通:基本是自己的代码出故障了。建议看一下各个节点的日志,比如是不是某一个节点在读文件的时候失败退出了,或者有某个子节点 OOM 启动失败了。
  • 如果设置这两个跑通了:那可以去找一下平台运维。

如果想自己解决的话,可以按照以下步骤再排查一下:

  1. 如果 NCCL_P2P_DISABLE=1 跑通了:可以使用 nvidia-smi topo -m 看看是不是机器没有 NVLink
  2. 如果 NCCL_IB_DISABLE=1 跑通了:可以检查一下机器是不是没有 IB 网卡,或者网卡是不是设置错了。可以使用 NCCL_SOCKET_IFNAME 指定一下真实的 IB 网卡试试。

0x02:多节点训练巨慢

另外还有一个很常见的问题:

有的人单机(8卡)训练速度还挺快的,但是多节点就巨慢。通常新手(或平台)会把问题怪到存储服务器上,觉得是多个机器同时读一个磁盘太卡了,或者看到网络带宽占满了,就要求升级网络带宽。

这种情况一般可以检查一下配置文件,看是不是用了 ZeRO-3,如果是,就替换成zero2试试。

0x03:Early Stop 被识别成异常退出

最后分享个好玩的,还见过一个人代码里写了 Early Stop,模型收敛了直接把进程杀了。

然后看到了平台提示的“失败”就反馈给了我。

0xFF

建议大家在训练模型之前,一定要先恶补一下基础知识