当前位置: 首页 > news >正文

【vllm/瞎折腾】在内网wsl上安装vllm并尝试多节点部署(失败了)

目录

  • 说在前面
  • miniconda安装
  • 外网创建虚拟环境
    • 创建节点一的虚拟环境
    • 创建节点二的虚拟环境
  • 内网配置环境
    • 配置节点一的环境
    • 配置节点二的环境
  • vllm多节点配置
    • 节点一(主节点)配置
    • 节点二配置
  • 部署LLM(失败)
  • 补充:wsl2设置ulimit
  • 补充:wsl安装libcuda
  • 补充:wsl2端口绑定
  • 问题
  • 吐槽

说在前面

  • 操作系统(外网):win11 wsl2
  • miniconda版本:25.1.1 (该版本的python版本为3.12.9)
  • 操作系统(内网节点一):win10 wsl 4060ti 16g
  • 操作系统(内网节点二):win10 wsl 2070s 8g
  • 其他:llama.cpp它不香吗,折腾这个?

miniconda安装

  • 官网
  • 安装
    # 最好到用户目录下创建文件夹
    cd ~
    # 创建一个目录
    mkdir miniconda3 
    cd miniconda3
    # 下载安装脚本 
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O .miniconda.sh
    bash miniconda.sh -b -u -p .
    
  • 创建虚拟环境
    conda create -n vllm
    conda activate vllm
    
  • 注意不要在base环境中直接安装vllm

外网创建虚拟环境

创建节点一的虚拟环境

  • 由于ray的集群需要保持ray版本以及python版本一致,而节点二的机器比较老,所以这里选择的python版本为3.10
  • 创建虚拟环境
    conda create -n vllm1 python=3.10
    conda activate vllm1
    pip install vllm
    
  • 节点一的cuda环境比较新,为12.x,所以直接安装vllm即可
  • 安装完后,使用conda-pack打包
    pip install conda-pack
    conda-pack
    
  • 注意,这里安装的ray版本为2.44.1
  • 注意不要在base环境中打包

创建节点二的虚拟环境

  • 创建虚拟环境
    conda create -n vllm2  python=3.10
    conda activate vllm2
    
  • 节点二的cuda版本为11.x,需要指定版本安装
    export VLLM_VERSION=0.6.1.post1
    export PYTHON_VERSION=310
    pip install https://github.com/vllm-project/vllm/releases/download/v${VLLM_VERSION}/vllm-${VLLM_VERSION}+cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118
    
  • 这样安装后的ray版本为2.44.0,与节点一不一致,要升个级
    pip install --upgrade ray==2.44.1
    
  • 同样,安装完后,使用conda-pack打包
    pip install conda-pack
    conda-pack
    
  • 注意不要在base环境中打包

内网配置环境

配置节点一的环境

  • 导入打包后的虚拟环境到内网
  • 解压
    mkdir vllm
    tar -xzf vllm1.tar.gz -C vllm
    
  • 激活虚拟环境
    source vllm/bin/activate
    
  • 还原虚拟环境
    conda-unpack 
    

配置节点二的环境

  • 操作与上一步一致

vllm多节点配置

节点一(主节点)配置

  • 先进入虚拟环境
    conda activate vllm
    
  • 确定本机IP
    hostname -I
    xxx.xxx.xxx.xxx
    
  • 启用ray
    VLLM_HOST_IP=xxx.xxx.xxx.xxx ray start --head --block --port 6379 --num-gpus=1 --resources='{"node:{xxx.xxx.xxx.xxx}":1}'
    # num-gpus 表示本节点的gpu数量 折腾过程中有次填了个2 直接一堆奇奇怪怪的问题
    

节点二配置

  • 先进入虚拟环境
    conda activate vllm
    
  • 确定本机IP
    hostname -I
    yyy.yyy.yyy.yyy
    
  • 启用ray
    VLLM_HOST_IP=yyy.yyy.yyy.yyy ray start --block --address xxx.xxx.xxx.xxx:6379 --num-gpus=1 --resources='{"node:{yyy.yyy.yyy.yyy}":1}'
    

部署LLM(失败)

  • 惨遭滑铁卢,以下可忽略,不是主要原因
    • wsl不支持SO_REUSADDR,而ray的cluster通信用的是grpc
    • 相关issue1
    • 相关issue2
    • 不过看样子好像ray解决了这个问题
  • 可能还是wsl2的网络设置有问题,两边访问不到一块

