vllm部署大模型出现NameError: name ‘vllm_ops‘ is not defined问题

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,在末尾加上:
      export PATH=/usr/local/cuda-12.0/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:$LD_LIBRARY_PATH
      
      路径/usr/local/cuda-12.0替换为你的实际路径
    • 方法2:shell脚本写入~/.bashrc,将如下shell代码写入shell文件
      echo 'PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
      echo 'LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
      
      路径/usr/local/cuda-12.0替换为你的实际路径
    • 最后激活使其立即生效
      source ~/.bashrc
      
    • 验证,再次执行代码:
      from vllm._C import ops as vllm_ops
      

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值