qwen3 中文文档 下载 App

vLLM 部署 Qwen3 — 另一个主流高性能推理框架

vLLM 是什么

vLLM 是基于 PyTorch 的高性能大模型推理框架。和 SGLang 同属推理加速赛道,vLLM 以 PagedAttention(页式 KV Cache)为核心,在连续批处理、高吞吐场景下表现出色。

vLLM vs SGLang:两者都是顶级推理框架,但各有侧重。vLLM 在 v0.6 版本后完善了对 MoE 模型和思考模式的支持,现在和 SGLang 的功能差距已经很小。选择哪个更多是生态和团队熟悉度的问题。

安装

# CUDA 12.x
pip install vllm

# CUDA 11.8
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu118

# 检查版本
python -c "import vllm; print(vllm.__version__)"

vLLM ≥ 0.6.0 对 Qwen3 的支持更完善,建议用最新版本。

启动服务

基础启动

vllm serve Qwen/Qwen3-8B \
    --port 8000 \
    --host 0.0.0.0

多卡张量并行

# 2 卡并行
vllm serve Qwen/Qwen3-32B \
    --tensor-parallel-size 2 \
    --port 8000

# 4 卡
vllm serve Qwen/Qwen3-235B-A22B \
    --tensor-parallel-size 4 \
    --port 8000

显存优化参数

vllm serve Qwen/Qwen3-8B \
    --max-model-len 8192 \          # 降低最大上下文节省 KV Cache
    --gpu-memory-utilization 0.9 \  # 用满 90% 显存
    --max-num-seqs 32 \             # 最大并行序列数
    --port 8000

量化模型

vLLM 支持多种量化格式:

# AWQ 量化(需要 AutoAWQ)
pip install autoawq
vllm serve Qwen/Qwen3-8B-Instruct-AWQ \
    --quantization awq \
    --port 8000

# GPTQ 量化
pip install auto-gptq
vllm serve Qwen/Qwen3-8B-Instruct-GPTQ \
    --quantization gptq \
    --port 8000

# FP8 量化(Hopper GPU)
vllm serve Qwen/Qwen3-8B \
    --quantization fp8 \
    --port 8000

API 调用

Python(OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"
)

# 关闭思考
response = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[
        {"role": "user", "content": "1 + 1 = ?"}
    ],
    max_tokens=512,
    extra_body={
        "thinking": {"type": "disabled"}
    }
)
print(response.choices[0].message.content)

# 流式输出
stream = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[
        {"role": "user", "content": "介绍一下 Qwen3。"}
    ],
    stream=True,
    extra_body={"thinking": {"type": "disabled"}}
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Python(vLLM 原生 API)

from vllm import LLM, SamplingParams

llm = LLM(
    model="Qwen/Qwen3-8B",
    dtype="auto",
    max_model_len=8192
)

sampling_params = SamplingParams(
    max_tokens=512,
    temperature=0.7
)

# 关闭思考
sampling_params.extra_body = {"thinking": {"type": "disabled"}}

# 简单文本补全
outputs = llm.generate(
    prompts=["1 + 1 = ?"],
    sampling_params=sampling_params
)
print(outputs[0].outputs[0].text)

# 对话(使用 chat 方法)
messages = [
    {"role": "system", "content": "你是一个有帮助的助手。"},
    {"role": "user", "content": "介绍一下自己。"}
]

outputs = llm.chat(
    messages=messages,
    sampling_params=sampling_params,
    use_default_chat_template=True
)
print(outputs[0].outputs[0].text)

cURL 调用

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-8B",
    "messages": [{"role": "user", "content": "你好"}],
    "extra_body": {"thinking": {"type": "disabled"}},
    "max_tokens": 512
  }'

思考模式在 vLLM 中的控制

vLLM 对思考模式的支持和 SGLang 一样——通过 extra_body 传入:

# 强制关闭
"extra_body": {"thinking": {"type": "disabled"}}

# 强制开启
"extra_body": {"thinking": {"type": "always"}}

# 自动(默认)
"extra_body": {"thinking": {"type": "auto"}}

如果 vLLM 版本较老,extra_body 可能不生效。这时只能靠 prompt 控制:

messages = [{"role": "user", "content": "/no_think 1 + 1 = ?"}]

批量推理

vLLM 的强项之一是批量处理。你可以一次性提交多个请求:

from vllm import LLM, SamplingParams

llm = LLM(model="Qwen/Qwen3-8B")

sampling_params = SamplingParams(
    max_tokens=256,
    temperature=0.7,
    extra_body={"thinking": {"type": "disabled"}}
)

messages_list = [
    [{"role": "user", "content": "1 + 1 = ?"}],
    [{"role": "user", "content": "2 + 2 = ?"}],
    [{"role": "user", "content": "3 + 3 = ?"}],
    [{"role": "user", "content": "4 + 4 = ?"}],
]

outputs = llm.chat(messages_list, sampling_params)

for i, output in enumerate(outputs):
    print(f"请求 {i}: {output.outputs[0].text}")

vLLM 会自动将多个请求组成 batch,并行处理,吞吐量远高于串行调用。

PagedAttention 原理

vLLM 的 PagedAttention 技术借鉴了操作系统的虚拟内存思想:

好处:

这也是 vLLM 名字的由来(vLLM = Virtualized LLM)。

vLLM vs SGLang vs TensorRT-LLM

方面vLLMSGLangTensorRT-LLM
开发方伯克利 SkyLabLMSYSNVIDIA
核心技术PagedAttentionRadixAttentionTensorRT 优化
上手难度中等中等较难
灵活性高(PyTorch 生态)高低(NVIDIA 专属)
思考模式支持v0.6+ 支持原生支持需自行配置
MoE 支持v0.6+ 支持原生优化支持
多模态支持支持支持
推荐场景通用 PyTorch 环境生产级服务NVIDIA 集群极致性能

如果你的环境是 NVIDIA 数据中心 GPU 集群且追求极致性能,TensorRT-LLM 值得考虑。否则 vLLM 和 SGLang 足够用了。

常见问题

服务启动很慢

vLLM 首次启动需要编译 CUDA 内核。设置环境变量可以跳过部分编译:

export VLLM_USE_V1=1  # 用 v1 引擎,更快启动

显存碎片化导致 OOM

不支持的模型格式

vLLM 支持 Hugging Face 标准格式。自定义架构可能需要适配。检查版本是否够新——v0.6+ 对 Qwen3 系列支持完善。

相关阅读