企业私有 RAG 大模型构建:Qwen2.5 与 vLLM 部署实战
本文介绍了企业私有 RAG 系统中 Qwen2.5-7B 大模型的 vLLM 部署实战。内容涵盖环境配置、模型下载、Python 推理脚本编写及 OpenAI 兼容 API 服务构建。通过 vLLM 加速可显著提升推理性能,支持单卡或多卡部署,适用于客服、文案生成等场景。文章还补充了 Docker 容器化部署及多卡负载均衡策略,为 RAG 应用落地提供技术参考。

本文介绍了企业私有 RAG 系统中 Qwen2.5-7B 大模型的 vLLM 部署实战。内容涵盖环境配置、模型下载、Python 推理脚本编写及 OpenAI 兼容 API 服务构建。通过 vLLM 加速可显著提升推理性能,支持单卡或多卡部署,适用于客服、文案生成等场景。文章还补充了 Docker 容器化部署及多卡负载均衡策略,为 RAG 应用落地提供技术参考。

在上一篇文章中,我们详细介绍了如何通过 vLLM 加速部署开源模型 GLM-4-9B-Chat。在企业真实场景中,开发接口通常需要针对具体需求进行定制化处理,以更好地适配 RAG(检索增强生成)应用系统的实际需求。
在 RAG 系统的架构中,大模型扮演着至关重要的角色,是整个流程的'最后一环'。知识库的构建、检索,以及知识的排序与整合,都是为了为大模型提供准确、完整的上下文知识。这种知识支撑可以显著降低大模型生成过程中的幻觉问题(如生成不可靠或错误答案)。因此,大模型的生成能力直接决定了 RAG 系统的服务质量,特别是在为用户问题生成答案时,精准性与可靠性尤为关键。
目前可商用的开源大模型主要包括:
DeepSeekV3 近期备受瞩目,其多项测试指标超越了其他开源模型,甚至在某些方面达到或超过部分闭源大模型的水平。V3 模型体量巨大,尽管 vLLM、SGLang 和 LMDeploy 等加速框架已支持其部署,但仍有许多优化空间。此外,部署所需的 GPU 资源极为庞大,对企业硬件条件提出了较高要求。因此,本文主要介绍阿里 Qwen2.5-7B 模型的 vLLM 部署与示例。
Qwen2.5 是 Qwen 家族的新成员,具有以下特点:
企业可根据成本和业务需求选择硬件设备,以下是推荐配置:
确保环境与硬件兼容,是大模型高效运行的关键。
执行以下命令创建 Conda 环境并安装依赖:
conda create -n vllm_qwen python=3.10
conda activate vllm_qwen
# 升级 pip
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install vllm
pip install modelscope[framework]
直接安装 vLLM,默认会安装支持 CUDA 12.1 及以上版本的 vLLM。如果我们需要在 CUDA 11.8 的环境下安装 vLLM,需指定 vLLM 版本和 Python 版本下载安装。
模型的下载可以使用以下两种方式:
/qwen 目录下:
git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git
/qwen 目录下:
git clone https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct
下载完成后可以看到目录结构如下:
qwen/Qwen2.5-7B-Instruct/
|-- LICENSE
|-- README.md
|-- config.json
|-- configuration.json
|-- generation_config.json
|-- merges.txt
|-- model-00001-of-00004.safetensors
|-- model-00002-of-00004.safetensors
|-- model-00003-of-00004.safetensors
|-- model-00004-of-00004.safetensors
|-- model.safetensors.index.json
|-- tokenizer.json
|-- tokenizer_config.json
`-- vocab.json
在 /qwen 目录下创建 vllm_run.py,创建完目录结构如下:
/qwen/
|-- Qwen2.5-7B-Instruct/
| |-- ... (模型文件)
`-- vllm_run.py
vllm_run.py 代码如下,通过示例代码可以快速熟悉 vLLM 引擎的使用方式:
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
max_model_len, tp_size = 2048, 1
model_name = "./Qwen2.5-7B-Instruct"
prompt = [{"role": "user", "content": "你好,讲讲你是谁?"}]
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
llm = LLM(
model=model_name,
tensor_parallel_size=tp_size,
max_model_len=max_model_len,
trust_remote_code=True,
enforce_eager=True,
enable_chunked_prefill=True,
max_num_batched_tokens=2048
)
stop_token_ids = [151329, 151336, 151338]
sampling_params = SamplingParams(temperature=0.95, max_tokens=1024, stop_token_ids=stop_token_ids)
inputs = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True)
outputs = llm.generate(prompts=inputs, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
执行以下命令:
# export CUDA_VISIBLE_DEVICES=3,如果不指定卡号,默认使用 0 卡
python vllm-run.py
执行结果示例:
INFO 01-11 04:21:12 model_runner.py:1099] Loading model weights took 14.2487 GB
INFO 01-11 04:21:13 worker.py:241] Memory profiling takes 0.69 seconds
INFO 01-11 04:21:13 worker.py:241] the current vLLM instance can use total_gpu_memory (23.64GiB) x gpu_memory_utilization (0.90) = 21.28GiB
INFO 01-11 04:21:13 worker.py:241] model weights take 14.25GiB; non_torch_memory takes 0.12GiB; PyTorch activation peak memory takes 1.40GiB; the rest of the memory reserved for KV Cache is 5.51GiB.
INFO 01-11 04:21:13 gpu_executor.py:76] # GPU blocks: 6443, # CPU blocks: 4681
INFO 01-11 04:21:13 gpu_executor.py:80] Maximum concurrency for 2048 tokens per request: 50.34x
INFO 01-11 04:21:17 llm_engine.py:431] init engine (profile, create kv cache, warmup model) took 4.89 seconds
Processed prompts: 100%|█████████████████████████████████████████| 1/1 [00:00<00:00, 1.01it/s, est. speed input: 36.52 toks/s, output: 53.76 toks/s]
你好!我是 Qwen,我是由阿里云开发的一种超大规模语言模型。我被设计用来回答问题、提供信息、参与对话,旨在帮助用户获得所需的知识和信息。如果你有任何问题或需要帮助,都可以尝试和我交流。
使用 vLLM 来构建与 OpenAI 兼容的 API 服务,包括工具使用支持。使用聊天模型启动服务器。
例如:在 /qwen 目录下执行以下命令:
export CUDA_VISIBLE_DEVICES=3 // 指定 GPU 默是 0 卡
vllm serve Qwen2.5-7B-Instruct
通过 curl 命令查看当前 API Server 的模型列表。
curl http://localhost:8000/v1/models
查看结果如下:
{
"object": "list",
"data": [{
"id": "Qwen2.5-7B-Instruct",
"object": "model",
"created": 1736570004,
"owned_by": "vllm",
"root": "Qwen2.5-7B-Instruct",
"parent": null,
"max_model_len": 32768,
"permission": [{
"id": "modelperm-62acae496e714754b5d8866fff32f0cb",
"object": "model_permission",
"created": 1736570004,
"allow_create_engine": false,
"allow_sampling": true,
"allow_logprobs": true,
"allow_search_indices": false,
"allow_view": true,
"allow_fine_tuning": false,
"organization": "*",
"group": null,
"is_blocking": false
}]
}]
}
聊天对话接口,curl 使用 prompt 调用:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "Qwen2.5-7B-Instruct",
"messages": [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": "告诉我一些关于大型语言模型的事情。"}
],
"temperature": 0.7,
"top_p": 0.8,
"repetition_penalty": 1.05,
"max_tokens": 512
}'
查看结果如下:
{
"id": "chatcmpl-c774bbba1c5c47579a77dec6ef87d987",
"object": "chat.completion",
"created": 1736570396,
"model": "Qwen2.5-7B-Instruct",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "当然,我很乐意为您介绍一些关于大型语言模型的知识!...",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}],
"usage": {
"prompt_tokens": 37,
"total_tokens": 424,
"completion_tokens": 387,
"prompt_tokens_details": null
},
"prompt_logprobs": null
}
使用 vLLM 加速后模型的性能通常可提升 30% 以上,具体取决于显存带宽和并发请求数。
为了便于管理和迁移,推荐使用 Docker 部署 vLLM 服务。
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y python3-pip
WORKDIR /app
COPY requirements.txt .
RUN pip install vllm torch transformers
COPY . .
CMD ["vllm", "serve", "Qwen2.5-7B-Instruct"]
对于高并发场景,可采用多 GPU 部署。设置 tensor_parallel_size 参数为 GPU 数量。同时,结合 Nginx 方案可实现高效负载均衡,确保服务的高可用性。
开源模型在应对 RAG 生成任务时表现不错,单卡 4090 足以支持单企业的多人并发 RAG 问答需求。然而,目前开源模型在知识图谱识别能力上仍有局限。对于 RAG 系统中知识图谱的建立功能,建议引入各大模型厂商的 API 服务进行调用,这样能够显著提升效果,确保数据更精准地满足业务需求。
Qwen2.5 典型的应用包括:客服聊天、文案生成、PPT 文案生成等。在实际接入企业内部各种应用时,需注意上下文窗口的管理,避免超出模型限制导致截断。
本文详细介绍了 Qwen2.5-7B 模型在 vLLM 框架下的部署流程,包括环境搭建、模型下载、本地推理脚本编写以及 OpenAI 兼容 API 服务的启动。通过 vLLM 加速,可以显著提升推理速度,满足企业级私有化部署的需求。后续可根据业务量扩展多 GPU 集群,并结合 LangChain 等框架进一步构建完整的 RAG 应用系统。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online