vLLM和SGLang部署Qwen3.5-0.8B模型
背景
普通python包对版本依赖没有太多问题,但是涉及到模型微调和部署环境,版本依赖就非常严格,因为不仅涉及到包与包之间的依赖兼容性,还有python版本,CUDA版本之间的兼容性,因此有必要确定一个合适的版本,在此记录一下一张卡的机器上同时使用vLLM和SGLang部署Qwen3.5-0.8B模型的流程。
基础环境
Python 3.12(ubuntu22.04)
CUDA 12.4
RTX 4090
使用以上版本安装新的机器,本文使用autodl租用的GPU机器。
虚拟环境
因为vLLM和SGLang有版本依赖冲突(sgl-kernel、triton 等),因此两者环境必须隔离,另外还需要给客户端一个虚拟环境。
为避免将系统盘撑爆,因此需要设置pip缓存到数据盘,并在数据盘创建独立环境
cd /root/autodl-tmp
python -m venv vllm_env
python -m venv sglang_env
python -m venv client_env
为避免将系统盘撑爆,因此设置pip缓存到数据盘,在~/.bashrc最后添加:
export PIP_CACHE_DIR=/root/autodl-tmp/pip-cache
并执行source ~/.bashrc
下载模型
激活客户端环境
source /root/autodl-tmp/client_env/bin/activate
下载Qwen3.5-0.8B模型到/root/autodl-tmp/models
安装vLLM
激活vllm环境
source /root/autodl-tmp/vllm_env/bin/activate
执行以下脚本download_model.py下载模型
# -*- coding: utf-8 -*-
"""
模型下载脚本
课程:高质量微调数据工程与评估
功能:下载 Qwen3.5-0.8B 模型到本地目录
"""
import os
import sys
# ========================================
# 配置区域(根据环境修改)
# ========================================
MODEL_ID = "Qwen/Qwen3.5-0.8B"
# AutoDL环境
AUTODL_CACHE_DIR = "/root/autodl-tmp/models"
# 本地Windows环境
LOCAL_CACHE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "models")
def detect_environment():
"""检测当前运行环境"""
if sys.platform == "win32":
return "windows", LOCAL_CACHE_DIR
elif os.path.exists("/root/autodl-tmp"):
return "autodl", AUTODL_CACHE_DIR
else:
return "linux", LOCAL_CACHE_DIR
def download_with_modelscope(model_id, cache_dir):
"""使用ModelScope下载模型(国内推荐)"""
from modelscope import snapshot_download
print(f"使用ModelScope下载模型: {model_id}")
print(f"下载目录: {cache_dir}")
os.makedirs(cache_dir, exist_ok=True)
model_dir = snapshot_download(model_id, cache_dir=cache_dir)
print(f"模型下载完成: {model_dir}")
return model_dir
def download_with_huggingface(model_id, cache_dir):
"""使用HuggingFace下载模型"""
from huggingface_hub import snapshot_download
print(f"使用HuggingFace下载模型: {model_id}")
print(f"下载目录: {cache_dir}")
os.makedirs(cache_dir, exist_ok=True)
model_dir = snapshot_download(
model_id,
cache_dir=cache_dir,
local_dir=os.path.join(cache_dir, model_id.split("/")[-1]),
)
print(f"模型下载完成: {model_dir}")
return model_dir
def main():
env_name, cache_dir = detect_environment()
print(f"检测到环境: {env_name}")
print(f"模型: {MODEL_ID}")
print(f"下载目录: {cache_dir}")
print()
# 优先使用ModelScope(国内速度更快)
try:
model_dir = download_with_modelscope(MODEL_ID, cache_dir)
except ImportError:
print("ModelScope未安装,尝试使用HuggingFace...")
print("提示: pip install modelscope")
try:
model_dir = download_with_huggingface(MODEL_ID, cache_dir)
except ImportError:
print("HuggingFace Hub也未安装")
print("请先安装: pip install modelscope 或 pip install huggingface_hub")
return
print()
print("=" * 60)
print("下载完成!")
print(f"模型路径: {model_dir}")
print()
print("在微调脚本中使用此路径:")
print(f' model_name = "{model_dir}"')
print("=" * 60)
if __name__ == "__main__":
main()
安装命令
pip install --upgrade pip
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu124
安装成功后,执行vllm -v查看安装版本

启动模型,执行命令
vllm serve /root/autodl-tmp/models/Qwen/Qwen3___5-0___8B --tensor-parallel-size 1 --max-model-len 4096 --enforce-eager
验证vLLM推理模型
激活客户端环境
source /root/autodl-tmp/client_env/bin/activate
在客户端环境下执行以下脚本1-qwen3-vllm.py:
#!/usr/bin/env python
# coding: utf-8
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy" # vLLM 不验证 key,但必须填
)
response = client.chat.completions.create(
model="/root/autodl-tmp/models/Qwen/Qwen3___5-0___8B",
messages=[{"role": "user", "content": "你好,请介绍下自己"}],
max_tokens=512
)
print(response.choices[0].message.content)
执行结果如下:

正常返回,说明部署没有问题。
安装SGLang
激活sglang环境
source /root/autodl-tmp/sglang_env/bin/activate
安装命令
pip install --upgrade pip
pip install "sglang[all]>=0.4.6.post1"
安装成功后,执行sglang version查看安装版本

启动模型,执行命令
python -m sglang.launch_server
--model-path /root/autodl-tmp/models/Qwen/Qwen3___5-0___8B
--port 8001
--host 0.0.0.0
--mem-fraction-static 0.4
--max-running-requests 16
--context-length 4096
--chunked-prefill-size 2048
--enable-metrics
发现有报错:

根据提示,因为当前cudnn版本有漏洞,执行以下命令升级cudnn:
pip install nvidia-cudnn-cu12==9.16.0.29
验证SGLang推理模型
激活客户端环境
source /root/autodl-tmp/client_env/bin/activate
在客户端环境下执行以下脚本2-qwen3-sglang.py:
#!/usr/bin/env python
# coding: utf-8
from openai import OpenAI
# 只需要改 base_url,其他代码完全不变
client = OpenAI(
base_url="http://localhost:8001/v1",
api_key="not-needed" # 本地部署不需要 key
)
response = client.chat.completions.create(
model="Qwen3.5-0.8B",
messages=[
{"role": "system", "content": "你是一个有帮助的AI助手。"},
{"role": "user", "content": "用一句话解释什么是大语言模型。"}
],
temperature=0.7,
max_tokens=200
)
print(response.choices[0].message.content)
执行结果如下:

正常返回,说明部署没有问题,而且同样的提示词,明显肉眼可见SGLang比vLLM快很多。
结论
本文在同一台机器上安装vLLM和SGLang,命令其实很简单,主要是要安装很多包,因此一定要配置国内源,否则时间会超级长。还有最重要的一点就是要做环境隔离,否则会越多各种奇怪的问题。另外因为本地只有一张4090的显卡,只有24GB显存,因此需要对vLLM和SGLang配置显存大小,否则会报OOM。vLLM和SGLang还有很多参数,本次没有涉及,下次再详细说明。

浙公网安备 33010602011771号