这篇适合谁
适合想用 Qwen2.5-Coder 写代码、又希望自己搭一个推理服务的开发者。读完你应该能用 vLLM 启动 Qwen2.5-Coder-7B-Instruct,用 curl 发出补全和对话请求,并用 vLLM 自带的脚本比较它和 Transformers 的吞吐。
vLLM 是什么
vLLM 是面向大语言模型的推理和部署系统。它用 PagedAttention 算法管理 KV 缓存,减少显存浪费[1]。它还支持异步处理和连续批处理请求,以提高推理吞吐[1]。vLLM 能和 Hugging Face 模型配合使用,并兼容 OpenAI API 服务器,支持在多块 GPU 之间做分布式推理[1]。
环境准备
测试环境是 Ubuntu 22.04、Python 3.12、CUDA 12.1 和 PyTorch 2.4.0[1]:
----------------
ubuntu 22.04
python 3.12
cuda 12.1
pytorch 2.4.0
----------------默认你已经装好了带 CUDA 的 PyTorch;如果还没装,需要先自行安装[1]。接下来换成清华的 pip 源加速下载,再安装依赖[1]:
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope==1.20.0
pip install transformers==4.46.2
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install vllm==0.6.3.post1
pip install accelerate==0.26.0安装顺序照着上面的命令来即可。其中 torch 要指定 cu121 的索引地址,和 CUDA 12.1 对应[1]。
下载模型
模型可以用 modelscope 下载。snapshot_download 的第一个参数是模型名称,local_dir 指定下载目录[1]。Qwen2.5-Coder-7B-Instruct 约 16 GB,示例中的下载大约花了 12 分钟[1]。脚本如下,运行前要把 local_dir 改成你自己的路径[1]:
from modelscope import snapshot_download
snapshot_download('Qwen/Qwen2.5-Coder-7B-Instruct', local_dir='/root/autodl-tmp/Qwen2.5-Coder-7B-Instruct')离线推理:用 LLM 直接生成
vLLM 的 LLM 类用于离线推理,SamplingParams 用于设置采样参数[1]。只要传入模型名称或路径,vLLM 就会处理模型和分词器的初始化,不必手动加载[1]。下面的函数封装了这一步[1]:
def prepare_model(model_path, max_tokens=512, temperature=0.8, top_p=0.95, max_model_len=2048):
# 初始化 vLLM 推理引擎
llm = LLM(model=model_path, tokenizer=model_path, max_model_len=max_model_len,trust_remote_code=True)
return llm采样时,temperature 控制生成文本的多样性,top_p 控制核心采样的概率范围[1]。示例还把 stop_token_ids 设为 [151329, 151336, 151338][1]。
对话模型要先套用聊天模板,示例中的写法是[1]:
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)启动 OpenAI 兼容服务
vLLM 可以直接创建兼容 OpenAI API 的服务器。默认在 http://localhost:8000 启动,一次托管一个模型,并提供模型列表、completions 和 chat completions 接口[1]。completions 适合按提示续写文本,chat completions 适合多轮对话[1]。
启动命令如下[1]:
python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/Qwen2.5-Coder-7B-Instruct --served-model-name Qwen2.5-Coder-7B-Instruct --max-model-len=2048启动参数里,--host 和 --port 指定地址,--model 指定模型,--served-model-name 指定对外的模型名,--max-model-len 指定最大长度,--chat-template 指定聊天模板[1]。示例中的模型名 Qwen2.5-Coder-7B-Instruct 就是用 --served-model-name 设的,请求时要用同一个名字[1]。
先用 curl 查看模型列表[1]:
curl http://localhost:8000/v1/models用 curl 测试两种接口
补全接口用 prompt 字段传入提示,max_tokens 限制输出长度,temperature 设为 0 时输出更稳定[1]:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen2.5-Coder-7B-Instruct",
"prompt": "帮我写一个用于注册的Servlet",
"max_tokens": 500,
"temperature": 0
}'对话接口用 messages 数组,每条消息带上 role 和 content[1]:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen2.5-Coder-7B-Instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,你都会什么编程语言?"}
]
}'服务端在处理请求时会打印日志和统计信息,可以据此观察每次请求的情况[1]。
和 Transformers 比较推理速度
vLLM 自带 benchmark_throughput.py 脚本,可以直接使用,也可以从 GitHub 下载最新版[1][2]。它的主要参数包括:--backend 可选 vllm、hf 和 mii,分别对应 vLLM、HuggingFace 和 Mii 后端;--input-len 和 --output-len 设置输入和输出长度;--num-prompts 设置请求数量;--hf-max-batch-size 只对 hf 后端有效,并且必须填写[1]。
vLLM 后端的测试命令和结果如下[1]:
python benchmark_throughput.py \
--model /root/autodl-tmp/Qwen2.5-Coder-7B-Instruct \
--backend vllm \
--input-len 64 \
--output-len 128 \
--num-prompts 25 \
--seed 2024 \
--dtype float16 \
--max-model-len 512Transformers 后端的测试命令和结果如下[1]:
python benchmark_throughput.py \
--model /root/autodl-tmp/Qwen2.5-Coder-7B-Instruct \
--backend hf \
--input-len 64 \
--output-len 128 \
--num-prompts 25 \
--seed 2024 \
--dtype float16 \
--hf-max-batch-size 25两组结果中,vLLM 的输出吞吐为 1024.10 tokens/s,Transformers 为 722.39 tokens/s,前者约为后者的 1.4 倍[1]。这次测试在单张 RTX 3090 24G 上完成。它不是严格的基准测试,每台机器的配置和环境都不同,结果只能作为参考。要得到可靠的结论,应该在自己的环境里多跑几组并取平均[1]。
下一步
vLLM 的参数和更多部署方式,可以以官方 GitHub 仓库中的基准脚本和文档为准[2]。
本文改编自 Datawhale 开源项目 self-llm 中的教程《03-Qwen2.5-7B-Instruct vLLM 部署调用》[1],原文以 Apache-2.0 许可证发布。
来源
- 103-Qwen2.5-7B-Instruct vLLM 部署调用Datawhale self-llm (Apache-2.0)
- 2benchmark_throughput.pyvLLM project (GitHub)
引用本页: Qwen2.5-Coder 用 vLLM 部署. TellWorld, https://www.tellworld.net/zh/practice/practice-qwen2-5-coder-vllm. 更新于 2026-11-14