实验室GPU编号在pytorch和nvidia-smi中不一致引起的NCCL的分布式训练bug

这是一个很逆天的bug,底层逻辑暂时没有想清楚,bug与解决方法报道如下:

(1)关于实验室GPU编号在pytorch和nvidia-smi中不一致的问题

参考链接:不一致的GPU编号

整体上两个核心:1)原因:nvidia-smi 下的 GPU 编号默认使用 PCI_BUS_ID,而 PyTorch 代码默认情况下设备排序是 FASTEST_FIRST

2)解决办法:

export CUDA_DEVICE_ORDER="PCI_BUS_ID"

(2)关于引起的bug与可能的原因:

【bug的报错信息】

NCCL error

RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1667808731763/work/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1272, internal error, NCCL version 2.14.3
ncclInternalError: Internal check failed.
Last error:
Duplicate GPU detected : rank 1 and rank 0 both on CUDA device 4000

pytorch lightning上面错误的行

就在trainer.fit函数里面,会有一个self.consigure_ddp()函数里面还是python的包括,再往底层就是上面的这个nccl error了

【相关的资料】

(1)运用的是pytorch_lightning相关的库,相关讨论见lighting的github上的issue

可以看到,有包括pytorch版本问题,读取的world size等问题,解决方法包括环境变量等等

(2)在多卡环境下指定某几张卡的时候,会产生指定的错误

指定特定GPU

【额外的补充信息】

(1)前两天在超算系统上申请两块V100进行训练的时候,完全可以跑的通没有这样的错误

【解决过程】

(1)可能是pytorch版本问题,但是我升级到2.0.1之后还是不行

(2)可能是环境变量问题,如lighting的github上的issue,但是加上了哪些关于卡间通讯什么的变量,都没有效果

(3)可能是pytorch_lighting版本与torch版本不兼容问题,但是为什么北京超算能够跑,否定

(4)将超算的环境配置导出,在实验室机器上跑,还是完全相同的问题,无法复现

(5)思考NCCL错误相关的可能因素,主要是指定GPU编号然后设置不同线程使用的device的时候,会产生这样的编号-硬件设备对应上面的错误,因此得考虑实验室机器和超算机器上面在这里的不同之处

(6)想起来实验室机器在nvidia-smi的时候,gpu顺序和pytorch进行指定的时候,顺序不一致

(7)查阅了相关原因,添加了环境变量,让pytorch的顺序和nvidia-smi读取的顺序一致,问题居然就立即解决了

【解决方法】

添加一行

export CUDA_DEVICE_ORDER="PCI_BUS_ID"

就完成了

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
在Anaconda Prompt运行nvidia-smi时,如果出现错误提示"nvidia-smi不是内部或外部命令",可能是由于以下几个原因所致: 1. 没有正确安装NVIDIA驱动程序:请确保您已经正确安装了最新的NVIDIA驱动程序,并且该驱动程序正在运行。您可以从NVIDIA官方网站下载并安装最新的驱动程序。 2. 可能未将nvidia-smi的路径添加到系统环境变量:在Anaconda Prompt执行nvidia-smi命令时,系统需要知道nvidia-smi可执行文件的位置。您可以手动将nvidia-smi所在路径添加到系统的环境变量,具体步骤如下: a. 找到电脑nvidia-smi.exe所在的路径,一般为:C盘 -> Program Files -> NVIDIA Corporation -> NVSMI -> nvidia-smi.exe。 b. 将该路径添加到系统的环境变量,以便系统能够找到nvidia-smi命令。 3. 可能使用了不正确的驱动版本:推荐使用的驱动版本是nvidia-driver-525,而不是nvidia-driver-525-open。如果您使用了nvidia-driver-525-open,可能会导致nvidia-smi报错"No devices were found"。建议使用nvidia-driver-525来解决此问题。 请根据上述方法逐一检查和尝试解决问题,确保正确安装和配置了NVIDIA驱动程序,并将nvidia-smi的路径添加到系统环境变量。这样,在Anaconda Prompt执行nvidia-smi命令时,就不会再出现"nvidia-smi不是内部或外部命令"的错误提示了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【pytorch】Ubuntu+Anaconda+CUDA+pytorch 配置教程 | nvidia-smi 报错 NVIDIA-SMI has failed](https://blog.csdn.net/qq_39441603/article/details/130164991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [输入‘nvidia -smi’显示不是内部或外部指令](https://blog.csdn.net/m0_45521766/article/details/126474351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值