vLLM 推理框架—Qwen2.5-7B-Instruct部署
vLLM 简介
vLLM 框架是一个高效的大语言模型推理和部署服务系统,具备以下特性:
- 高效的内存管理:通过
PagedAttention算法,vLLM实现了对KV缓存的高效管理,减少了内存浪费,优化了模型的运行效率。 - 高吞吐量:
vLLM支持异步处理和连续批处理请求,显著提高了模型推理的吞吐量,加速了文本生成和处理速度。 - 易用性:
vLLM与HuggingFace模型无缝集成,支持多种流行的大型语言模型,简化了模型部署和推理的过程。兼容OpenAI的API服务器。 - 分布式推理:框架支持在多
GPU环境中进行分布式推理,通过模型并行策略和高效的数据通信,提升了处理大型模型的能力。 - 开源共享:
vLLM由于其开源的属性,拥有活跃的社区支持,这也便于开发者贡献和改进,共同推动技术发展。
环境准备
本文基础环境如下:
1 | --------------- |
首先 pip 换源加速下载并安装依赖包
1 | python -m pip install --upgrade pip |
模型下载
模型可通过 HuggingFace 或 ModelScope 下载 Qwen2.5-7B-Instruct 权重。
Python脚本
首先从 vLLM 库中导入 LLM 和 SamplingParams 类。LLM 类是使用 vLLM 引擎运行离线推理的主要类。SamplingParams 类指定采样过程的参数,用于控制和调整生成文本的随机性和多样性。
vLLM 提供了非常方便的封装,直接传入模型名称或模型路径即可,不必手动初始化模型和分词器。
1 | # vllm_model.py |
结果如下:
1 | Prompt: '你好,帮我介绍一下什么时大语言模型。', Generated text: ' 当然可以!大语言模型是一类能够生成自然语言文本的人工智能模型。它们通常基于深度学习技术,尤其是Transformer架构,经过大规模的预训练数据来学习语言的统计规律和结构。这些模型可以接受任意的自然语言作为输入,并能生成相关或相似的输出文本,展现出了在多种自然语言处理任务中的强大能力。\n\n大语言模型具有以下特点:\n\n1. **庞大的参数量**:大语言模型通常包含数亿乃至万亿个参数。这种巨大的规模使得模型能够更好地捕捉语言的复杂性和细微差别。\n2. **自回归生成方式**:在生成文本时,大语言模型通常是逐词进行预测并根据前文对后文进行预测,因此生成过程是有顺序依赖性的。\n3. **预训练与微调**:这类模型通常无需为每个特定任务从零开始训练。先在大量的未标记文本数据上进行预训练,然后可以在特定任务上进行微调。\n4. **广泛的应用**:大语言模型可以被应用于翻译、摘要、文本生成、问答系统、聊天机器人等多个领域。\n\n由于大语言模型需要消耗巨大的计算资源来进行训练和部署,近年来在云计算和硬件加速方面也有了快速的发展。代表性的工作包括Google的MUM(Multitask Unified Model)、阿里云的通义千问等。\n\n请让我知道如果还有其他具体的问题我能帮助解答!' |
创建兼容 OpenAI API 接口的服务器
Qwen 兼容 OpenAI API 协议,所以我们可以直接使用 vLLM 创建 OpenAI API 服务器。vLLM 部署实现 OpenAI API 协议的服务器非常方便。默认会在 http://localhost:8000 启动服务器。服务器当前一次托管一个模型,并实现列表模型、completions 和 chat completions 端口。
completions:是基本的文本生成任务,模型会在给定的提示后生成一段文本。这种类型的任务通常用于生成文章、故事、邮件等。chat completions:是面向对话的任务,模型需要理解和生成对话。这种类型的任务通常用于构建聊天机器人或者对话系统。
在创建服务器时,我们可以指定模型名称、模型路径、聊天模板等参数。
-host和-port参数指定地址。-model参数指定模型名称。-chat-template参数指定聊天模板。-served-model-name指定服务模型的名称。-max-model-len指定模型的最大长度。
1 | python -m vllm.entrypoints.openai.api_server --model /models/Qwen2.5-7B-Instruct --served-model-name Qwen2.5-7B-Instruct --max-model-len 2048 |
加载完毕后出现如下信息说明服务成功启动

服务调用
使用 curl 命令测试 OpenAI Completions API
1 | curl http://localhost:8000/v1/completions \ |
得到的返回值如下所示
1 | { |
推理速度
既然 vLLM 是一个高效的大型语言模型推理和部署服务系统,那么我们不妨就测试一下模型的回复生成速度。看看和原始的速度相比有多大的提升。这里直接使用 vLLM 自带的 benchmark_throughput.py 脚本进行测试。可以将当前文件夹 benchmark_throughput.py 脚本放在 /root/autodl-tmp/ 目录下;或者也可以自行下载最新版脚本
下面是一些 benchmark_throughput.py 脚本的参数说明:
-model参数指定模型路径或名称。-backend推理后端,可以是vllm、hf和mii。分布对应vLLM、HuggingFace和Mii推理后端。-input-len输入长度-output-len输出长度-num-prompts生成的 prompt 数量-seed随机种子-dtype数据类型-max-model-len模型最大长度-hf_max_batch_sizetransformers库的最大批处理大小(仅仅对于hf推理后端有效且为必填字段)-dataset数据集路径。(如未设置会自动生成数据)
测试 vLLM 推理速度的命令和参数设置
1 | python benchmark_throughput.py \ |
得到的结果如下所示
1 | Throughput: 9.14 requests/s, 1754.43 tokens/s |
测试其他方式(即使用 HuggingFace 的 Transformers 库)推理速度的命令和参数设置
1 | python benchmark_throughput.py \ |
得到的结果如下所示
1 | Throughput: 6.99 requests/s, 1342.53 tokens/s |
注意: 本次测试并非严谨的测试,且每个人的机器配置和环境都可能存在差异,因此上述实验结果仅供作为 case 参考,读者可以在自己的环境中取多个测试用例并多次实验取平均以得到严谨的实验结论。
| 推理框架 | requests/s | tokens/s |
|---|---|---|
vllm | 9.14 | 1754.43 |
hf | 6.99 | 1342.53 |
diff | 30.76% | 30.68% |

