VLLM部署大模型完整教程
1. 简介
VLLM(Very Large Language Model)是一个高效、可扩展的框架,用于部署和推理大规模语言模型。它支持多种主流大模型架构,如LLaMA、ChatGLM、Bloom等,并提供了高性能的推理能力。
本文将详细介绍如何使用VLLM部署大模型,涵盖环境准备、模型加载、推理服务搭建以及性能优化等内容。
vLLM 是 GPU-first 框架,CPU 推理几乎不可用
2. 环境准备
2.1 安装依赖
⚠️ 注意:
vLLM 主要面向 GPU 推理场景设计。
在纯 CPU 环境下虽然可以强制启动,但性能极差,不适合实际使用。
如仅有 CPU,建议使用 llama.cpp 或 Ollama。
确保你的系统满足以下要求:
- Python >= 3.8
- CUDA >= 11.0(GPU支持)
- PyTorch >= 1.13
安装VLLM及其依赖:
# 安装 vLLM(指定 CUDA 版本,根据你的 CUDA 版本选择)
# 例如 CUDA 12.8:
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.doubanio.com/simple/
2.2 检查硬件配置
建议使用NVIDIA GPU,至少具备16GB显存以支持较大的模型。可以通过以下命令检查CUDA状态:
nvidia-smi
3. 模型加载与推理
3.1 下载预训练模型
你可以从Hugging Face、魔塔社区或官方渠道下载你需要的大模型。例如,下载LLaMA-2-7B:
git lfs install
git clone https://huggingface.co/meta-llama/Llama-2-7b-hf
3.2 命令部署大模型
普通部署
python3 -m vllm.entrypoints.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--port 8000
指定使用 GPU 2~5(共 4 张卡)
CUDA_VISIBLE_DEVICES=2,3,4,5 python3 -m vllm.entrypoints.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--tensor-parallel-size 4 \
--port 8000
–tensor-parallel-size = 用来把「一个模型」切成多少份,分布到多少张 GPU 上做“张量级并行推理”
若使用openai规范则
CUDA_VISIBLE_DEVICES=2,3,4,5 python3 -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--tensor-parallel-size 4 \
--port 8000
OpenAI API 规范(最主流)
● 定义方:OpenAI(GPT 系列模型的接口标准)。
● 核心特点:
○ 接口路径以 /v1/ 为前缀,例如:
■ 对话接口:POST /v1/chat/completions
■ 文本生成接口:POST /v1/completions
■ 嵌入接口:POST /v1/embeddings
○ 请求参数标准化(如 model、messages、temperature、max_tokens 等)。
○ 响应格式统一(包含 id、object、created、choices、usage 等字段)。
● 兼容性:几乎所有主流大模型框架(vLLM、Text Generation Inference、 llama.cpp 等)都支持兼容此规范,生态最完善(如 LangChain、LLamaIndex 等工具默认适配)。
vLLM 原生规范
● 定义方:vLLM 自身的接口标准(非兼容模式)。
● 核心特点:
○ 接口路径简单,如 /generate(文本生成)、/health(健康检查)。
○ 参数更贴合 vLLM 的底层功能(如 tensor_parallel_size、gpu_memory_utilization 等)。
○ 响应格式简洁,直接返回生成的文本内容(如 {“text”: “生成结果”})。
● 适用场景:仅用于直接调用 vLLM 部署的模型,不依赖外部生态时更轻量。
3.3 Python使用VLLM加载模型
from vllm import LLM, SamplingParams
# 初始化LLM实例
llm = LLM(model="meta-llama/Llama-2-7b-hf", dtype="float16")
# 设置采样参数
sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=256)
# 推理请求
prompt = "Hello, how are you?"
outputs = llm.generate(prompts=[prompt], sampling_params=sampling_params)
for output in outputs:
print(f"Generated: {output.text}")
4. 搭建推理服务
4.1 使用FastAPI构建API服务
创建一个简单的REST API服务,供外部调用:
from fastapi import FastAPI
from pydantic import BaseModel
from vllm import LLM, SamplingParams
app = FastAPI()
# 初始化LLM
llm = LLM(model="meta-llama/Llama-2-7b-hf", dtype="float16")
class GenerateRequest(BaseModel):
prompt: str
max_tokens: int = 256
temperature: float = 0.7
top_p: float = 0.9
@app.post("/generate")
async def generate(request: GenerateRequest):
sampling_params = SamplingParams(
temperature=request.temperature,
top_p=request.top_p,
max_tokens=request.max_tokens
)
outputs = llm.generate(prompts=[request.prompt], sampling_params=sampling_params)
return {"generated_text": outputs[0].text}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
启动服务:
uvicorn main:app --reload
4.2 测试API
使用curl测试接口:
curl -X POST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"prompt": "Tell me a story about space travel.", "max_tokens": 100}'
5. 性能优化建议
- 量化:使用FP16或INT8量化降低显存占用。
- 批处理:通过设置
max_num_batched_tokens提高吞吐量。 - 缓存机制:启用KV Cache以减少重复计算。
- 多GPU支持:通过
tensor_parallel_size实现分布式推理。
6. 常见问题与解决方案
- OOM(显存不足):尝试减小
max_tokens或使用量化。 - 推理速度慢:检查是否启用了正确的CUDA版本及驱动。
- 模型无法加载:确认模型路径正确且已下载完整文件。
7. 结语
VLLM为大模型的部署提供了强大而灵活的工具链。通过本教程,你应该能够快速上手并部署自己的大模型服务。未来可以结合Docker、Kubernetes等技术进一步实现生产级部署。
参考链接:
欢迎在评论区交流经验,提出改进建议!
7万+

被折叠的 条评论
为什么被折叠?



