多卡训练跑到一半中断,问题通常不在模型本身,而是显存、通信、共享内存、节点硬件和检查点同步这五个工程环节中的某一个先撑不住了。 单卡能跑完不代表多卡稳,多卡把数据并行、梯度同步、集合通信和调度容错都叠加在一起,任何一块短板都会在训练中途被放大。
多卡训练跑到一半中断是什么原因?先查这五类工程故障
多卡训练中断很少是“突然”发生的,它更像一根被持续拉紧的皮筋,某个资源在中期逼近上限,最后被一次集合通信、一次检查点保存或一次数据加载击穿。
显存碎片与OOM:为什么跑到一半才崩?
训练初期显存够用,不代表中期够用,数据缓存、日志对象、检查点副本、CUDA caching allocator 碎片都会让显存水位缓慢上涨,等到某个 batch 稍大,或者某张卡多缓存了一点,就会触发 OOM。
排查时先看:
nvidia-smi观察多卡显存是否均衡。torch.cuda.memory_summary()看 reserved 和 allocated 差距。dmesg -T | grep -i oom看系统是否杀进程。- 尝试
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True。 - 减小 batch size,配合梯度累积,不要只改单卡。
如果只有某一张卡先爆,重点查数据分片是否均匀、模型并行切分是否合理。
PyTorch DDP 多卡训练中途断掉怎么排查?
DDP 训练中途断掉,高频原因是 NCCL 通信超时,常见日志关键词有 NCCL timeout、unhandled system error、remote process exited。
可以先开调试:
export NCCL_DEBUG=INFOexport NCCL_DEBUG_SUBSYS=ALLexport TORCH_NCCL_HEARTBEAT_TIMEOUT=1800
然后检查物理链路:
ibstat看 IB 端口状态。ip link看网卡是否 down。ethtool <网卡名>看速率和错误计数。nvidia-smi topo -m看 GPU 间拓扑。
业内专家指出,NCCL 超时只是表象,根因常在网卡、交换机、光模块或拓扑配置,盲目调大

NCCL_IB_TIMEOUT、NCCL_SOCKET_TIMEOUT 只能拖延报错,不能修复链路。
共享内存与数据加载器:多卡训练中途断掉的隐形杀手
多卡训练时,每个 rank 会拉起多个 DataLoader worker,worker 之间通过共享内存传数据,/dev/shm 一旦耗尽,进程会被直接杀掉。
快速检查:
df -h /dev/shmfree -hulimit -lps aux | grep python看 worker 数量。
Docker 环境默认 /dev/shm 只有 64MB 左右,容器里跑多卡很容易中招,启动容器时加 --shm-size=8g 或更大,训练代码里适当降低 num_workers、prefetch_factor,慎用 persistent_workers=True。
单卡正常多卡中断的区别在哪?
单卡训练没有 NCCL 集合通信,故障通常局限在单进程,多卡训练任何一张卡、一条网卡、一个节点掉线,都会让整个作业挂掉。
| 对比项 | 单卡训练 | 多卡训练 |
|---|---|---|
| 通信依赖 | 基本没有 | NCCL、IB/RoCE、TCP |
| 显存压力 | 单卡线性增长 | 多卡不均衡、梯度桶额外占用 |
| 故障影响 | 单进程退出 | 全局作业中断 |
| 常见报错 | OOM、代码异常 | NCCL timeout、XID、共享内存不足 |
| 排查重点 | 模型与数据 | 通信、硬件、调度、拓扑 |
节点掉卡要看 XID 错误:
nvidia-smi -q -d XIDdmesg -T | grep -i xidjournalctl -k | grep -i nvidia
据 NVIDIA 官方文档,XID 错误可用于定位 GPU 硬件、驱动或总线问题,出现 XID 13、31、43、48、79 等错误时,先隔离节点,不要反复重启硬跑。
检查点与调度器:为什么中断总在保存前后?
检查点保存是同步操作,rank0 写磁盘,其他 rank 等待,如果磁盘满、网络存储抖动、NFS 超时,整个作业就会卡死或退出。

