V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
suke119
V2EX  ›  程序员

企业级部署实操: SGLang 多节点集群部署 Qwen 系列大模型

  •  1
     
  •   suke119 ·
    wangsrGit119 · 1 天前 · 1111 次点击

    目标

    比起Ollama的方便,有些时候高并发更重要,因此这篇文章将实现在两台电脑(双节点)上部署 SGLang(当然如果你还有多余的也可以加进来当节点),运行 Qwen2.5-7B-Instruct 模型,实现本地资源的充分利用。

    硬件

    • 节点 0:IP 192.168.0.12,1 个 英伟达显卡
    • 节点 1:IP 192.168.0.13,1 个 英伟达显卡
    • 总计:2 个 GPU

    模型

    Qwen2.5-7B-Instruct,FP16 下约需 14GB 显存,使用 --tp 2 后每 GPU 约 7GB (权重)+ 2-3GB ( KV 缓存)。

    网络

    两节点通过以太网( TCP )通信,网络接口为 eno1 。

    这里根据自己电脑 ip addr 查询即可

    不量化

    使用 FP16 精度以保留最大精度,显存占用较高,需优化配置。

    2. 前置条件

    在开始安装和部署之前,确保以下条件满足:

    操作系统

    • 推荐 Ubuntu 20.04/22.04 或其他 Linux 发行版( Windows 不推荐,需 WSL2 )
    • 两节点最好是一致的环境,当然 os 的环境不是必须,但是Python的环境需要一样

    网络连通性

    • 节点 0 ( 192.168.0.12 )和节点 1 ( 192.168.0.13 )可互相 ping 通:
    ping 192.168.0.12  # 从节点 1
    ping 192.168.0.13  # 从节点 0
    
    • 端口 50000 (分布式初始化)和 30000 ( HTTP 服务器)未被防火墙阻挡:
    
    sudo ufw allow 50000
    sudo ufw allow 30000
    
    
    • 确认网络接口 eno1:
    # 具体网卡根据实际调整
    ip addr show eno1 
    

    eno1 不存在,替换为实际接口(如 eth0enp0s3)。

    GPU 驱动和 CUDA

    • 安装 NVIDIA 驱动(版本 ≥ 470 )和 CUDA Toolkit(推荐 12.x ):
    nvidia-smi  # 确认驱动和 CUDA 版本
    

    输出应显示 英伟达和 CUDA 版本(如 12.4 )。

    若未安装,参考 NVIDIA 官网 自行安装即可:

    Python 环境

    • Python 3.9+(推荐 3.10 )
    • 两节点需一致的 Python 版本:
    python3 --version
    

    磁盘空间

    • Qwen2.5-7B-Instruct 模型约需 15GB 磁盘空间
    • 确保 /opt/models/Qwen/Qwen2.5-7B-Instruct 路径有足够空间

    3. 安装 SGLang

    在两节点上分别安装 SGLang 和依赖。以下步骤在每台电脑上执行。

    3.1 创建虚拟环境(conda)

    conda create -n sglang_env python=3.10
    conda activate  sglang_env
    

    3.2 安装 SGLang

    备注: 安装过程会自动安装 对应显卡相关的依赖,如 torchtransformersflashinfer

    pip install --upgrade pip
    pip install uv
    uv pip install "sglang[all]>=0.4.5" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python
    

    验证安装:

    python -m sglang.launch_server --help
    

    应显示 SGLang 的命令行参数帮助信息。

    3.3 下载 Qwen2.5-7B-Instruct 模型

    国外使用 huggingface,国内使用 modelscope

    在两节点上下载模型到相同路径(如 /opt/models/Qwen/Qwen2.5-7B-Instruct):

    pip install modelscope
    modelscope download Qwen/Qwen2.5-7B-Instruct --local-dir /opt/models/Qwen/Qwen2.5-7B-Instruct
    

    或手动从 Hugging Face 或者 modelscope 下载并解压到指定路径。确保两节点模型文件一致。

    4. 配置双节点部署

    使用张量并行(--tp 2 )将模型分布到 2 个 GPU (每节点 1 个)。以下是详细的部署步骤和命令。

    4.1 部署命令

    • 节点 0 ( IP: 192.168.0.12 ):
    NCCL_IB_DISABLE=1 NCCL_P2P_DISABLE=1 GLOO_SOCKET_IFNAME=eno1 NCCL_SOCKET_IFNAME=eno1 python3 -m sglang.launch_server \
      --model-path /opt/models/Qwen/Qwen2.5-7B-Instruct \
      --tp 2 \
      --nnodes 2 \
      --node-rank 0 \
      --dist-init-addr 192.168.0.12:50000 \
      --disable-cuda-graph \
      --host 0.0.0.0 \
      --port 30000 \
      --mem-fraction-static 0.7
    
    • 节点 1 ( IP: 192.168.0.13 ):
    NCCL_IB_DISABLE=1 NCCL_P2P_DISABLE=1 GLOO_SOCKET_IFNAME=eno1 NCCL_SOCKET_IFNAME=eno1 python3 -m sglang.launch_server \
      --model-path /opt/models/Qwen/Qwen2.5-7B-Instruct \
      --tp 2 \
      --nnodes 2 \
      --node-rank 1 \
      --dist-init-addr 192.168.0.12:50000 \
      --disable-cuda-graph \
      --host 0.0.0.0 \
      --port 30000 \
      --mem-fraction-static 0.7
    

    注意: 如果出现 OOM 的情况则调整 --mem-fraction-static 参数,默认是 0.9 ,改为 0.7 即可。0.9 调整到 0.7 时 当前 7B 模型 占用显存直接下降 2G 左右。 CUDA Graph 会额外分配少量显存(通常几百 MB )来存储计算图。如果显存接近上限,启用 CUDA Graph 可能触发 OOM 错误。

    完整全文

    更多参数细节原文见

    21 条回复    2025-04-18 17:07:46 +08:00
    tool2dx
        1
    tool2dx  
       1 天前
    前几天 v2 的论坛老哥,二手买了一个 8 pcie 的挖矿淘汰设备,拿来跑模型,还是舒服的。
    senduy
        2
    senduy  
       1 天前
    感谢大佬分享
    之前看油管博主用 mac 集群跑 LLM ,瓶颈在网络传输,能问一下用的什么网络设备吗?
    lovestudykid
        3
    lovestudykid  
       1 天前
    通过网口连接,这个并行有必要吗?
    liprais
        4
    liprais  
       1 天前
    以太网还是省省吧
    ZiChun
        5
    ZiChun  
       1 天前
    一般来说不建议跑 fp16 ,fp8 对企业级已经算妥妥的够用了。
    suke119
        6
    suke119  
    OP
       1 天前
    @lovestudykid 请注意是不同电脑最大化资源利用,加入你有两个服务器,不是显卡不在同一个服务器上 ;其次 现在的服务器都有光模块的,光模块速率和网线连接还是有区别的
    suke119
        7
    suke119  
    OP
       1 天前
    @liprais 看看光模块 呢
    suke119
        8
    suke119  
    OP
       1 天前
    @ZiChun 嗯 具体看需要 还有就是最终需要的效果
    suke119
        9
    suke119  
    OP
       1 天前
    @senduy 现阶段一般大型服务器都是具备光模块的 比普通网口要高效
    scguanzhong
        10
    scguanzhong  
       1 天前
    老师,请教一下,我们客户有 4 张 t4 ,在一个机器里,我们本来想通过 SGLang 部署 Qwen2.5-7B ,但是现在给我反馈的是 t4 显卡太老了,部署不上,只能通过 Ollama 部署大模型,但是 Ollama 不太稳定,没办法用,他们说的是真的么?如果是真的有什么解决方法么?现在已经不可能再去买 L4 显卡了😭
    keakon
        11
    keakon  
       1 天前
    如果单卡能部署的话,不要用 tp ,每个 GPU 开一个实例,前面用 nginx 之类的负载均衡,速度至少快几倍。
    suke119
        12
    suke119  
    OP
       1 天前
    @scguanzhong 用 vllm
    suke119
        13
    suke119  
    OP
       1 天前
    @keakon 有些模型单卡加载不下的 所以才需要多卡并行
    keakon
        14
    keakon  
       1 天前
    @suke119 7B 都加载不了的显卡,其实不推荐玩大模型。另外,单机多卡也比多机快很多倍。
    zhuanggu
        15
    zhuanggu  
       1 天前
    不太理解 7B 的模型也要搞的这么复杂吗?我之前跑 ds 8B 的,也是在普通的笔记本上跑,tokens 也能接受。有不是跑 32B 以上
    suke119
        16
    suke119  
    OP
       1 天前
    @keakon 我用 7b 举例子,7b 分为量化和不量化,不同的量化等级占用的显存是完全不一样的,效果也是不一样的
    suke119
        17
    suke119  
    OP
       1 天前
    @zhuanggu 我用 7b 举例子,7b 分为量化和不量化,不同的量化等级占用的显存是完全不一样的,效果也是不一样的
    Legman
        18
    Legman  
       1 天前 via Android
    有没有测试过 SGLang 、vllm 和 transformer 的性能差异
    reeco
        19
    reeco  
       1 天前
    7B 不必考虑非量化场景,单机 2 张卡,2 个实例就搞定了
    abbottcn
        20
    abbottcn  
       1 天前 via iPhone
    要么是支持 RoCE 的以太网卡,要么是 IB 网卡。

    支持 RDMA ,是保证设备间高效通讯的前提。

    要么是单机实现,卡直接 P2P 。
    kenshin912
        21
    kenshin912  
       1 天前
    你这个光口的网络通信会成为性能瓶颈吗 ?
    我们目前是运行了 2 个 vLLM 分别指定 GPU 0 和 GPU 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:11 · PVG 21:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.