企业级部署实操: SGLang 多节点集群部署 Qwen 系列大模型 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
suke119
V2EX    程序员

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

  •  1
     
  •   suke119
    wangsrGit119 181 天前 2444 次点击
    这是一个创建于 181 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目标

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

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

    要么是单机实现,卡直接 P2P 。
    kenshin912
        21
    kenshin912  
       180 天前
    你这个光口的网络通信会成为性能瓶颈吗 ?
    我们目前是运行了 2 个 vLLM 分别指定 GPU 0 和 GPU 1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4731 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:00 PVG 12:00 LAX 21:00 JFK 00:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86