VLLM : RuntimeError: NCCL error: invalid usage
本机环境
- 2080 Ti
- cuda版本:11.8
- torch版本:torch-2.7.0-cu118
- vllm版本:0.9.1.dev241+g8335667c2.cu118 (我是源码编译的,pip安装whl正常,但运行提示:Aborted core dumped,所以重新源码编译)
错误提示
RuntimeError: NCCL error: invalid usage (run with NCCL_DEBUG=WARN for details)
定位错误
根据提示,打开NCCL_DEBUG=WARN
- 1:如果是shell脚本
- 2:如果是python脚本
NCCL_DEBUG=WARN NCCL_DEBUG_FILE=./nccl_debug.log python your_script.py
- 3:查看nccl_debug.log
misc/strongstream.cc:53 NCCL WARN NCCL cannot be captured in a graph if either it wasn't built with CUDA runtime >= 11.3 or if the installed CUDA driver < R465.
错误与 issue:https://github.com/vllm-project/vllm/issues/7548 一致,其中也给出了方案
解决方案
重新编译cu118
的nccl
参考:Linux下NCCL源码编译安装 - chenzhen0530 - 博客园
git clone https://github.com/NVIDIA/nccl.git
cd nccl
make -j12 src.build BUILDDIR=your-path-to-nccl CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_80,code=sm_80"
-j12: 表示使用12个核心,可根据自己情况进行调整;
BUILDDIR: 表示编译后,一些文件的存储路径;默认是nccl/build;当然如果是root用户可以指定到/usr/local/ncc/;
CUDA_HOME: 表示CUDA的目录,默认就是/usr/local/cuda(自己ls看一下);
NVCC_GENCODE:如果不添加该字段,默认会编译支持所有架构;为了加速编译以及降低二进制文件大小,添加该字段,具体comute_?,sm_?需要和自己显卡算力相匹配。
图标来自:https://blog.csdn.net/kabuto_hui/article/details/145949489
替换虚拟环境中的cu118相关文件
查看当前虚拟环境路径后
import sys
sys.prefix
替换头文件 和 库文件
nccl/lib/* -> 虚拟环境地址/lib/python3.12/site-packages/nvidia/nccl/lib/nccl/include/* -> 虚拟环境地址/lib/python3.12/site-packages/nvidia/nccl/include/