补充:wsl2设置ulimit

  • 编辑/etc/security/limits.conf
    sudo vi /etc/security/limits.conf
    
  • 添加以下内容
    *	soft	nofile	65535
    *	hard	nofile	65535
    
  • 重新su一下
    su 用户名
    # 输入密码
    ulimit -n
    

补充:wsl安装libcuda

  • 正常来讲,新版的显卡驱动默认支持wsl2
    在这里插入图片描述

  • 如果是老版本的,可能需要自己手动安装下,下载页
    在这里插入图片描述
    不要选错了 (装完windows版本的发现还是不行,吐血三升)

  • 例如

    wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
    sudo sh cuda_11.2.0_460.27.04_linux.run
    

补充:wsl2端口绑定

  • 这里

问题

  • 在创建环境conda --no-plugins create -n vllm python=3.10时出现OSError: [Errno 40] Too many levels of symbolic links:
    miniconda安装的时候不要安装在/mnt目录下,安装到/home/user
  • 在安装vllm时出现PermissionError: [Errno 13] Permission denied:
    同上,miniconda安装的时候不要安装在/mnt目录下,安装到/home/user
  • libcuda.so.1: cannot open shared object file: no such file or directory
    cuda tookit没有安装,去官网选择对应版本安装
    注意,windows主机上如果安装了最新的显卡驱动,那么正常来讲就会在/usr/lib/wsl/lib下生成对应的libcuda.so,但是,重点来了,必须先装显卡驱动,再安装linux发行版本
  • 遇到一堆ray的问题,大部分和自己的配置有关,所以vllm上的教程直接让用docker,真难折腾
    • [Installation]: pynvml.NVMLError_InvalidArgument: Invalid Argument
    • error helper for TypeError: _extractNVMLErrorsAsClasses…gen_new…new() takes 1 positional argument but 2 were given
    • Error: No available node types can fulfill resource request

吐槽

  • vllm多节点真不好用,不像llama.cpp那样开箱即用,主要依赖ray,这个东东真的一言难尽
http://www.dtcms.com/a/99097.html

相关文章:

  • Java并发编程面试题:线程池Fork/Join(19题)
  • 【深度学习新浪潮】具身智能及其发展前景分析
  • 万物皆可“吉卜力”,使用 AI 创建你的作品
  • 逆向中如何判断JSVMP,及如何解决?(包括实战案例)
  • OpenAI API - Agent
  • protobuf新版下载安装
  • 网络通信微服务
  • 【商城实战(95)】Ansible自动化运维,开启高效部署新篇章
  • 3D Gaussian Splatting部分原理介绍和CUDA代码解读(一)——3D/2D协方差和高斯颜色的计算
  • LeetCode 56. 合并区间 | 排序+贪心解法详解
  • 创意 Python 爱心代码分享
  • el-table 动态给每行增加class属性
  • C++ vector容器总结
  • 诠视科技MR眼镜如何使用VLC 进行RTSP投屏到电脑
  • 【从零实现Json-Rpc框架】- 项目实现 - muduo网络通信类实现篇
  • 黑盒测试的测试用例构成的八点要素
  • 突破数据迁移瓶颈!AWS Snowball如何让PB级数据“瞬间”上云?
  • 12款星光闪光污迹艺术绘画效果Clip Studio Paint笔刷画笔+闪光纹理图片 Clip Studio Glitter Texture Brushes
  • INAV电流计校准
  • sqlalchemy:将mysql切换到OpenGauss
  • 使用dumpbin和depends查看dll(exe)的依赖
  • 代码随想录算法训练营第二十八天,动态规划理论基础,509.斐波那契数,70.爬楼梯,746.使用最小花费爬楼梯。
  • OpenAI API - Practice
  • 【全栈开发】—— Paddle OCR 文字识别 + deepseek接入(基于python 最新!!!)
  • 【STL】vector介绍(附部分接口模拟实现)
  • 【C#】`Task.Factory.StartNew` 和 `Task.Run` 区别
  • Ubuntu和Windows实现文件互传
  • HTML基础及进阶
  • 【C++】基础3——正则表达式,静态多态(函数重载和模板),异常处理
  • EverEdit扩展脚本:“AI翻译”插件,让EverEdit自由翻译