检查路径:
df -h看磁盘余量。iostat -x 1看存储负载。nvidia-smi topo -m看 GPU 与网卡亲和性。- 检查
torch.save是否只在 rank0 执行。
更稳的做法是异步保存、分片保存、保留最近多个检查点,并配合 torchrun 弹性调度实现断点续训。
多卡训练跑到一半中断的实操排查路径
锁定中断时间点和退出码
先别改代码,先拿证据,记录 torchrun 完整日志、退出码、中断前最后一个 step,用 grep -i error、grep -i nccl、grep -i xid 过滤日志,多卡作业的报错往往在 rank0 之外,要收集所有 rank 的日志。
看三类日志
- GPU 日志:
nvidia-smi -q、dmesg -T | grep -i nvidia。 - 系统日志:
journalctl -k、/var/log/syslog。 - 框架日志:
NCCL_DEBUG=INFO、TORCH_DISTRIBUTED_DEBUG=DETAIL。
复现与压测
- 缩小规模:
torchrun --nproc_per_node=2先复现。 - 通信压测:
nccl-tests跑all_reduce_perf。 - 定位同步错误:
CUDA_LAUNCH_BLOCKING=1。 - 观察显存:每 100 step 打印一次显存。
修复与加固
- 锁定驱动、CUDA、PyTorch、NCCL 版本。
- 训练前做节点健康检查。
- 开启弹性训练和断点续训。
- 监控显存、
/dev/shm、网卡错误计数、磁盘水位。 - 保留多个检查点,避免单点写坏。
多卡训练中断排查要多少钱?北京上海深圳等地成本对比
多卡训练中断排查要多少钱,取决于集群规模、故障复现难度、是否涉及硬件更换,以及你选择远程还是驻场,行业共识认为,报价通常按小时、按天或按项目计算,卡数越多、网络越复杂,费用越高。
北京上海深圳多卡训练集群中断排查有什么不同?

北京、上海、深圳的差异主要在人力成本和硬件供应链,北京上海机房资源集中,驻场工程师费用偏高;深圳硬件备件和厂商支持响应快,但跨地域远程排查同样按工时计费,云上集群则按实例和存储费用另算。
自助排查和外包服务的成本对比
| 方式 | 成本构成 | 适合场景 |
|---|---|---|
| 自助排查 | 工程师时间、压测机时 | 日志清晰、小规模复现 |
| 远程支持 | 按小时或按天计费 | 云上集群、跨地域节点 |
| 驻场支持 | 差旅、人天、备件 | 本地机房、多节点硬件故障 |
| 厂商支持 | 保修内或按合同 | XID、IB 交换机、驱动问题 |
如果只是 /dev/shm 不足或 num_workers 过高,自助排查成本最低,如果涉及 IB 链路、GPU 掉卡、存储抖动,外包或厂商支持反而更快。
Q&A:多卡训练跑到一半中断常见问题
为什么单卡训练正常,多卡训练跑到一半中断?
单卡没有 NCCL 集合通信,也不会被其他 rank 拖死,多卡训练中,任意一个 rank 的显存、共享内存、网卡或进程异常,都会通过通信超时扩散成全局中断,优先查 /dev/shm、NCCL 日志和 XID。
多卡训练中途断掉怎么判断是NCCL还是显存问题?
看报错顺序,先出现 torch.cuda.OutOfMemoryError 或 CUDA out of memory,多半是显存,先出现 NCCL timeout、remote process exited、unhandled system error,再伴随其他 rank 退出,多半是通信,两者可能同时出现,但最先报出的那条更接近根因。
多卡训练中断排查要多少钱?北京上海深圳价格差别大吗?
费用没有统一标准,远程按小时计费,驻场按人天计费,北京上海深圳因人力、机房和供应链差异会有浮动,云上集群还要叠加实例和存储成本,最终价格由集群卡数、网络类型、故障复现难度和备件更换决定。