在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

在上一篇文章中,我们谈到了如何用vLLM推理框架来运行QwQ-32B模型,想了解详情的可以参考《在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + vLLM教程》这篇文章

本篇我们将来谈一谈另外一个比较新的推理框架SGLang

SGLang 是适用于大型语言模型和视觉语言模型的快速服务框架。它通过共同设计后端运行时和前端语言,使您与模型的交互更快、更可控。核心功能包括:

  • 快速后端运行时:使用 RadixAttention 为前缀缓存、向前跳转约束解码、无开销 CPU 调度程序、连续批处理、标记注意力(分页注意力)、张量并行性、FlashInfer 内核、分块预填充和量化 (FP8/INT4/AWQ/GPTQ) 提供高效服务。
  • 灵活的前端语言:为编程LLM应用程序提供直观的界面,包括链式生成调用、高级提示、控制流、多模态输入、并行性和外部交互。
  • 广泛的模型支持:支持广泛的生成模型(Llama、Gemma、Mistral、QWen、DeepSeek、LLaVA 等)、嵌入模型(e5-mistral、gte、mcdse)和奖励模型 (Skywork),并易于扩展以集成新模型。
  • 活跃的社区:SGLang 是开源的,并得到行业采用的活跃社区的支持。

安装SGLang

新建和激活虚拟环境

conda create -n sglang python=3.10 -y && conda activate sglang

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

更新pip

pip install --upgrade pip

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

安装flashinfer

本来通过后面的一条命令也可以一起安装flashinfer,但是速度会比较慢,所以我将这条命令单独拎出来,通过“https://github.1319lm.top”代理网址来安装,国内安装速度会更快!

pip install https://github.1319lm.top/flashinfer-ai/flashinfer/releases/download/v0.2.3/flashinfer_python-0.2.3%2Bcu124torch2.5-cp38-abi3-linux_x86_64.whl

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

安装SGLang

pip install "sglang[all]>=0.4.3.post4" \
--find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python \
-i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

运行SGLang+QwQ-32B

下载QwQ-32B模型的方法和步骤,参考《在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + vLLM教程》这篇文章,这里不再赘述!

假如您的模型已经下载到服务器了,并且路径是“/mnt/disk1/LLM/QwQ-32B”,我们可以运行下面的命令运行SGLang来对QwQ-32B进行推理服务!

python3 -m sglang.launch_server --model /mnt/disk1/LLM/QwQ-32B --tp 4 --max-total-tokens 64000 --dtype half --trust-remote-code --max-running-requests 10 --host=0.0.0.0 --port=4000

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

启动的过程会有点慢,大概需要数分钟!下图所示为加载模型的过程!

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

启动成功之后你会看到一个0.0.0.0的带端口的IP地址,这个就是后端的服务地址!

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

启动成功之后,跟vLLM一样,我们可以通过oneapi分发兼容openai的api,再接入到其他的类似open-webui的前端程序中!

在Ubuntu服务器4x2080ti(22G)上部署QwQ-32B + SGLang教程

优化后的命令

适配2080Ti22G*4

下面是完整模型在4张2080Ti22G的启动参数配置命令

python3 -m sglang.launch_server \
--model-path /mnt/disk1/LLM/QwQ-32B \
--host 0.0.0.0 \
--port 4000 \
--dtype half \
--trust-remote-code \
--tp 4 \
--max-total-tokens 96000 \
--max-running-requests 6 \
--mem-fraction-static 0.9 \
--max-prefill-tokens 16384 \
--chunked-prefill-size 4096 \
--schedule-policy lpm \
--attention-backend flashinfer \
--stream-output \
--device cuda \
--kv-cache-dtype auto \
--stream-interval 2 \
--disable-cuda-graph-padding \
--enable-metrics \
--warmups 3 \
--triton-attention-num-kv-splits 4 \
--reasoning-parser deepseek-r1

适配2080Ti22G*2

下面是AWQ量化模型在2张2080Ti22G优化后的启动参数设置命令,保证了速度和性能的最佳体验

python3 -m sglang.launch_server \
--model-path /mnt/disk1/LLM/QwQ-32B-AWQ \
--host 0.0.0.0 \
--port 4000 \
--dtype half \
--quantization awq \
--trust-remote-code \
--tp 2 \
--max-total-tokens 102400 \
--max-running-requests 10 \
--mem-fraction-static 0.9 \
--max-prefill-tokens 16384 \
--chunked-prefill-size 4096 \
--schedule-policy lpm \
--attention-backend flashinfer \
--stream-output \
--device cuda \
--kv-cache-dtype auto \
--stream-interval 2 \
--disable-cuda-graph-padding \
--enable-metrics \
--warmups 3 \
--triton-attention-num-kv-splits 2 \
--reasoning-parser deepseek-r1

多张显卡指定其中的某几张显卡参与模型推理,下面的案例中我指定了四张显卡中的第三张和第四张显卡参与推理(显卡的ID是从0开始计算的,分别是0、1、2、3,我这里指定了第2和第3号显卡)

python3 -m sglang.launch_server \
--model-path /mnt/disk1/LLM/QwQ-32B-AWQ \
--host 0.0.0.0 \
--port 4000 \
--dtype half \
--quantization awq \
--trust-remote-code \
--tp 2 \
--base-gpu-id 2 \  # 起始 GPU ID,我这里指定ID2的显卡就是第三张显卡开始
--gpu-id-step 1 \  # 分配 GPU 的步长,如果是1的话就是依次分配,如果是2的话就是隔一张分配一张
--max-total-tokens 102400 \
--max-running-requests 10 \
--mem-fraction-static 0.9 \
--max-prefill-tokens 16384 \
--chunked-prefill-size 4096 \
--schedule-policy lpm \
--attention-backend flashinfer \
--stream-output \
--device cuda \
--kv-cache-dtype auto \
--stream-interval 2 \
--disable-cuda-graph-padding \
--enable-metrics \
--warmups 3 \
--triton-attention-num-kv-splits 2 \
--reasoning-parser deepseek-r1

建议显存的大小至少要大于模型大小的2倍以上,才可以获得比较良好的体验!

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/zaiubuntufuwuqi4x2080ti22gshangbushuqwq-32b-sglangjiaocheng/.html

Like (0)
Donate 微信扫一扫 微信扫一扫
朋远方的头像朋远方
Previous 2025年3月12日 上午8:59
Next 2023年7月16日 下午7:07

相关推荐

发表回复

Please Login to Comment