在上一篇文章中,我们谈到了如何用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
更新pip
pip install --upgrade pip
安装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
安装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
运行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
启动的过程会有点慢,大概需要数分钟!下图所示为加载模型的过程!
启动成功之后你会看到一个0.0.0.0的带端口的IP地址,这个就是后端的服务地址!
启动成功之后,跟vLLM一样,我们可以通过oneapi分发兼容openai的api,再接入到其他的类似open-webui的前端程序中!
优化后的命令
适配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