unhandled cuda error, NCCL version 2.7.8
问题解决
1. 问题背景
使用torch
框架进行分布式训练时,python -m torch.distributed.launch --nproc_per_node=4
遇到NCLL相关错误
RuntimeError: unhandled cuda error, NCCL version 2.7.8
2. 解决
参考:
https://github.com/NVIDIA/nccl/issues/290
-
设置环境变量来获取更详细的错误信息。
import os os.environ['NCCL_DEBUG'] = 'INFO' import torch torch.distributed.init_process_group(backend='nccl')
-
我遇到的问题是
include/shm.h:28 NCCL WARN Call to posix_fallocate failed : No space left on device
- 问题原因:我的运行环境是docker容器,创建容器的时候没有指定
shm-size
,默认shm-size
值是64M
(可以通过df -h /dev/shm
命令查看);对于2.7.8版本的NCLL,其运行过程中试图创建一个共享内存段,而/dev/shm
空间不足,导致该调用失败。 - 解决方法(推荐方法2):
- 方法1:重新创建一个容器,在创建时指定
shm-size
为更大的值,例如docker run -it --shm-size=512m ubuntu /bin/bash
(或者通过修改配置文件修改已经运行的容器的shm-size
) - 方法2:设置环境变量
NCCL_SHM_DISABLE=1
禁用SHM (Shared Memory)传输,并强制使用NCCL2.6默认的P2P传输方式。例如NCCL_SHM_DISABLE=1 CUDA_VISIBLE_DEVICES=1,2,3,4 python -m torch.distributed.launch --nproc_per_node=4 run.py
- 方法1:重新创建一个容器,在创建时指定
- 问题原因:我的运行环境是docker容器,创建容器的时候没有指定