1、问题现象
- 在ubuntu系统中尝试使用vllm进行多GPU部署本地模型时,出现:
[rank0]: File "/usr/local/lib/python3.10/dist-packages/vllm/_custom_ops.py", line 118, in rms_norm [rank0]: vllm_ops.rms_norm(out, input, weight, epsilon) [rank0]: NameError: name 'vllm_ops' is not defined
2、问题原因
- 问题出在文件: /usr/local/lib/python3.10/dist-packages/vllm/_custom_ops.py,查看其源码时发现该文件在ops时没有正确处理异常,导致报错的原因与真实问题不一致,如下:
将该行代码单独拷贝出来运行:try: from vllm._C import cache_ops as vllm_cache_ops from vllm._C import ops as vllm_ops except ImportError: pass
出现真正的原因:from vllm._C import ops as vllm_ops
ImportError: libcudart.so.12: cannot open shared object file: No such file or directory
- 出现这个问题可能包含两个方面的内容(vllm默认是采用cuda 12.1编译)
- 已正确安装cuda但环境路径不对,比如未正确的设置PATH和LD_LIBRARY_PATH
- 未正确安装cuda版本,比如nvidia-smi命令中是12.4的版本,但与torch的cuda版本不一致(查看命令:torch.version),输出是2.3.0+cu118,其cuda版本为11.8,
3、解决问题
- 通过执行命令:find / -name ‘libcudart.so’,找到cuda的目录(或者没有),在lib64这个目录中会发现确实没有libcudart.so.12这个文件,此时可以根据nvidia-smi命令显示的CUDA版本去NVIDIA官网下载对应的cuda版本,进行安装即可。
- 安装时在选择安装内容时,将默认的driver取消掉,其他默认
- 在选择是否更新时,选择upgrade all
- 在选择软链接时,可不选
- 设置环境变量路径
- 方法1:vim打开文件~/.bashrc,在末尾加上:
路径/usr/local/cuda-12.0替换为你的实际路径export PATH=/usr/local/cuda-12.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:$LD_LIBRARY_PATH
- 方法2:shell脚本写入~/.bashrc,将如下shell代码写入shell文件
路径/usr/local/cuda-12.0替换为你的实际路径echo 'PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc echo 'LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
- 最后激活使其立即生效
source ~/.bashrc
- 验证,再次执行代码:
from vllm._C import ops as vllm_ops
- 方法1:vim打开文件~/.bashrc,在末尾加上: